0

iTextを使用したPDFページの面付けの実際のコード例を誰かが親切に示してもらえますか? Google オプションを使い果たしたようです。そのためのコード サンプルはありません。

ありがとう、

インナーオーケストラ

ps: 印刷の専門用語である面付けとは、たとえば、11x17 枚の紙に 8.5x11 のページが 2 ページあることを意味します。名刺の場合、これは同じページ (3.75x2.25) になりますが、小冊子の場合は、シートが折りたたまれ、ページの配置が小冊子の設定によって異なるため、そうではありません。

4

1 に答える 1

1

私の本の第 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();
于 2014-07-22T07:09:54.920 に答える