我需要为包含以下代码的类创建一个包装器。
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
。
谢谢
答案 0 :(得分:0)
你要做的就是创建一个'Facade'。 Facade(或包装器)本质上是一些代码,它采用困难,挑剔的代码并使其更易于使用。
在你的情况下,创建一个构造函数获取所需信息的类(例如路径)更有意义,然后创建在类本身内部完成所有困难的工作。例如:
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.Save
和PDFDoc.close
,它将为您完成所有工作。关键是Facade 隐藏了关于类如何工作的所有困难细节,方法是将它封装(“包装”)在另一个具有更易于使用的界面的类中。