我正在使用iTextSharp在我的模板上用值填充我的表单字段。 其中一些字段应该展平,以便用户无法编辑它。 其余字段应由用户填写,我的程序可以读出数据并将其插入数据库。
我的解决方案适用于Abobe Reader DC,但我在使用Adobe Reader X时遇到问题。无法在客户端上更新版本。
所以我在PDF模板中启用了使用权限。问题是使用iTextSharp我必须在PdfStamper上启用追加。如果启用此选项,则由于文档上的Adobe签名,无法展平表单的一部分。
现在我有以下想法:
我将模板分成两个文件。第一个文档使用我的代码填充,Formflattening也是如此。
以下是代码:
MemoryStream outstream = new MemoryStream();
Document document = new Document();
PdfSmartCopy writer = new PdfSmartCopy(document, outstream);
document.Open();
//newFileStream is the flattend Form
pdfReader = new PdfReader(newFileStream.ToArray());
writer.AddDocument(pdfReader);
PdfReader reader = new PdfReader(Properties.Resources.PdfForm);
writer.AddDocument(reader);
reader.Close();
writer.Close();
document.Close();
return outstream.ToArray();
现在我将文档与我的第二个模板合并并保存,然后我就拥有了我想要的文档。第一页是'readonly',第二页有formfields。
我现在的问题是用户可以填写文档(复选框和文本框),但如果用户保存文档,则填充的复选框将消失。因此,如果用户向我发回文档,则其中没有复选框。
我不明白为什么只有复选框消失。