我可以告诉iText如何剪裁文本以适合单元格吗
当我在PdfPCell上调用setFixedHeight()并添加超过给定高度的文本时,iText似乎会打印匹配字符串的前缀 我可以控制这个剪辑算法吗?例如:我可以告诉iText如何剪裁文本以适合单元格吗,itext,Itext,当我在PdfPCell上调用setFixedHeight()并添加超过给定高度的文本时,iText似乎会打印匹配字符串的前缀 我可以控制这个剪辑算法吗?例如: 打印字符串的后缀而不是前缀 将字符串的子字符串标记为不删除。这是脚注参考。如果我添加的文本是“Hello World[1]”,则[1]是对脚注的引用,不应删除。可以删除字符串的其他字符,如“World” 当字符串中有多个单词时,iText似乎会删除一个不合适的单词,而我希望它部分打印出来。也就是说,如果字符串是“Hello World”,
这是关于iText 2.1.6的。我写了一个概念证明,其中我们尝试将文本
放入“D2是一个单元格,其内容超出了我们可以放入单元格的范围。”
放入一个太小的单元格中
就像在您的另一个问题()中一样,我们使用单元格事件添加内容,但现在我们添加了两次:一次在模拟模式下(以了解垂直方向需要多少空间),一次在真实模式下(使用偏移量)
这将在模拟模式下添加内容(我们使用单元格的宽度和任意高度):
现在我们知道了所需的高度,可以使用偏移量添加真实内容:
float offset = (position.getHeight() - spaceneeded) / 2;
System.out.println(String.format("The difference is %s pt; we'll need an offset of %s pt.", -2f * offset, offset));
PdfTemplate tmp = canvas.createTemplate(position.getWidth(), position.getHeight());
ct = new ColumnText(tmp);
ct.setSimpleColumn(0, offset, position.getWidth(), offset + spaceneeded);
ct.addElement(content);
ct.go();
canvas.addTemplate(tmp, position.getLeft(), position.getBottom());
在本例中,我使用了PdfTemplate
来剪辑内容
我也有你其他问题的答案,但我现在没有时间回答。对于直接文本框剪辑,我修改了这里给出的C代码 请参阅下面的Java代码。剪切区域结束于该矩形之外,因此您仍然可以在相同的精确坐标上绘制矩形
cb.saveState();
cb.rectangle(left,top,width,height);
cb.clip();
cb.newPath();
// perform clipped output here
cb.restoreState();
我使用try/finally确保调用了restoreState()。这可以使用单元格事件来完成。换句话说:创建一个固定高度的空单元格,并在单元格事件的
layout()
方法中添加内容。如果你想知道为什么我不愿意给你一个代码示例:我的名字是Lowagie(你在代码中提到的那个),我希望人们停止使用iText的过时版本。谢谢你,布鲁诺。我知道你是谁:)我会试试布局()技巧。谢谢你-这是最好的解决方案。
cb.saveState();
cb.rectangle(left,top,width,height);
cb.clip();
cb.newPath();
// perform clipped output here
cb.restoreState();