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

时间:2015-05-12 15:46:13

标签: java vba itext

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

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

2 个答案:

答案 0 :(得分:3)

您尝试运行的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 并非没有意义:请确保您不会因删除保护而做出不道德行为。

答案 1 :(得分:0)

我不得不使用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>