スキップしてメイン コンテンツに移動

投稿

ラベル(iText)が付いた投稿を表示しています

【iText】GetOverContentってのもある

実は数年気づきませんでした。 ココに限らずiTextSharpのウォーターマーク関連というと、 GetUnderContent(pageNum As Integer) As iTextSharp.text.pdf.PdfContentByte ってのがよくサンプルとして出てきますが、 GetOverContent(pageNum As Integer) As iTextSharp.text.pdf.PdfContentByte ってのもあるんですね。

iTextSharpでpdfの合成

合成・・・というと、ちょっと表現がおかしいのかもしれません。 例えば 共通のヘッダとするpdf コンテンツpdf があり、これらをくっつけたい。 イメージとすると ヘッダpdf コンテンツpdf(複数ページ) の、赤の部分にデータがあり、これを合成。 ただし、どちらかをウォーターマーク(透かし)で入れるのは避けたい、という要件です。

iTextSharpでウォーターマーク出力する時の注意

いやー、超ハマりました。 iTextSharpを使って既存のpdfにテキストと画像をウォーターマークとして付与し、出力するという処理を作っていたのですが、一部のpdfで指定した座標に出力できないといった事象が多発していました。 しばらくの間原因がつかめず半ば放置していたのですが、原因判明。 pdfを作成した環境なのか作り方なのかはわからないのですが、用紙サイズが狂っていました。 PdfReaderのインスタンスからGetPageSize(ページ番号)をするとiTextSharp.text.Rectangle型の情報を取得することができます。 取得した情報の中にLeftだのBottomだのといったプロパティがあるのですが、狂っていない(?)pdfだと0になっています。 ここが0以外の数値になっていると、PdfStamperのSetTextMatrixで指定した座標からその分だけずれて出力されてしまいます。 例えばGetPageSizeで取得した情報のLeftが-30、Bottomが50として SetTextMatrix( x:=10, y:=120 ) をいうメソッドを走らせると、x=40、Bottom=70の位置に出力しようとします。 つまり(LeftもしくはBottom * -1)分だけ左あるいは下に動いてしまうわけです。 というわけで対策としては、SetTextMatrixメソッドでの座標指定時に、このずれた部分で補正してやることです。 VB.NETコードで表現すると・・・(何処かにシンタクスエラーがあるかもしれません)