首先,我使用itext和java创建了一个pdf,然后放了一个表和tableCell
PdfPTable table = new PdfPTable(2);
table.setWidths(new int[]{1, 2});
PdfPCell cell;
table.addCell("Address:");
cell = new PdfPCell(new Phrase(""));
cell.setFixedHeight(60);
table.addCell(cell);
我有另一个阅读此pdf文件的程序
PdfReader reader = new PdfReader("path_of_previously_created_pdf");
现在我想获取TableCell单元格,并希望更改单元格高度cell.setFixedHeight(new_Fixed_Height);
有可能......如果是的话。 怎么样?? Thanx提前
答案 0 :(得分:1)
如果你的PDF只包含那个简单的1x2表,那么它当然可以实现一些东西,它可以为你提供一个你选择的单元格高度的PDF。
但我认为它最终意味着包含更多。您通过谷歌驱动器提供的代码已经包含更多(更多表格单元格和表单元素),并且该代码在PDF构造方面看起来也未完成。 因此,... 的
这是不可能的。
首先,在创建PDF时,您拥有的table
和cell
对象在结果文件中不存在,它们仅被绘制为多行和一些文本(或者其他任何内容)你把它放进了细胞里。)
因此,您甚至无法检索要更改的cells
,更不用说更改它了。
当然,您可以尝试解析页面内容流,以查找绘制线条的命令,找到为您感兴趣的cell
绘制的线条,并尝试派生原始线条。线坐标中的cell
维度属性。之后,您可以尝试将单元格下方的所有内容移动到所需的额外空间。
取决于你所拥有的信息(你知道细胞的大致位置吗?如果没有,你至少知道它的一些独特内容吗?)读取当前细胞高度将包括一些猜测和大量编码,因为不幸的是iText解析器框架尚不支持解析路径操作。
基本上,您必须增强PDF解析器包中的类,以便为PDF路径操作符处理和发出事件(如果您在iText中知道并且PDF规范不应超过一周或两周)并且创建一个合适的事件监听器,以找到您已经知道的单元格位置周围的线条(不超过一天的工作时间)。一些iText代码分析将显示固定单元格高度和周围线条的距离如何相关。
但最有可能的是,这是你工作中较小的一部分。更大的部分实际上是操纵页面内容:
如果幸运,您的所有网页内容都位于单个内容流中。在这种情况下,您只需要再次分析所有页面内容,但这次要实际更改它。最简单的方法是再次增强解析器包中的类(因为它们已经执行了大量必要的数学和簿记),以使用规范化坐标来通知内容流中的每个命令(这可能需要一周或两周) 。根据这些信息向您发出信号,构建了一个全新的内容流,您可以将所有内容放在单元格上方,向下移动下面的所有内容,然后拉伸所有跨越单元格底部边框的行(可能是另一周)。
如果你不太幸运,你必须与多个包含的形式xobjects越过战斗。由于这些xobjects也可以从其他流中使用,因此您无法更改它们,但必须更改副本或在新创建的流中包含xobject内容。
然后穿越线的图像怎么样?还是有趣的模式?在这种情况下,伸展细胞会彻底扭曲一切。
然后有注释,例如你的表单字段。你也需要移动和拉伸它们。
因此,尽管可以遵循这种方法,但请注意(取决于解决方案必须具有的通用性),其实施将使某些人在几个月内了解iText和PDF。
你在评论中说
我正在研究Pdf Form。我使用TextField(MULTILINE TEXT)创建了一次itext表单。阅读此pdf并填写表格后,但当内容增加时,它会显示滚动条和内容隐藏。我的问题是,一旦我打印pdf,它就不会打印隐藏内容。
为什么不简单地为每组数据构建一个单独的PDF,其中所有单元格足以容纳相应数据集的表单内容,并将字段值复制到此新PDF中。这是一种相当简单的方法,但又足够灵活,不会浪费太多空间,但同时又不能隐藏内容。