无法正确计算 itext PdfPTable/PdfPCell 高度

2023-12-27

我在尝试生成 PdfPTable 并在将其添加到文档之前计算其高度时遇到问题。方法calculateHeightsPdfPTable 返回的高度比页面的高度大很多(而表格大约是页面高度的 1/4),所以我编写了一个计算高度的方法:

protected Float getVerticalSize() throws DocumentException, ParseException, IOException {
    float overallHeight=0.0f;
    for(PdfPRow curRow : this.getPdfObject().getRows()) {
        float maxHeight = 0.0f;
        for(PdfPCell curCell : curRow.getCells()) {
            if(curCell.getHeight()>maxHeight) maxHeight=curCell.getHeight();
        }
        overallHeight+=maxHeight;
    }
    return overallHeight;
}

where getPdfObject方法返回一个 PdfPTable 对象。
使用调试器,我发现单元格矩形的 lly 和 ury 坐标差(以及高度)比将表格添加到文档后看起来要大得多(例如,一个单元格的高度为 20,另一个单元格的高度为 38,而它们在页面上看起来是一样的)。除了其中包含一个块的段落之外,单元格中没有任何内容:

Font f = getFont();
        if (f != null) {
            int[] color = getTextColor();
            if(color != null) f.setColor(color[0],color[1],color[2]);
            ch = new Chunk(celltext, f);
            par = new Paragraph(ch);
        }
cell = new PdfPCell(par);
cell.setHorizontalAlignment(getHorizontalTextAlignment());
cell.setVerticalAlignment(getVerticalTextAlignment());

然后在表格中添加一个单元格并setWidthPercentage属性设置为某个浮点数。 我究竟做错了什么?为什么生成PDF后单元格的比例与我看到的不一样?也许我计算的高度错误? PDF页面上单元格的高度不是应该严格是 lly 和 ury 坐标之间的差吗
抱歉,我没有显示确切的代码,因为 PDF 是使用大量中间步骤和对象由 XML 生成的,我想“按原样”它并不是很有用......
提前致谢!


添加到可用宽度为 400 的页面的表格高度与添加到可用宽度为 1000 的页面的表格的高度不同。无法正确测量高度直到宽度被定义。

可以通过将表格添加到文档来定义宽度。一旦表格被渲染出来,总高度就已知了。

如果想提前知道高度,就需要提前定义宽度。例如通过使用:

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

这在TableHeight http://itextpdf.com/examples/iia.php?id=80例子。在表格高度.pdf http://examples.itextpdf.com/results/part1/chapter04/table_height.pdf,您会看到 iText 返回高度 0before添加一张桌子,高度为 48after添加表。 iText 最初返回 0,因为无法确定实际高度。

然后,我们采用同一张表,定义总宽度为 50(这比页面上原始可用宽度的 80% 小得多)。现在,当我们计算具有相同内容的表格的高度时,iText 返回 192 而不是 48。当您查看页面上的表格时,高度差异的原因很明显。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法正确计算 itext PdfPTable/PdfPCell 高度 的相关文章

随机推荐

  • 无法从 WebFilter 发送 json 响应

    我正在尝试实现 WebFilter 以便检查 Spring WebFlux 应用程序中的 JWT 标头 我设法找到一种返回 Publisher 而不是 Mono empty 的方法 但响应不是 json 格式 这是我的 WebFilter
  • 如何在javascript中检查instanceof而不使用proto链?

    如何在javascript中检查instanceof而不使用proto链 var EventEmitter require events EventEmitter var Foo function Foo prototype EventEm
  • 如何在Java应用程序中打印PDF文件?

    如何从 Java 应用程序打印 PDF 文件 这里有一些源代码 可以让您打印任何文本文件 public void print The desktop api can help calling other applications in ou
  • 从移动应用程序(Flutter)前端调用端点时,req.file 和 req.files 未定义,但从邮递员那里工作正常

    我在用着multer在后端 const filefilter req file cb gt if file mimetype image jpeg file mimetype image jpg file mimetype image pn
  • Python - 从 URL 获取标头信息

    我一直在寻找 Python 3 x 代码示例来获取 HTTP 标头信息 像 PHP 中的 get headers 这样简单的东西在 Python 中很难找到 或者也许我不知道如何最好地理解它 本质上 我想编写一些代码来查看 URL 是否存在
  • R Markdown Knit 转 PDF 代码外边距

    我想将完整的代码块附加在文档的末尾 代码包括绘图 插入图形 计算等 它的长 这是我在各自章节中运行相关代码之后的结果 此时 我不希望代码生成任何结果 而只是显示代码 以便其他人可以检查我所做的事情 这是部分代码的示例 shapefile1
  • Android:自定义按钮 OnClickListener 未被调用

    我有一个自定义按钮 我在该按钮上捕获其 onTouchEvent public class CustomNumber extends ToggleButton boolean drawGlow false float glowX 0 flo
  • 如何找到元素列表中可能不唯一的最大数字?

    这是我的程序 item no max no 0 for i in range 5 input no int input Enter an item number item no append input no for no in item
  • 使用knockout和MVVM时在哪里编写dom操作代码

    我开始思考淘汰赛 以及在视图模型中编写操作 dom 或触发动画等的代码是否正确 作为示例 我有一个绑定 它传递对 div 的引用 当tr 被点击 tr 在我的视图模型中我有 self Select function panel e cons
  • 下划线.string 浏览器支持

    下划线 string https github com epeli underscore string似乎为 javascript 字符串操作提供了很好的功能 它似乎拥有所有优点 许可证 麻省理工学院 依赖项 无 它是 Underscore
  • JsonObjectAttribute.Id 是什么?

    JSON NETJsonObjectAttribute https www newtonsoft com json help html T Newtonsoft Json JsonObjectAttribute htm有财产Id https
  • Swift 项目中的 C++ dylib - dylib 中公开的函数的未定义符号

    C dylib公开如下 attribute visibility default int addNumber int number return 0 在我的 Swift 项目中 我将导入路径目录设置为包含 module map 文件的目录
  • 我应该什么时候“发布”我的构建?

    我们刚刚开始在我们的一个项目中使用 Visual Studio 发布管理 但我们的工作方式已经遇到了一些问题 目前 我们已经创建了一个发布阶段 它负责将我们的构建工件部署到专用虚拟机上进行测试 我们打算稍后使用这台机器来运行我们的集成测试
  • 错误图像格式异常

    我正在将 C Dll 调用到 C 中并遇到了问题 C 函数 int declspec dllexport CompressPacket unsigned char buff int offset int len C 函数 DllImport
  • 如何在 Windows 窗体中维护会话?

    我想在 Windows 应用程序上保持会话 如何维护用户会话 就像我们在 ASP NET 中使用的跟踪用户信息一样 如果您的意思是 如何序列化用户使用您的应用程序完成的程序设置 并且您想在程序重新启动后恢复它们 一种简单的方法是内置设置管理
  • 如何将 std::vector 转储到二进制文件中?

    我编写工具来转储和加载二进制文件中的常见对象 在第一个快速实现中 我编写了以下代码std vector
  • 如何抑制jqgrid最初加载数据?

    我在模态弹出窗口中有一个 jqgrid 其中的数据依赖于某些输入 我通过根据如下输入设置网格的 url 选项来执行此操作 然后显示弹出窗口 ContainerGrid Grid setGridParam url urlGetContaine
  • R Shiny:使用后退操作按钮转到上一个条件面板

    我正在尝试使用操作按钮返回上一个条件面板 到目前为止 我已经编写了以下代码来浏览一系列条件面板 但我无法返回到之前的情况 因为我无法更新输入值 它给了我以下错误 警告 代码如下 ui R shinyUI fluidPage conditio
  • PHP 函数 imagettftext() 和 unicode

    我正在使用 PHP 函数 imagettftext 将文本转换为 GIF 图像 我正在转换的文本包含 Unicode 字符 包括日语 在我的本地计算机 Ubuntu 7 10 上一切正常 但在我的网络主机服务器上 日语字符被破坏 是什么导致
  • 无法正确计算 itext PdfPTable/PdfPCell 高度

    我在尝试生成 PdfPTable 并在将其添加到文档之前计算其高度时遇到问题 方法calculateHeightsPdfPTable 返回的高度比页面的高度大很多 而表格大约是页面高度的 1 4 所以我编写了一个计算高度的方法 protec