我正在尝试将PDF生成器添加到我的网站。就控制器中的发生器而言,一切正常。
ConsumerController.java:
public String downloadPDF(@PathVariable("id") Long id, @PathVariable("transaction") Long transaction, Model uiModel, HttpServletRequest httpServletRequest, HttpServletResponse response) {
Document document = new Document();
try{
response.setContentType("application/pdf");
PdfWriter.getInstance(document, response.getOutputStream());
document.open();
document.add(new Paragraph("Hello Kiran"));
document.add(new Paragraph("Hello" + id));
document.add(new Paragraph("For"+ transaction));
document.add(new Paragraph(new Date().toString()));
}catch(Exception e){
e.printStackTrace();
}
document.close();
return null;
}
这就是我现在所拥有的,这正是我想要它的工作原理,但我想添加的那个在自己的类中会更好(下面的代码)。
PDFGenerator.java:
public void generatorPDF() throws Exception{
Document d = new Document();
try{
PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream("CodeOfDoom.pdf"));
d.open();
for(int i=0; i<10; i++){
PdfPTable table = generateLineItemTable(_order.getLineItems());
PdfPTable headerTable= generateHeaderTable(_order.getCustomer());
addBarcode(writer,headerTable);
//add customer barcode to the header
d.add(headerTable);
d.add(table);
Paragraph p = new Paragraph("\n\nFor more, please visit ");
Anchor anchor = new Anchor("www.codeofdoom.com/wordpress");
p.add(anchor);
d.add(p);
d.newPage();
}
d.close();
}catch(Exception e){
e.printStackTrace();
}
}
到目前为止,我尝试过的任何内容,PDF编写器似乎都是问题,因为我不确定如何从单独的类中将文档添加到编写器
答案 0 :(得分:1)
首先,您要创建PDF并将其直接写入响应流。在第二个类中,您将其写入文件。
如果要在不同的类中创建PDF,一种解决方案是将输出流传递给类的构造函数。如果您不想传递对输出流的引用,可以通过写入ByteArrayOutputStream然后返回生成的字节数组来在内存中创建PDF。使用该方法,您可以将生成的PDF字节写回响应流。不过,这种方法假设您的PDF足够小以适应内存。