2016-04-14 6 views
0

私はiText 4.2.1を使用して私のpdfレポートを生成しています。 したがって、基本的には、カバーページ、終了ページ、およびコンテンツページ(画像ヘッダーを含む)を含むPDFテンプレートがあります。iText - PdfCopyにおけるページスタンプの永続性

私は、動的に自分のコンテンツを追加するには、私のテンプレートとPageStampをコピーするPdfCopy & PdfImportedPageを使用しています。

必要性:コンテンツページを何度も使用する必要があります。レポートのコンテンツページと同じくらいです。

問題:私はを使用している場合 pdfCopy.createPageStamp(importedPage)は、スタンプは、次のコンテンツページにわたり持続するいくつかのテキストを追加するをColumnText.showTextAligned。したがって、私のコンテンツページ第2ページには、第1のテキスト(PageStampによって追加されたもの)とそれ自身のテキスト(別のPageStampによって追加されたもの)のテキストが含まれています。ここで

はコードの例です: - :同じ結果

 

    // Init 
    Document doc = new Document(); 
    PdfCopy pdfCopy = new PdfCopy(doc, new FileOutputStream(new File("Result.pdf"))); 
    doc.open(); 
    PdfReader pdfReader = new PdfReader("pdf-template.pdf"); 

    // Page 1 
    PdfImportedPage importedPage1= pdfCopy.getImportedPage(pdfReader, 2); 
    String text1= "Text of the first page - 1"; 
    PageStamp stamp1 = pdfCopy.createPageStamp(importedPage1); 
    ColumnText.showTextAligned(stamp.getOverContent(), Element.ALIGN_CENTER, 
           new Phrase(text1), 400, 500, 0); 
    stamp.alterContents(); 
    pdfCopy.addPage(importedPage1); 

    // Page 2 
    PdfImportedPage importedPage2= pdfCopy.getImportedPage(pdfReader, 2); 
    String text2 = "Text of the second page - 2"; 
    PageStamp stamp2 = pdfCopy.createPageStamp(importedPage2); 
    ColumnText.showTextAligned(stamp2.getOverContent(), Element.ALIGN_CENTER, 
           new Phrase(text2), 200, 700, 0); 
    stamp2.alterContents(); 
    pdfCopy.addPage(importedPage2); 

    // Closing 
    doc.close(); 

>は2ページ目では、私は同じPdfImportedPageを使用してみました、私のテキスト1、私のテキスト2

が表示されます。

私は同じPageStampを使用してみました。同じ結果です。

私は異なるPdfReaderを使ってみました:これは本当に解決策ですか?

ありがとうございました。

+0

iText 4.2.1のようなものはありません。 [この不正なバージョン](http://itextpdf.com/maven-update-problem-with-itext-4.2.2)を読むと、iText 4.2.1の内容を実際に知っている人はいないことがわかります。誰にも認められない非公式版です。私はあなたがiText 5よりも古いバージョンを使用している限り、誰かがあなたを助けてくれるとは思わない。 –

+0

そのフォークを作成した会社からサポートを受けるべきです。問題は、その会社はもはや存在しないということです。または、フォークした開発者にymasoryと尋ねる。問題は、おそらく興味がないことです。 –

+0

@GuillaumeB私の答えはあなたの質問に答えますか? – mkl

答えて

0

@ Brunoと@Amedeeは​​バージョン4.2.1の使用について既にコメントしていますので、私はそれについて話す必要はありません。あなたが依頼する質問は、現在のiTextバージョンで有効です。したがって:

問題:私はスタンプが次のコンテンツページにわたり持続するいくつかのテキストを追加するpdfCopy.createPageStamp(importedPage)とColumnText.showTextAlignedを使用している場合。したがって、私のコンテンツページ第2ページには、第1のテキスト(PageStampによって追加されたもの)とそれ自身のテキスト(別のPageStampによって追加されたもの)のテキストが含まれています。

これは文書化された動作であると予想されます。このメソッドは、PdfReaderインスタンスを変更:それは2行目に言うように

/** 
* Create a page stamp. New content and annotations, including new fields, are allowed. 
* The fields added cannot have parents in another pages. This method modifies the PdfReader instance.<p> 
* The general usage to stamp something in a page is: 
* <p> 
* <pre> 
* PdfImportedPage page = copy.getImportedPage(reader, 1); 
* PdfCopy.PageStamp ps = copy.createPageStamp(page); 
* ps.addAnnotation(PdfAnnotation.createText(copy, new Rectangle(50, 180, 70, 200), "Hello", "No Thanks", true, "Comment")); 
* PdfContentByte under = ps.getUnderContent(); 
* under.addImage(img); 
* PdfContentByte over = ps.getOverContent(); 
* over.beginText(); 
* over.setFontAndSize(bf, 18); 
* over.setTextMatrix(30, 30); 
* over.showText("total page " + totalPage); 
* over.endText(); 
* ps.alterContents(); 
* copy.addPage(page); 
* </pre> 
* @param iPage an imported page 
* @return the <CODE>PageStamp</CODE> 
*/ 
public PageStamp createPageStamp(PdfImportedPage iPage) 

PdfCopy.java

PdfCopy.createPageStampのJavaDocを見てみましょう。

はこのように、

は、私は別のPdfReaderを使用してみました:それは動作しますが、これは本当にソリューションです?

これは1つの解決策ですが、ソースPDFにかなりのリソースを消費します。もう1つはPageStampsなしでPdfCopyを使用し、別のPdfStamperで変更を適用することです。ご使用のケースに応じて、他のものがあり、彼らは単にPdfReaderを操作して、自分の仲介構造を構築する必要はありませんので...

PageStampsをコピー中にスタンプする非常に軽量な方法を表しています。互換性のないユースケースの場合、

+0

こんにちはmkl。ご回答有難うございます。実際、私のコンテンツのほとんどは動的に追加されています(グラフ、グラフ、テキストなどをレポートに追加しています)ので、PageStampは役に立たないようです。私はPdfStamperでそれを把握しようとしています... –

+0

@GuillaumeBその場合は、私の答えを受け入れるか(左上のチックをクリックしてください)、または自分自身を書き留めて受け入れてください。実際に既に解決されている間に質問を開いたままにしておくと、stackoverflowなどのQ&Aサイトでは不適切です。 – mkl

+0

今のところ私はまだ明確な解決策を持っていません。だから私のためにこの質問はまだ開いています...私はその可能性を判断するためにPdfStamperで働いています。 –