0

Webアプリケーションで生成する必要がある次の性質のPDFテンプレートがあります。

サンプル段落:

{customer.name}様、

あなたの弁護士{customer.lawyer.name}があなたのアカウント{customer.account.number}について私たちに連絡し、アカウントの即時閉鎖を要求しました。

..。

上記の{...}フィールドは、プレースホルダーとして入力されるさまざまなアクロフィールドに対応するためのものであり、データを入力できます。

ただし、問題は、{customer.lawyer.name}フィールドの長さが10文字から50文字までさまざまである可​​能性があることです。

iTextを使用して、変数のさまざまな長さに対応できるように、上記のテンプレートのpdfをどのように生成できますか?たぶん、テキストを適切に折り返すことさえできますか?

4

1 に答える 1

1

iText 列を使用して文字をレイアウトしました。これが私の仕事の例です。これを Stack Overflow に入力しただけで、コンパイルもテストもしていないことに注意してください。

行の 2 つの改行が段落を示しているファイルを想像してみてください。それ以外の場合、テキストはテキスト エディターによって折り返されます。次のクラスには、generate という名前のメソッドがあり、ファイルを読み取り、上下に 1 インチの余白、両側に 1 1/2 インチの余白を持つ US Letter サイズの PDF を出力します。

/** 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 に答える