-1

我需要为包含以下代码的类创建一个包装器。

PDDocument pdfDoc = PDDocument.load("C:\\Users\\Pictures\\Fillable.pdf");
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField("last");
field.setValue("c#");
pdfDoc.save("C:\\Users\\Pictures\\Fillable.pdf");
pdfDoc.close(); 

我已经创建了两个包装类,但我对接下来的步骤有点困惑。

public class c_PDFdocu
{
    private PDDocument PD;

    public c_PDFdocu(string PDFPath)
    {
        PD = PDDocument.load(PDFPath);

    }
    public c_documentcatalog getDocumentCatalog()
    {

        return new c_documentcatalog(PD);
    }
}

public class c_documentcatalog
{
    private PDDocumentCatalog PDFDocCat;
    public c_documentcatalog(PDDocument PDFDoc)
    {
        PDFDocCat = PDFDoc.getDocumentCatalog();
    }

    public c_PDAcroForm getAcroForm()
    {
        return new c_PDAcroForm(PDFDocCat);
    }
}  


public class c_PDAcroForm
{
    private PDAcroForm acroForm;
    public c_PDAcroForm(PDDocumentCatalog docCatalog)
    {
        acroForm = docCatalog.getAcroForm();
    }
}

如何为剩余的语句创建一个包装类?

我需要将值传递到getField. 它的用户视角类似于 setvalue。它属于相同的变量名field

谢谢

4

1 回答 1

0

您要做的基本上是创建一个“立面”。外观(或包装器)本质上是一些代码,它们采用困难、挑剔的代码并使其更易于使用。

在您的情况下,创建一个类更有意义,其中构造函数获取您需要的信息(例如path),然后创建在类本身内部完成所有困难的工作。例如:

class PDFdoc
{
   String path;
   PDDocument pdfDoc;
   PDDocumentCatalog docCatalog; 
   PDAcroForm acroForm; 
   PDField field;

   public PDFdoc(String path)
   {
      this.path = path;
      this.pdfDoc = PDDocument.load(path);
      this.docCatalog = pdfDoc.getDocumentCatalog();
      this.acroForm = docCatalog.getAcroForm();
      this.field = acroForm.getField("last");

      this.field.setValue("c#");
   }

   public Save()
   {
      this.pdfDoc.save(path);
   }

   public Close()
   {
      this.pdfDoc.close();
   }
}

现在,当您想保存时,只需调用它PDFdoc.SavePDFDoc.close它就会为您处理所有工作。关键在于,Facade通过将一个类封装(“包装”)在另一个具有更易于使用的接口的类中,隐藏了有关一个类如何工作的所有困难细节

于 2013-02-05T15:32:38.780 回答