[英]On generating pdfs using itext pdf, CMYK image is producing pdfs of very large size
[英]Generating PDFs in Java using iText. Support for Free flowing text
我们具有以下性质的pdf模板,这些模板需要由Web应用程序生成:
示例段落:
尊敬的{customer.name},
您的律师{customer.lawyer.name}已就您的帐户{customer.account.number}与我们联系,要求立即关闭该帐户。
...
上面提到的{...}字段用于容纳将作为占位符放入的各种acro字段,以便可以使用数据填充它们。
但是问题是{customer.lawyer.name}字段的长度可以变化,从10个字符到50个字符,
使用iText,我们如何为上述模板生成pdf,以便可以适应变量的不同长度? 甚至还可以适当地环绕文字?
我使用iText列来布局字母。 这是我工作的一个例子。 请注意,我只是将其键入Stack Overflow中,没有进行编译或测试。
想象一个文件,其中连续两个换行符指示一个段落,否则文本将由文本编辑器包装。 下列类具有一个名为generate的方法,该方法读取文件并发出US Letter大小的PDF,顶部和底部的边距为1英寸,每边的边距为1 1/2英寸。
/** Generates a letter. */
public class LetterGenerator
{
/** One inch is 72 points. */
private final static int INCH = 72;
/** Generate a letter. */
public void generate() throws DocumentException, IOException
{
BufferedReader in = new BufferedReader(new FileReader("letter.txt"));
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, new FileOutputStream("letter.pdf"));
PdfContentByte cb = writer.getDirectContent();
ColumnText ct = new ColumnText(cb);
String para;
int spacingBefore = 0;
while ((para = in.readLine()) != null)
{
line = line.trim();
if (line.length() != 0)
{
// Shekhar, do your place-holder replacement here.
Paragraph p = new Paragraph(line);
p.setSpacingBefore(spacingBefore);
ct.addElement(p);
spacingBefore = 8;
}
}
ct.setSimpleColumn(INCH, INCH * 1.5f, 7.5f * INCH, 9.5f * INCH);
int status = ColumnText.START_COLUMN;
while ((status & ColumnText.NO_MORE_TEXT) == 0)
{
status = ct.go();
ct.setYLine(PageSize.LETTER.getHeight() - INCH);
ct.setSimpleColumn(INCH, INCH * 1.5f, 7.5f * INCH, 9.5f * INCH);
document.newPage();
}
document.close();
}
}
为了我的一生,我不记得为什么重置Y线。
iText是一个不错的库。 通过阅读《 iText in Action》一书中的教程,我学到了大部分关于它的知识。
http://developers.itextpdf.com/examples/
不幸的是,我从来没有去买这本书。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.