2013-03-20 53 views
0

我創建了一個包裝類使用我米試圖用VBScript來執行它的包裝..VBSCRIPT問題:執行的VBScript與

這裏訪問使用PDFBox的,PDF表單,包裝類的幫助是我的包裝類(類庫)與COM啓用

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using org.apache.pdfbox.pdmodel; 
using org.apache.pdfbox.util; 
using org.apache.pdfbox.pdmodel.interactive.form; 

namespace PDF.API 
{ 
    public class PDFDocument 
    { 
     private PDDocument PD; 

     public void load(string PDFPath) 
     { 
      PD = PDDocument.load(PDFPath); 
     } 

     public PDDocumentCatalog getDocumentCatalog() 
     { 
      return PD.getDocumentCatalog(); 
     } 

     public void save(string PDF_Path) 
     { 
      PD.save(PDF_Path); 
     } 

     public void close() 
     { 
      PD.close(); 
     } 
    } 

,這裏是我的VBScript

Set TestPDF = CreateObject("PDF.API.PDFDocument") 
Set test = PDFDocument.load("D:\\PDF_FORMS\\sample_form.pdf") 
Set PDDocumentCatalog = test.getDocumentCatalog() 
Set PDAcroForm = PDDocumentCatalog.getAcroForm() 

Set PDFField = PDAcroForm.getField("Forenames") 
PDField.setValue("VBSCRIPT") 
test.save("D:\\PDF_FORMS\\a.pdf") 
test.close() 

現在它拋出我對象需要PDDocument

能不能夠解決這個問題 任何一個可以幫助我,請

感謝

回答

4

由於安斯加爾Wiechers和Aphoria已經提到,你的Load是你PDFDocument類的方法,並簡化自己,你可以在你的.vbs使用相同的名稱作爲變量名,即:

Set PDFDocument = CreateObject("PDF.API.PDFDocument") 

下一個問題,我看到的,是你Load方法是void(沒有返回值),所以語法應該都是這樣:

PDFDocument.load "D:\path\to\file_a.pdf" 
Set PDDocumentCatalog = PDFDocument.getDocumentCatalog() 
' ... ' 
PDFDocument.save "D:\path\to\file_b.pdf" 
PDFDocument.close 

我最近沒有碰過C#,但據我記得你需要一個構造函數。

namespace PDF.API 
{ 
    public class PDFDocument 
    { 
     private PDDocument PD; 

     public PDFDocument() 
     { //class constructor 
     } 

     public void load(string PDFPath) 
     { 
      PD = PDDocument.load(PDFPath); 
     } 
     // ... 
    } 
} 
1
Set TestPDF = CreateObject("PDF.API.PDFDocument") 
Set test = PDDocument.load("D:\\PDF_FORMS\\sample_form.pdf") 

您使用PDDocument不首先實例化它。你可能打算這樣做:

Set test = TestPDF.load("D:\\PDF_FORMS\\sample_form.pdf") 

作爲一個方面說明:我建議你逃避你的類中的反斜槓。在VBScript中,通常不需要在路徑中轉義反斜槓(WMI儘管),所以如果處理方式不同,它可能會混淆用戶。

+0

設置TestPDF =的CreateObject( 「PDF.API.PDFDocument」) 設置測試= PDFDocument.load( 「d:\\ \\ PDF_FORMS sample_form.pdf」) 即使我嘗試PDFDocument wrapperclass名它包含load方法,會引發PDFDocument所需的同一對象 – Ganeshja 2013-03-20 14:20:41

+0

即使您將**對象變量** PDDocument重命名爲PDFDocument,您仍然不會在任何地方初始化該變量。查看更新的答案。 – 2013-03-20 15:18:47

2

我認爲你需要將PDFDocument.load...更改爲TestPDF.load...

Set TestPDF = CreateObject("PDF.API.PDFDocument") 
Set test = TestPDF.load("D:\\PDF_FORMS\\sample_form.pdf")