java - ItextPdf 宽度不会针对横向页面扩展

标签 java itext width landscape

我正在尝试将表格放在已在“PdfPageEventHelper”中横向旋转的 PDF 页面上:

public void onStartPage(PdfWriter writer_,Document document_) {
        writer_.addPageDictEntry(PdfName.ROTATE,PdfPage.LANDSCAPE);
    }

该部分似乎有效,但当我创建包含 10 列的表格时,设置宽度似乎不起作用:

float sizeY=page.getWidth();
PdfPTable table=new PdfPTable(10);
table.setTotalWidth(sizeY);
float[] widths=new float[] {1.f,1.5f,4.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f};
table.setWidths(widths);

表格宽度似乎始终是默认宽度(纵向页面宽度的 80%)。如何让表格使用横向页面宽度? TIA。

最佳答案

您使用的是旧版 iText 5。iText 5 中的许多怪癖在 iText 7 中得到了解决。

在 iText 7 中,我们有 UnitValue 的概念,它可以帮助 iText 确定某个值是绝对值(以用户单位/点为单位)还是相对值(百分比)。

在 iText 5 中,这个概念是未知的。 PdfPTable 类有两个表宽度参数:

  • 宽度百分比:默认为 80%,
  • 绝对宽度

默认情况下,使用百分比形式的宽度。如果你想使用绝对宽度,你需要用setLockedWidth()方法“拉动开关”:

table.setTotalWidth(sizeY);
table.setLockedWidth(true);

我知道这很奇怪,但话又说回来,您使用的是 iText 版本。如果您想要更一致的 API,请使用 iText 7。这次升级非常重要。我们花费了大量的时间和金钱来改进 iText,因此看到新的 iText 开发人员选择使用 iText 5 而不是 iText 7 有点令人沮丧。

关于java - ItextPdf 宽度不会针对横向页面扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47515893/

相关文章:

java - 如何在一个 JScrollPane 中显示多个可选择的图像?

c# - 如何使用 itextsharp 将 html 页面转换为带有 css 的 pdf?

html - img alt 文本很长时不显示

c++ - 从 stringstream 中读取特定字段宽度的 int

java - 媒体播放器超时异常

java - Apache poi迁移到jdk 11问题

java - 即使有 return 语句,递归也永远不会结束

c# - MemoryStream - 合并 PDF 时无法访问关闭的流

java com.itextpdf.text.exceptions.InvalidPdfException : The document has no page root

javascript - 本地主机上的网站分辨率不准确