Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java在单独的类中生成PDF,但从控制器返回_Java_Itext_Spring Roo - Fatal编程技术网

java在单独的类中生成PDF,但从控制器返回

java在单独的类中生成PDF,但从控制器返回,java,itext,spring-roo,Java,Itext,Spring Roo,我正在尝试将PDF生成器添加到我的网站。就控制器中的发电机而言,一切正常 ConsumerController.java: public String downloadPDF(@PathVariable("id") Long id, @PathVariable("transaction") Long transaction, Model uiModel, HttpServletRequest httpServletRequest, HttpServletResponse response) {

我正在尝试将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();
    }
}
public void generatorPDF()引发异常{
文件d=新文件();
试一试{
PdfWriter writer=PdfWriter.getInstance(d,新文件输出流(“CodeOfDoom.pdf”);
d、 open();

对于(inti=0;i,在第一个实例中,您创建PDF并将其直接写入响应流。在第二个类中,您将其写入文件


如果要在其他类中创建PDF,一种解决方案是将输出流传递到类的构造函数中。如果不想传递对输出流的引用,可以通过写入ByteArrayOutputStream在内存中创建PDF,然后返回生成的字节数组。通过这种方法,您可以然后将生成的PDF字节写回响应流。这种方法假设您的PDF足够小,可以放入内存。

没错,第一个实例就是我想要的,是否可以将文档传递回控制器中的编写器,而无需将其放入ByteArrayoutPutStream我想我只需要使用将流传递给类的方法,谢谢:)也找到了这个,以供将来参考:)