私の本の第 6 章を読んだり、iText サイトの例を見たりするだけで、かなりの時間を節約できたはずです。たとえば、NUpToolの例を見てみましょう。印刷部門で働いているので、「N-upping」という用語に精通しているはずです。これは、ドキュメントを取得して、1 枚に 2 ページ (2 アップ)、1 枚に 4 ページ (4 アップ) などの新しいドキュメントを作成する場合です。
あなたの要求は非常に似ていますが、達成するのは簡単です。なぜなら、ドキュメントを取得するとき、たとえばtext_on_stationery.pdfとしましょう。 result2up.pdf .
あなたの場合、何もスケーリングする必要がないので、それほど難しくありません。Document
元のドキュメントの 2 倍のサイズのオブジェクトを作成し、オブジェクトを作成PdfImportedPage
してページをインポートaddTemplate()
し、正しいオフセットで使用して新しいドキュメントに並べて追加するだけです。
の使用を示すかなりの例がありますPdfImportedPage
: http://itextpdf.com/themes/keyword.php?id=236
SuperImposing
「堂々とした」を探しているときに、Google が例を示さなかったのは奇妙です。この例では、4 つの異なるレイヤーを重ねて追加します。
PdfReader reader = new PdfReader(SOURCE);
// step 1
Document document = new Document(PageSize.POSTCARD);
// step 2
PdfWriter writer
= PdfWriter.getInstance(document, new FileOutputStream(RESULT));
// step 3
document.open();
// step 4
PdfContentByte canvas = writer.getDirectContent();
PdfImportedPage page;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, 0);
}
// step 5
document.close();
reader.close();
つまり、4 ページのドキュメントが 1 ページのドキュメントになり、すべてのページが重ねてレンダリングされます。ここで行う必要があるのは、ステップ 1 を変更して、新しいページの寸法が異なるようにし、ステップ 4 を適応させて、2 つのページを隣り合わせに追加し、2 つのページごとに新しいページを追加することです。
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, 0);
i++;
if (i <= reader.getNumberOfPages())
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, width / 2, 0);
document.newPage();
この例では、元のドキュメントの高さが新しいドキュメントの高さと等しく、width
新しいドキュメントの幅が元のドキュメントの幅の 2 倍であると想定しています。言うまでもなく、幅が同じで高さが 2 倍の新しいドキュメントを作成することもできます。その場合、次のものが必要です。
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, height / 2);
i++;
if (i <= reader.getNumberOfPages())
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, 0);
document.newPage();