2013-03-20 52 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")