0

VBScript で実行しようとしているラッパーを使用して、 PDFBox を使用して PDF FORMS にアクセスするためのラッパー クラスを作成しました。

これは、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 に答える