Itext 7 - PdfReader 未使用所有者密码错误打开

Posted

技术标签:

【中文标题】Itext 7 - PdfReader 未使用所有者密码错误打开【英文标题】:Itext 7 - PdfReader is not opened with owner password Error 【发布时间】:2018-06-12 09:23:28 【问题描述】:

我正在使用This example 获取最新的 Itext7 来填写文档,我收到此错误:iText.Kernel.Crypto.BadPasswordException: PdfReader is not opens with owner password 所以我环顾网络,发现有些人使用PdfReader.unethicalreading = true; 找到了解决此错误的方法,但是当我尝试使用相同的代码时,它说 PDFReader 中没有名为 unethicalreading 的定义

这是我的代码:

 string src = @"C:\test1.pdf";
    string dest = @"C:\Test2.pdf";
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
    IDictionary<String, PdfFormField> fields = form.GetFormFields();
    PdfFormField toSet;
    fields.TryGetValue("Name", out toSet);
    toSet.SetValue("Some text");

【问题讨论】:

【参考方案1】:

您需要像这样更改您的代码:

string src = @"C:\test1.pdf";
string dest = @"C:\Test2.pdf";
PdfReader reader = new PdfReader(src);
reader.setUnethicalReading(true);
PdfDocument pdfDoc = new PdfDocument(reader, new PdfWriter(dest));
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
IDictionary<String, PdfFormField> fields = form.GetFormFields();
PdfFormField toSet;
fields.TryGetValue("Name", out toSet);
toSet.SetValue("Some text");

这将允许您违反文档原作者定义的权限。这也证明设置这样的权限已经过时了,因为自从 PDF 成为 ISO 标准后,删除这些权限不再受到惩罚。

【讨论】:

以上是关于Itext 7 - PdfReader 未使用所有者密码错误打开的主要内容,如果未能解决你的问题,请参考以下文章

itext5去掉pdf不能复制权限

itext API无法从Adobe生命周期工具生成的动态pdf中获取字段

iText onchange事件未触发

如何使用 iText 7 删除受密码保护的 pdf 中的密码

使用 itext 7 在 PDF 中添加新页面

使用iText 7(C#)创建删除线字体