Проблема с Vbscript: выполняется vbscript с помощью класса-оболочки

Я создал класс-оболочку для доступа к PDF FORMS с помощью PDFBox, используя оболочку, которую я пытаюсь выполнить с помощью 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

не смог решить эту проблему, может кто-нибудь помочь мне, пожалуйста

Спасибо


person Ganeshja    schedule 20.03.2013    source источник


Ответы (3)


Как уже упоминали Ансгар Вихерс и 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);
        }
        // ...
    }
}
person Panayot Karabakalov    schedule 20.03.2013

Я думаю, вам нужно изменить PDFDocument.load... на TestPDF.load....

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

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), поэтому это может запутать ваших пользователей, если вы сделаете это по-другому.

person Ansgar Wiechers    schedule 20.03.2013
comment
Установить TestPDF = CreateObject(PDF.API.PDFDocument) Установить test = PDFDocument.load(D:\\PDF_FORMS\\sample_form.pdf), даже если я попытаюсь использовать имя класса-оболочки PDFDocument, где оно содержит метод загрузки, выдает мне тот же требуемый объект для PDFДокумент - person Ganeshja; 20.03.2013
comment
Даже если вы переименуете переменную объекта PDDocument в PDFDocument, вы все равно нигде не инициализируете эту переменную. Смотрите обновленный ответ. - person Ansgar Wiechers; 20.03.2013