使用ColumnText将文本拟合到框中

时间:2012-09-06 12:57:16

标签: coldfusion pdf-generation itext

我在ColdFusion应用程序中使用iText库来创建PDF,目标是在特定位置将特定大小的各种文本添加到其中。

使用ColumnText(跳过详细信息)可以完美地完成:

<cfset directContent = writer.getDirectContent()>
<cfset ct = CreateObject("java", "com.lowagie.text.pdf.ColumnText").init(directContent)>
<cfset ct.setSimpleColumn(100, 50, 400, 400, 18, Element.ALIGN_JUSTIFIED)>
<cfset ct.setText( createObject("java", "com.lowagie.text.Phrase").init("#text_var#") ) >
<cfset ct.go()>

问题是:按预期切断长文本(go()返回ColumnText.NO_MORE_COLUMN)。 但在这种情况下,我需要通过最后添加例如'...'来表示文本没有完成(添加点或者如果需要用'...'替换一个或两个最后一个符号)。

有没有简单的方法来实现这一目标?例如,在我调用go(true)之后 - 我可以看到用于输出文本但没有实际输出的行数。但我需要以某种方式将实际文本装入框中。

1 个答案:

答案 0 :(得分:2)

你正在使用强大的旧版iText,我不知道在我之后命名的软件包中是否支持我要回答的内容。

Q1:我想最后添加...... A1:如果go()返回NO_MORE_COLUMN,则可以获取已写入的最后一行的最后X位置的X位置。见http://api.itextpdf.com/itext/com/itextpdf/text/pdf/ColumnText.html#getLastX%28%29 您可以使用getYLine获取Y位置。见http://api.itextpdf.com/itext/com/itextpdf/text/pdf/ColumnText.html#getYLine%28%29 您可以使用此X和Y在适当的位置添加“...”。

Q2:我不希望文本被删除;我想将文本放在Rectangle中。 A2:这就是本例中的完成内容:http://itextpdf.com/examples/iia.php?id=163 在方法addParagraph()中,在模拟模式下添加文本以查看它是否适合。如果是,则添加文本为真实;如果没有再次添加文本,但使用较小的字体。