当前位置: 首页 > 知识库问答 >
问题:

ITextRenader:根据内容调整页面高度

宓毅庵
2023-03-14

我正在使用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();

我还尝试了< code>renderer.getSharedContext()。set print(false);,但这会引发NPE。

同样@page{-fs page sequence:“none”;}没有任何运气。

共有1个答案

戎亦
2023-03-14

我发现的解决方案甚至不接近完美,但有效!

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

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

为什么这个解决方案不完美?文件大小从1或2KB到200KB不等。当通过3G进行流媒体传输时,不是很好。

 类似资料:
  • 我正在为我的项目使用 iTextPDF 免费标记。基本上,我使用免费标记加载并填充一个HTML模板,然后使用iTextPDF的将其呈现为PDF。 模板是: 这是我的代码: 这段代码运行良好,但是固定高度是一个问题。 即假设: 生成的文档是: 相反,如果我用 生成的文档是: 如你所见,在最后一份文件中,我有两页。我希望只有一个页面,它根据内容的高度改变其高度。 iText有可能实现这样的事情吗?

  • 问题内容: 我正在开发类似iGoogle的应用程序。使用iframe显示其他应用程序(在其他域上)的内容。 如何调整iframe的大小以适合iframe内容的高度? 我试图破译Google使用的javascript,但它被混淆了,到目前为止,在网络上搜索毫无结果。 更新: 请注意,内容是从其他域加载的,因此适用同源策略。 问题答案: 我们遇到了这类问题,但与您的情况略有不同我们向其他域上的网站提供

  • 问题内容: 在以Swift编写的iOS应用程序中使用自动布局时,如何根据内容调整textField的大小? 加载视图时以及用户键入时,文本字段将根据需要调整大小以适合其内容。 理想情况下,文本字段将在某个点(例如6行)处停止调整大小,并变为可滚动。 问题答案: 您必须使用而不是。 然后,您可以使用该方法。 但是首先,您必须知道一条线的高度。您可以使用以下方法获取该信息: 之后,只需在方法内部调用方

  • 我在我的项目中使用具有自动布局的情节提要(XCode 6.3),起诉大小类Wcompact h规则。我无法根据内容动态设置 UITableView 标头的高度。

  • 问题内容: 例如: 我希望它能够根据其中的内容调整高度,而无需使用滚动。 问题答案: 将此添加到您的部分: 并将您的iframe更改为此:

  • 我想调整SVG元素的尺寸以适应其内容。 JSfiddle:http://jsfiddle.net/4pD9N/ 这里我有一个例子。SVG应该“收缩”以适应每边10像素的元素边距。换句话说:我想为未使用的空间裁剪svg... 我知道我必须使用getBBox。但是我如何计算总宽度和总高度呢?