0

我创建了一个包装类来使用 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

无法解决此问题,请任何人帮助我

谢谢

4

3 回答 3

4

正如 Ansgar 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);
        }
        // ...
    }
}
于 2013-03-20T21:26:41.007 回答
2

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

Set TestPDF = CreateObject("PDF.API.PDFDocument")
Set test  = TestPDF.load("D:\\PDF_FORMS\\sample_form.pdf")
于 2013-03-20T15:11:38.583 回答
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),因此如果您以不同的方式处理它可能会使您的用户感到困惑。

于 2013-03-20T14:14:26.887 回答