いやー、超ハマりました。 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コードで表現すると・・・(何処かにシンタクスエラーがあるかもしれません)
旅行記、プログラム開発関連メモ、猫、日常。 つまり雑記です。