2015-05-12 28 views
1

我正在從一系列PDF中刪除受保護的視圖,並試圖在VBA中使用iText庫。我現在的主要問題是我不知道要使用什麼方法,並且iText文檔非常密集。iText從PDF刪除受保護的視圖

我也感覺我從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

希望的功能是在mypath的文件夾中有一個不受保護的PDF。

+0

請澄清以下兩點:(1)什麼是保護視圖?你是指加密的PDF文件嗎? (2.)如果你在VB工作,你爲什麼使用iText的Java版本?你確定你有一個JVM嗎?你不會使用iTextSharp,它是iText的.NET端口嗎? itextpdf-5.5.6.jar是**不是**一個可執行文件* jar,所以不清楚爲什麼你想從VBA執行它:沒有什麼可執行的... –

回答

3

您試圖運行的jar不是可執行的jar文件。 iText是在CLASSPATH中添加itextpdf-5.5.6.jar以用於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() 

IMPORTAN T:這隻會刪除密碼,如果該文件只有一個所有者密碼保護(這是我當你談論受保護的視圖假定)。如果該文件受到其他任何方式的保護,則必須澄清。另請注意,參數不道德讀數並非毫無意義:請確保您通過刪除保護來避免不道德行爲。

+0

謝謝布魯諾 - 我在研究過程中碰到了另一篇文章,並開始沿着你在這裏推薦的路徑前進:http://support.itextpdf.com/node/52(與.NET版本)。 「受保護的視圖」我的意思是大多數功能被禁用的沙箱視圖(類似於Office文檔上的受保護視圖)。我正在使用的PDF來自電子郵件,並默認在此受保護的視圖中打開。沒有涉及密碼。 – nwhaught

+0

我很確定有*是*涉及的密碼:這些文件可能受到所有者密碼的保護。 –

相關問題