【问题标题】:ITextRenderer: Adjust page height to contentITextRenderer:将页面高度调整为内容
【发布时间】:2013-03-07 20:23:07
【问题描述】:

我正在使用 ITextRenderer 从 HTML 生成 PDF,我需要做的是收银机收据。 此收据具有动态宽度,当然还有动态内容。这就是说,内容的高度总是不同的,现在我正在努力寻找一种方法来调整 PDF 页面的高度以适应内容。 如果它太大,收据最后有一个长的白色部分,如果它是短的 PDF 得到分页,我需要它只在一页中。

我使用@page {size: Wpx Hpx;}设置页面大小,但是根据宽度和数据计算内容高度几乎是不可能的(会很痛苦)。

这是生成 PDF 的代码:

ITextRenderer renderer = new ITextRenderer();

byte[] bytes = htmlDocumentString.toString().getBytes("UTF-8");
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource(bais);
Document doc = builder.parse(is);

renderer.setDocument(doc, null);

renderer.layout();
renderer.createPDF(outputStream);
outputStream.flush();
outputStream.close();

我也尝试过renderer.getSharedContext().setPrint(false);,但这会引发 NPE。

还有@page {-fs-page-sequence: "none";},没有任何运气。

【问题讨论】:

  • 我也面临同样的问题。你找到解决方案了吗?
  • 是的,它在“解决方案”下。
  • 请将解决方案作为答案发布(而不是在问题本身中),您可以回答自己的问题。谢谢

标签: java css pdf flying-saucer pdfrenderer


【解决方案1】:

我找到的解决方案甚至还不够完美,但确实有效!

@page {
    size: Wpx 1px;
}
* { 
    page-break-inside: always; 
}

这将为整个内容生成 1px 的页面。然后我只需要告诉打印机打印所有页面之间的页边距为 0px 的页面。

为什么这个解决方案不完美?文件大小从 1 或 2KB 变为 200KB。通过 3G 流式传输时不是很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多