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

huangapple go评论83阅读模式
英文:

iText 7 converting HTML to PDF - How to see entire wide table?

问题

InputStream is = this.getClass().getResourceAsStream("/very-wide-table_01.html");
ByteArrayOutputStream os = new ByteArrayOutputStream();
HtmlConverter.convertToPdf(is, os);

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

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

我如何告诉iText要么缩放内容以适应PDF页面,要么缩放页面以适应内容?

我确信可以使用PDF完成这个操作。Aspose.PDF库默认情况下会这样做。但我需要一种使用iText来实现的方法。

(编辑)它适用于PDF页面宽度过宽的任何表格...

<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/XHTML">
<head><title>非常宽的表格</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">非常宽的表格</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>
英文:
InputStream is = this.getClass().getResourceAsStream(&quot;/very-wide-table_01.html&quot;);
ByteArrayOutputStream os = new ByteArrayOutputStream();
HtmlConverter.convertToPdf(is, os);

When input HTML has a wide table, this message is seen (and the table is truncated, data is lost):

> WARN TableWidths Table width is more than expected due to min width of cell(s).

How can I tell iText to either scale the content to fit the PDF page, OR scale the page to fit the content?

I'm sure this can be done with PDF. The Aspose.PDF library does it by default. But I need a way to do it with iText.

(edit) It's any table too wide for the PDF page...

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

答案1

得分: 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);
英文:

This answers the basic question of how to change page size to account for very large tables. This answer does not provide any means of determining the required width, but at least this code does change the default page size.

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(&quot;/very-wide-table_01.html&quot;), doc, props);

huangapple
  • 本文由 发表于 2020年8月4日 11:32:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/63239853.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定