java - iText 从 PDF 中删除 protected View

标签 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

所需的功能是将未 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/

相关文章:

java - 在 Android 中写入和读取二进制文件

vba - 发票的 Excel 宏

vba - 每次我使用即时窗口时 MS Access 都会崩溃

java - 如何以字符串 Base64 格式存储 PDF 内容

java - iText 直接打印

java - 无法使用 spring 5 Autowiring hibernate 5 sessionfactory

java - MyBatis 日志中 pretty-print 查询

java - 如何防止在 java 中的 JTextField 上使用 CTRL+C?

vb.net - 如何在 Visual Basic 应用程序中打开 "Windows Search"?

c# - iText 7 - HTML 到 PDF 写入 MemoryStream 而不是文件