itextsharpを利用しやすくするコツは、簡易でいいのでclassを作っておく

印刷用の文書を生成するのに、DOCやDOCX等を生成して他のソフトに印刷させるよりも、PDFでファイル出力して、PDF印刷ソフト(他のソフト)で印刷させるか、PDF Direct Print対応プリンタなら、直接ファイルコピーをしてしまう、という方法があります。

連続して帳票を出すような、バッチ系の処理であればシンプルに PDF Direct Print の方法で、というのが現実的な感じもします。
(ちなみに、Ricoh の MPC4503 やそれ以降の複合機では、標準でPDF Direct Printに対応していました。MACでは別途料金がかかる、というのがよくわかりませんが、WindowsからPDFファイルをコピー(\\複合機のIP\mpc4503jpn へコピー)して送信したぶんには大丈夫でした。)

ところで、そもそもPDFの座標系が左下を 0,0 で基準にしているので、itextsharpもそれに準じているので、初っぱなから躓いたりしたり、PDFがPostScript系なので、【そもそも手書きでスクリプトを書く】仕様なのでセンテンスを作り、フォント種・サイズ設定、など面倒にしか感じない仕様に itextsharp も準じています。

なので、利用したい方法(関数)を用意したclassをまずは作成して、それをitextsharp流儀(笑)に変換してitextsharpに渡す、というのを、一度作成しておくと非常に楽です。

私の場合は特に、PR201用の出力をPDFにする、という目的だったので、単位換算ようのクラスの作成から始め、それを左上を 0,0 基準として、横○○/160インチに □という文字を印字、そうしたら仮想ヘッドを1文字分(半角か全角かの2種類のどちらか)を右へ移動させ(pos_x のような変数に 12/160 インチ加算するだけ)、次の文字を・・・というように1文字単位で出力する関数を用意しておきました。
このようにすると、等間隔で1文字ずつ、というのがPDF、itextsharpの仕様に関係無く実現できます。
そして、CPUは今時の3GHz超えですので、B4にビッシリ文字があっても、瞬時に処理が終了します。むしろプリンタの印刷処理(用紙移動だけの時間としても)の方が遅いくらいです!

用途に応じて、lprintf(x,y,text,FontName,FontSize) を渡すだけでOKなレベルの関数を用意しておくと、その後がずっと楽です。

あと、複数ページの処理がちょっとコツが必要なので、私は1ページごとのPDFを作成する、というのを基本にして、必要があれば1ファイルにまとめる処理をitextsharpで作成しておいたので、それを外部exeで利用して、という方法で行っています。