使用 UDJC 在 Pentaho 中读取受密码保护的 PDF

Posted

技术标签:

【中文标题】使用 UDJC 在 Pentaho 中读取受密码保护的 PDF【英文标题】:Read password protected PDF in Pentaho using UDJC 【发布时间】:2017-01-26 14:41:44 【问题描述】:

我正在尝试使用 bcprov-jdk15on-1.56.jaritextpdf-5.5.10.jar 解锁受密码保护的 PDF,但出现以下异常。我正在使用“用户定义的 Java 类”转换任务。

例外:类“org.bouncycastle.asn1.ASN1Primitive”的签名者信息与同一包中其他类的签名者信息不匹配

这是我写的代码行,

String pdfFilePath = get(Fields.In, "PDFFilePath").getString(r);

String dest = pdfFilePath +"_unlocked.pdf";

try 
    PdfReader reader = new PdfReader(pdfFilePath,owner_password.getBytes());
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));

    stamper.close();
    reader.close();

catch(Exception e) 
    logBasic("EXCEPTION WHILE UNLOCKING PDF = " + e.getMessage());

知道吗,这有什么问题?

谢谢, 尼禄

【问题讨论】:

你提到了 Pentaho。您是说 Pentaho 附带 AGPL 的 iText 5.5.10 吗?如果是这样,Pentaho 是否将其代码作为 AGPL 发布? @BrunoLowagie,不清楚哪个是许可,但确实发布了来源:github.com/pentaho 【参考方案1】:

您的类路径中似乎有多个 BouncyCastle 罐子。尝试使用版本 1.49,这是 iText 5.5.10 编译的版本,如果它没有帮助,您将必须弄清楚哪些 jar 恰好在您的类路径中并删除重复项。

【讨论】:

运行mvn dependency:tree 可能会有所帮助。 @Alexey- 谢谢。 Pentaho(以及所有其他库)默认有一个 bcprov-jdk14-138.jar。删除它并没有收到上述错误。但现在我遇到了其他问题。它无法使用该密码打开 PDF 文件。密码正确;我可以从 Acrobat 阅读器使用相同的密码打开 PDF。我从 Pentaho UDJC 任务中收到错误“PdfReader not opens with owner password”。 @NNaseet,对于Pentaho 的开发人员来说,这可能更像是一个关于他们是否正确使用iText 的问题。但是,问题可能要简单得多:pdf 文档可能有用户和所有者密码,只有所有者密码才能完全控制文档。您提供的密码很可能是足以阅读文档的用户密码,但不足以执行尝试完成的操作。 @AlexeySubach - 是的,它只是所有者密码。是的,我正在咨询 Pentaho 社区。感谢您的帮助! @AlexeySubach - 看起来这是用户密码,因为相同的程序适用于其他具有所有者密码的 PDF。

以上是关于使用 UDJC 在 Pentaho 中读取受密码保护的 PDF的主要内容,如果未能解决你的问题,请参考以下文章

Janino 编译异常:UDJC 步骤

使用 OpenXml 读取受密码保护的 Excel 文件

如何检查 PDF 是不是受密码保护

如何从 Pentaho 的 javascript 步骤中的另一行读取?

使用 StAX / Kettle (Pentaho) 读取 XML 文件

Pentaho 5.3 - 如何读取 PRPT 文件中的属性