iText 7 将 HTML 转换为 PDF - 如何查看整个宽表?

Posted

技术标签:

【中文标题】iText 7 将 HTML 转换为 PDF - 如何查看整个宽表?【英文标题】:iText 7 converting HTML to PDF - How to see entire wide table? 【发布时间】:2020-11-24 03:14:18 【问题描述】:
InputStream is = this.getClass().getResourceAsStream("/very-wide-table_01.html");
ByteArrayOutputStream os = new ByteArrayOutputStream();
HtmlConverter.convertToPdf(is, os);

当输入 HTML 有一个宽表格时,会看到此消息(表格被截断,数据丢失):

WARN TableWidths 由于单元格的最小宽度,表格宽度超出预期。

如何告诉 iText 缩放内容以适合 PDF 页面,或缩放页面以适合内容?

我确信这可以通过 PDF 完成。 Aspose.PDF 库默认执行此操作。但我需要一种方法来使用 iText。

(编辑)对于 PDF 页面来说,任何表格都太宽了...

<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/XHTML">
<head><title>very wide table</title><meta charset="UTF-8"/>
  <style>
    table border-collapse: collapse;
    table, td, th border: 1px solid red;
    th text-align: center; text-weight: bold;
  </style></head>
<body>
<table>
  <tr><td colspan="30">Very wide table</td></tr>
  <tr>
    <td>1234567890</td><td>1234567890</td><td>1234567890</td><td>1234567890</td>
    <td>1234567890</td><td>1234567890</td><td>1234567890</td><td>1234567890</td>
    <td>1234567890</td><td>1234567890</td><td>1234567890</td><td>1234567890</td>
    <td>1234567890</td><td>1234567890</td><td>1234567890</td><td>1234567890</td>
    <td>1234567890</td><td>1234567890</td><td>1234567890</td><td>1234567890</td>
    <td>1234567890</td><td>1234567890</td><td>1234567890</td><td>1234567890</td>
    <td>1234567890</td><td>1234567890</td><td>1234567890</td><td>1234567890</td>
    <td>1234567890</td><td>1234567890</td>
  </tr>
</table>
</body>
</html>

【问题讨论】:

您可以发布您要转换的表格 (HTML) 吗? 您的预期行为是什么?较小的字体?更多行?更宽的 PDF 文档? 期望的结果可能是缩放内容以适合页面,或缩放页面以适合内容。这是否意味着改变每英寸的整体点数,或“更宽的文档”,无论如何。仅仅改变字体大小不会改变表格内部和周围的间距,除非你也打算包括所有这些。将列移动到行将更改表格。不要换表。我需要保留原始行和列。 改变文档的大小吧! convertPdf 也可以将PdfDocument 作为参数,您可以在其中定义输出 PDF 文档的大小 @AndréLemos 我还不能完成这项工作。我也尝试了其他几件事。有人提到通过其中一个属性改变 DPI,但我得到了同样的结果。 【参考方案1】:

这回答了如何更改页面大小以适应非常大的表的基本问题。这个答案确实提供任何确定所需宽度的方法,但至少这个代码确实改变了默认页面大小。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument doc = new PdfDocument(new PdfWriter(baos));
doc.setDefaultPageSize(new PageSize(2000, 200));
ConverterProperties props = new ConverterProperties();
HtmlConverter.convertToPdf(this.getClass().getResourceAsStream("/very-wide-table_01.html"), doc, props);

【讨论】:

以上是关于iText 7 将 HTML 转换为 PDF - 如何查看整个宽表?的主要内容,如果未能解决你的问题,请参考以下文章

iText7 将 HTML 转换为 PDF“System.NullReferenceException”。

如何使用 iText 将 HTML 转换为 PDF [重复]

如何使用 iText 将带有图像和超链接的 HTML 转换为 PDF?

将 itext pdf 保存为没有物理存在的 blob。

仿百度文库方案[openoffice.org 3+swftools+flexpaper] 使用iText将jpgjpegpng转换为pdf

仿百度文库方案[openoffice.org 3+swftools+flexpaper] 使用iText将jpgjpegpng转换为pdf