我有一个 PDF 模板,其中包含启用了扩展功能的表单。填写此表格的字段后,使用iTextSharp,使用 acrobat reader 的用户收到错误消息:
本文档启用了 Adobe Reader 中的扩展功能。该文件有
自创建以来已发生更改,并且不再使用扩展功能
可用的。如需本文原版请联系作者
文档。
我用谷歌搜索了一下,但所有帖子都谈到“启用”扩展功能,但是,我希望保留表单字段disabled和扩展功能关掉
这是我正在使用的示例代码:
using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
{
// Open existing PDF
var pdfReader = new PdfReader(existingFileStream);
// PdfStamper, which will create
var stamper = new PdfStamper(pdfReader, newFileStream);
var form = stamper.AcroFields;
var fieldKeys = form.Fields.Keys;
foreach (string fieldKey in fieldKeys)
{
if (fieldKey.Equals("Retailer Name"))
form.SetField(fieldKey, retailerName);
}
// “Flatten” the form so it wont be editable/usable anymore
stamper.FormFlattening = true;
stamper.Close();
pdfReader.Close();
}
The links here are dead as the iTextPdf web site has been completely revamped. But the answer can be understood without those links, too.
The iText 关键字 http://itextpdf.com/themes/keywords.php: 支持阅读器的 PDF http://itextpdf.com/themes/keyword.php?id=327指向以下信息:
由 Bruno Lowagie 于 2010 年 12 月 31 日星期五 - 16:37 提交
填写表格后,我的 PDF 显示以下消息:此文档启用了 Adobe Reader 中的扩展功能。该文档自创建以来已发生更改,并且不再可以使用扩展功能。请联系作者获取本文档的原始版本。如何避免出现此消息?
表单的创建者启用了文档阅读器。只能使用 Adobe 软件启用阅读器。您可以通过两种方式避免出现此消息:
- 删除使用权。这将导致表单不再启用 Reader。例如:如果文档的创建者允许将填写的表单保存在本地,则在删除使用权限后将不再可能。
- 以附加模式填写表格。这将导致文件大小更大,但读取器启用将被保留。
它还指向样本ReaderEnabledForm.java http://itextpdf.com/examples/iia.php?id=166(C#/iTextSharp 的等价物是)它展示了如何做。
在你的情况下,这相当于打电话
pdfReader.RemoveUsageRights();
创建后立即PdfReader
并在创建之前PdfStamper.
/**
* Removes any usage rights that this PDF may have. Only Adobe can grant usage rights
* and any PDF modification with iText will invalidate them. Invalidated usage rights may
* confuse Acrobat and it's advisabe to remove them altogether.
*/
public void RemoveUsageRights()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)