我正在使用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 .

我现在的问题是用户可以填写文档(复选框和文本框),但如果用户保存文档,则填充的复选框将消失 . 因此,如果用户向我发回文档,则其中没有复选框 .

我不明白为什么只有复选框消失 .