-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(); 

2 つのラッパー クラスを作成しましたが、次の手順について少し混乱しています。

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

あなたがしようとしているのは、本質的に「ファサード」を作成することです。Facade (またはラッパー) は本質的に、難しくて扱いにくいコードを使用しやすくするコードです。

あなたの状況では、コンストラクターが必要な情報 ( 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();
   }
}

保存したい場合は、 and を呼び出すだけPDFdoc.SavePDFDoc.close、すべての作業が行われます。要点は、Facadeは、はるかに使いやすい interface を使用して別のクラスにカプセル化 (「ラップ」) することにより、クラスの動作に関する難しい詳細をすべて隠しているということです。

于 2013-02-05T15:32:38.780 に答える