我正在使用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 .
我现在的问题是用户可以填写文档(复选框和文本框),但如果用户保存文档,则填充的复选框将消失 . 因此,如果用户向我发回文档,则其中没有复选框 .
我不明白为什么只有复选框消失 .