iText 从 PDF 中删除受保护的视图

iText to remove Protected View from a PDF

我正在努力从一系列 PDF 中删除受保护的视图,并尝试在 VBA 中使用 iText 库。此时我的主要问题是我不知道使用什么方法,而且 iText 文档非常密集。

我也感觉到了从 VBA 调用 iText 库的前进方向,因此也感谢任何语法方面的帮助,尽管我相信如果我知道的话我可以自己到达那里调用哪个方法...

目前,我有:

Dim program As WshExec
program = Shell("Java.exe -jar " & mypath & "\itext-5.5.6\itextpdf-5.5.6.jar")
'Debug.print program returns a value here, so this line works.

'I'm thinking I need something like:
'Set program = RunProgram("Java.exe -jar " & mypath & "\itext-5.5.6\itextpdf-5.5.6.jar", & _
methodName, param1)

到目前为止,我一直在使用以下问题...

Calling Java library (JAR) from VBA/VBScript/Visual Basic Classic

Microsoft Excel Macro to run Java program

所需功能是将未受保护的 PDF 放在 mypath 上的文件夹中。

您尝试 运行 的 jar 不是可执行 jar。 iText 是一个库,可通过将 itextpdf-5.5.6.jar 添加到 CLASSPATH 来在 Java 应用程序中使用。如果你不写任何 Java 代码,那么 jar 什么也不会做,因此你的 Shell() 和你的 RunProgram() 方法是无用的:没有什么可执行的。

此外:从你的问题来看,你的机器上是否有一个 Java 环境还远不能确定。您在 VBA 环境中工作,这让人想知道为什么您会使用 Java 版本的 iText。您是否尝试过使用 iTextSharp,它是 iText 的 .NET 版本(用 C# 编写)?

看看这个教程:Programmatically Complete PDF Form Fields using Visual Basic and the iTextSharp DLL

在本教程中,我们使用现有的 PDF,填写表格,然后获得基于原始 PDF 的另一个 PDF,但包含额外的数据。您可以轻松调整代码,使其采用现有 PDF,不向 PDF 添加任何内容,但保存原始 PDF 时不带密码,如我对 How can I decrypt a PDF document with the owner password?

的回答中所述

如果你结合你可以从我的 Java 代码中学到的东西:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    PdfReader.unethicalreading = true;
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.close();
    reader.close();
}

根据你从填表教程中学到的东西,你会得到这样的东西(前提是你使用 iTextSharp DLL 而不是 iText jar):

Dim pdfTemplate As String = "c:\Temp\PDF\encrypted.pdf"
Dim newFile As String = "c:\Temp\PDF\decrypted.pdf"
PdfReader.unethicalreading = true
Dim pdfReader As New PdfReader(pdfTemplate)
Dim pdfStamper As New PdfStamper(pdfReader, New FileStream(
    newFile, FileMode.Create))
pdfStamper.Close()
pdfReader.Close()

重要提示:如果文件仅受所有者密码保护(这是我在谈论受保护视图时所假设的),这只会删除密码)。如果该文件以任何其他方式受到保护,则您必须加以说明。另请注意,参数 unethicalreading 并非没有意义:通过取消保护确保您没有做不道德的事情。

我不得不使用 iText 操作受保护的 PDF 文件。 我只是在我的 pom.xml 中添加了以下依赖项,仅此而已。

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.59</version>
</dependency>