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/
残念ながら、私はその本を購入するまでには至りませんでした。