//// This code is part of Document Solutions for PDF .NET demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem;usingSystem.IO;usingGrapeCity.Documents.Pdf;usingGrapeCity.Documents.Pdf.AcroForms;usingGrapeCity.Documents.Pdf.Spec;usingDsPdfWeb.Demos.Common; namespaceDsPdfWeb.Demos{// This example shows how to load a password protected PDF Form without specifying the password,// and change the value of a text field and a comb-text field in the form.// The modified PDF is saved and re-opened with the password so that we can show it in the demo.publicclassNoPassSetFormFields {publicintCreatePDF(Stream stream) {usingvar fsSrc = File.OpenRead(Path.Combine("Resources", "PDFs", "FormFields-password-user.pdf"));// Set up DecryptionOptions to allow loading password protected PDFs without password:var dopt = newDecryptionOptions() { ThrowExceptionIfInvalidPassword = false };var docSrc = newGcPdfDocument(); docSrc.Load(fsSrc, dopt); // Change the value of CheckBoxField//// Note 1:// We cannot access the fields by names, like:// doc.AcroForm.Fields["cbf1"];// because strings in a password protected PDF are encrypted// and cannot be accessed without specifying the password.// The only way is to access fields by indices.var cbf = (CheckBoxField)docSrc.AcroForm.Fields[0]; cbf.Checked = true; // Change the value of RadioButtonField:var rbf = (RadioButtonField)docSrc.AcroForm.Fields[1];var values = rbf.GetCheckedAppearanceStreamNames(); rbf.Value = values[0]; // Change the value of the TextField, set it to the current date/time:var tf = (TextField)docSrc.AcroForm.Fields[2];// Note 2:// The value of a TextField is specified as a string, but it is not possible// to work with strings in a password protected PDF without specifying the password.// In such cases it is possible to use a workaround to set it using PdfName,// while it is not compliant with the PDF specification,// at least Adobe Acrobat supports this scenario: tf.PdfValue = newPdfName(Common.Util.TimeNow().ToString()); // Change the value of a CombTextField to a random string:var ctf = (CombTextField)docSrc.AcroForm.Fields[3];var val = Util.LoremIpsum(1, 1, 1, 2, 3); val = val.Substring(0, Math.Min(val.Length, 10)); ctf.PdfValue = newPdfName(val); // Note 3: appearance streams cannot be generated in a password protected PDF// that was loaded without specifying the password, so we set// the NeedAppearances entry of the AcroForm, which instructs Acrobat to generate// the missing appearance streams: docSrc.AcroForm.Set(PdfName.Std.NeedAppearances, PdfBool.True); // Demo site specific:// We save the modified password protected document to a temp file,// and load it again with the password, so that the demo site can show it// without asking the user for a password (the block is to delete the temp file):var fn = Path.GetTempFileName(); { docSrc.Save(fn);var doc = newGcPdfDocument();usingvar fs = File.OpenRead(fn); doc.Load(fs, "user"); doc.Save(stream); }File.Delete(fn);return docSrc.Pages.Count; } }}