在JSP中Struts2中显示PDF文件(Struts2 Display pdf file in j

2019-06-25 16:04发布

我的要求是创建与数据库的一些数据,我利用iText做一个动态的报告PDF文件。 现在,我要显示在网页中非常久远菜单,页眉,页脚,等这个pdf文件内嵌

所以,如果用户有一定的PDF阅读器,然后阅读本应显示在用户机器打印选项来打印PDF文件。

Answer 1:

这是我正在做这件事。 你可以调用一个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>   


Answer 2:

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

}


Answer 3:

我使用的是一个动作做inputStream为阿努建议。 并使用PDF.JS库。

在线演示

GitHub上



文章来源: Struts2 Display pdf file in jsp