3

我的要求是创建一个动态报告 pdf 文件,其中包含我正在使用 iText 执行的数据库中的一些数据。现在,我想在网页中显示这个 pdf 文件以及菜单、页眉、页脚等。

所以,如果用户有一些 pdf 查看器,那么这个 pdf 应该显示在用户机器上,并带有打印选项来打印该 pdf。

4

3 回答 3

8

我就是这样做的。您可以在 iframe 或常规 jsp 中调用此操作

public class GeneratePdf extends ActionSupport{
    private InputStream inputStream;
    public String execute(){
        HttpServletResponse response = ServletActionContext.getResponse();
        Document document = new Document();
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        try {
            PdfWriter.getInstance(document, buffer);
            document.open();
                        // do your thing
            document.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        byte[] bytes = null;
        bytes = buffer.toByteArray();
        response.setContentLength(bytes.length);

        if(bytes!=null){
            inputStream = new ByteArrayInputStream ( bytes );
        }
 return SUCCESS;
}

public InputStream getInputStream() {
        return inputStream;
    }
}

在你的 struts.xml

   <action name="GeneratePdf" class="com.xxx.action.GeneratePdf">
    <result name="success" type="stream">
            <param name="contentType">application/pdf</param>
            <param name="inputName">inputStream</param>
            <param name="contentDisposition">filename="test.pdf"</param>
            <param name="bufferSize">1024</param>
    </result>
   </action>   
于 2012-06-21T12:56:09.633 回答
0

我正在使用inputStreamAnu 建议的操作来执行此操作。并使用PDF.JS库。

在线演示

GitHub

于 2013-01-14T20:02:18.817 回答
0
public ByteArrayInputStream generatePDF(List<Object> items) {

    try {

        List<InputStream> listInputStream = new ArrayList<InputStream>();
        for (int i = 0; i < items.size(); i++) {
            listInputStream.add(new ByteArrayInputStream(getBytes(items.get(i)));
        }

        HttpServletResponse response = ServletActionContext.getResponse();
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        Document document = new Document();

        PdfWriter writer = PdfWriter.getInstance(document, buffer);
        document.open();
        PdfContentByte cb = writer.getDirectContent();

        for (InputStream inputStream : listInputStream) {

            PdfReader reader = new PdfReader(inputStream);

            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                document.setPageSize(reader.getPageSize(i));
                document.newPage();
                PdfImportedPage page = writer.getImportedPage(reader, i);
                cb.addTemplate(page, 0, 0);
            }
        }

        document.close();

        byte[] bytes = null;
        bytes = buffer.toByteArray();
        response.setContentLength(bytes.length);

        return new ByteArrayInputStream(bytes);

    } catch(Exception e){
        System.out.println(e);
    }

}
于 2017-10-31T11:37:42.873 回答