0

我们有以下性质的 pdf 模板,需要由 Web 应用程序生成:

示例段落:

亲爱的{customer.name},

您的律师 {customer.lawyer.name} 已就您的帐户与我们联系,{customer.account.number} 要求立即关闭该帐户。

...

上面提到的 {...} 字段用于容纳将作为占位符放入的各种 acro 字段,以便可以用数据填充它们。

但问题是 {customer.lawyer.name} 字段的长度可能不同,从 10 个字符到 50 个字符,

使用 iText,我们如何为上述模板生成 pdf 以适应不同长度的变量?甚至可以适当地环绕文本?

4

1 回答 1

1

我使用 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/

不幸的是,我从来没有抽空买这本书。

于 2009-07-26T01:44:36.683 回答