我正在努力从一系列 PDF 中删除 protected View ,并尝试在 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
所需的功能是将未 protected 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()
重要:如果文件仅受所有者密码保护(这就是我在谈论 protected View 时所假设的),这只会删除密码。如果该文件以任何其他方式受到保护,则您必须加以说明。另请注意,参数 unethicalreading 并非没有意义:通过取消保护确保您没有做不道德的事情。
关于java - iText 从 PDF 中删除 protected View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30195707/