2016-12-13 5 views
0

私はこの件について多くの研究をしましたが、私が見つけたものはすべて「スタンパーのgetOverContent関数を使用する」ことです。私はこれを作った、それはまだ動作しません。スキャンされた文書にテキストを設定する

私はレパートリーのPDFを一緒にマージするプログラムを作成しました。これは、この新しいドキュメントをページングするよりも(あなたが私が書いているものに従うことができれば幸いです)。元のPDFは自己作成(PDFで直接保存)されているか、スキャンされていません。それは問題があるこれらの最後のものである。ページ区切りは最初に表示されますが、秒単位では表示されません(おそらく存在しますが、画像の後ろにあるはずです)!

ここではページネーションのコードは、私が間違っている人のアイデアがありますか?

PdfReaderリーダー=新しいPdfReader(ソース);:

PdfReader reader = new PdfReader(source); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destination)); 
    for (int i = start + 1; i <= reader.getNumberOfPages(); i++) { 
     Phrase noPage = new Phrase((i - start) + "", new Font(FontFamily.COURIER, 14)); 
     float x = reader.getPageSize(i).getRight(20); 
     float y = reader.getPageSize(i).getTop(20); 

     PdfContentByte content = stamper.getOverContent(i); 
     content.beginText(); 
     ColumnText.showTextAligned(content,Element.ALIGN_CENTER, noPage, x, y, 0); 
     content.endText(); 
    } 
    stamper.close(); 
    reader.close(); 

おかげ

はブルーノからの回答後、私は次のことを行いました PdfStamperスタンパー=新しいPdfStamper(リーダー、新しいFileOutputStream(宛先));

for (int i = start + 1; i <= reader.getNumberOfPages(); i++) { 
    Phrase noPage = new Phrase((i - start) + "", new Font(FontFamily.COURIER, 14)); 
    float x = reader.getCropBox(i).getRight(20); 
     float y = reader.getCropBox(i).getTop(20); 

     PdfContentByte content = stamper.getOverContent(i); 
     ColumnText.showTextAligned(content,Element.ALIGN_CENTER, noPage, x, y, 0); 
    } 
    stamper.close(); 
    reader.close(); 

しかし、それはまだ例について

を働いていない:https://www.transfernow.net/24axn1g4wq4l

+0

'/ MediaBox'を調べることによって' x'と 'y'の値が得られますが、'/MediaBox'よりも小さい '/ CropBox'もあります。その場合、テキストは '/ MediaBox'の境界内に追加されますが、'/CropBox'の境界の外に、したがってページの可視領域外に追加されます。 「PDF文書のページ幅と高さを取得する方法」(http://developers.itextpdf)を参照してください。com/question/how-get-pdf-page-width-and-height) –

+0

また、無効なPDFを作成しています。 ISO-32000-1によれば、テキストオブジェクトをネストすることは禁じられています。あなたは 'ContentText.showTextAligned()'と組み合わせて 'content.beginText()' /'content.endText()を使っています。 'ColumnText.showTextAligned()'が 'BT' /' ET'演算子を追加するので、 'content.beginText();'と 'content.endText();'行を削除してください。 –

答えて

0

オリジナルのPDFファイルは、自己製(スキャン)(PDFで保存されたダイレクト)かではありません。それは問題があるこれらの最後のものである。ページ区切りは最初に表示されますが、秒単位では表示されません(おそらく存在しますが、画像の後ろにあるはずです)!

問題は、PDFファイルの第二のタイプは、スキャンそれはページ回転を使用することであることはありません。

ページが回転すると、iTextはアンダーコンテントおよびオーバーコンテントの開始時に座標系の回転命令を挿入します。これにより、回転していないページに描画されたテキストはそのまま回転したページに表示されます。

この座標系の回転は、絶対座標を選択するときは明らかに考慮する必要があります。

したがって、代わりに

reader.getPageSize(i) 

のあなたはまた、あなたが

stamper.setRotateContents(false); 

を使用して、このiTextのメカニズムを切り替えることができ、その後、明示的にページの回転の有無を検討

reader.getPageSizeWithRotation(i) 

を使用する必要があります次のすべての操作で

+0

本当にありがとう、ありがとう。それはgetPageSizeWithRotation(i)と連携しています –

関連する問題