首页 > 解决方案 > ITextRenderer 无法识别 xhtml 中定义的页面大小

问题描述

我正在使用一个xhtml文件来创建一个 html 页面,然后以 pdf 格式呈现。html 头中的文件包含:

<style>
    page {
        background: white;
        display: block;
        margin: 0 auto;
        margin-bottom: 0.5cm;
        padding: 0.5cm 2cm;
    }

    page[size="A4"] {
        width: 21cm;
        height: 29.7cm;
    }
</style>

在我的java文件中,我有:

String XHTMLstyle = new String(Files
                        .readAllBytes(Paths.get(getServletContext().getRealPath("/WEB-INF/xhtmlStyle.xhtml"))));
StringBuffer XHTML = new StringBuffer(XHTMLstyle);
                XHTML.append("<body>");
                XHTML.append("<page size=\"A4\">\r\n" + 
                        "        <div class=\"col-1\">\r\n" + 
                        "            <img src=\"logo.png\" style=\"width: 100%;\" />\r\n" + 
                        "        </div>\r\n" + 
                        "    </page>");

                XHTML.append("</body>");
                XHTML.append("</html>");

生成的 xhtml 格式良好。然后我使用以下方法创建 pdf 文件:

ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(XHTML.toString());
renderer.layout();
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
    renderer.createPDF(baos);

    } catch (DocumentException e) {
        setErrorMessage(response, 500, "Internal Server Error",
                            "Could not create the PDF base54 version of the eP.");
        return;
    }
    // convert PDF to base64
    String base64PDF = Base64.encodeBytes(baos.toByteArray());
    // remove new line escape character
    base64PDF = base64PDF.replaceAll("\\n", "");

编码的base64PDF没有页面大小A4所有的html头结构都没有呈现。

有任何想法吗?

标签: javahtmlcsspdf

解决方案


推荐阅读