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>
我正在努力从一系列 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>