Vbscript问题:在包装类的帮助下执行Vbscript

本文关键字:Vbscript 帮助 执行 包装类 问题 | 更新日期: 2023-09-27 18:05:08

我已经创建了一个包装器类,用于使用PDFBox访问PDF FORMS,我正在尝试使用VBScript执行该包装器。。

这是我的包装类(类库(启用了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 所需的对象

无法解决此问题有人能帮我吗

感谢

Vbscript问题:在包装类的帮助下执行Vbscript

正如Ansgar Wiechers和Aphoria已经提到的,您的LoadPDFDocument类的一种方法,为了简化自己,您可以在.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);
        }
        // ...
    }
}

我认为您需要将PDFDocument.load...更改为TestPDF.load...

Set TestPDF = CreateObject("PDF.API.PDFDocument")
Set test  = TestPDF.load("D:''PDF_FORMS''sample_form.pdf")
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(,因此如果处理方式不同,可能会让用户感到困惑。