アップデート:
いくつかの議論の後、私たちはTeX、特にWindows互換のMiKTeXを使用することにしました。レイアウトを細かく管理することで動的な長さのテーブルをフォーマットできたとしても(各行の行の高さを計算するのと同じくらい面倒であるとは思えない)、大きなテキストボックスのような他の動的なコントロールもあることに気付きました。マイクロ管理する必要があるため、ドキュメント全体をその場で生成することにしました。そのことを念頭に置いて、TeXに行くことは、そのパワーと以前の経験から当然の選択でした。1週間後、すべてのレポートが動的に生成され、背後のコードがクリーンで、最小限。
オリジナル:
LiveCycleを使用して生成されたpdfフォームテンプレートがあり、それを入力して(pdfstamper)、いくつかのテーブルを追加したい(pdfptable)が、当初考えていたよりも難しいことがわかった。
PDFを開き、pdfstamperを使用して静的フィールドを編集します。
using (var outputPDF1 = new MemoryStream())
{
var pdfReader = new PdfReader(pdf);
var pdfStamper = new PdfStamper(pdfReader, outputPDF1);
var pdfFields = pdfStamper.AcroFields;
pdfFields.SetField("Field1", "Value1");
これは単純明快です。
次に、設定された場所から複数のページにまたがるテーブルを追加しようとします。ここでは、3年前の、はるかに古いバージョンのitextsharpを使用したこの試みがあり、非常に手動です。
そのコードの要点は、GetOverContentを使用して、生成されたテーブルにColumnTextを挿入することですが、これには、テーブルの高さを認識し、テーブルを手動でサイズにカットする必要があります。
var cb = pdfStamper.GetOverContent(1);
var ct = new ColumnText(cb);
ct.Alignment = Element.ALIGN_CENTER;
ct.SetSimpleColumn(36, 36, PageSize.A4.Width-36, PageSize.A4.Height-300);
ct.AddElement(table);
ct.Go();
別の答えがあります Itextsharp: 単一のページテーブルに制限されている正確に1つのページで2つの要素を調整します。拡張可能ですが、後続のページでもヘッダー/フッターを計算する必要があるようです。
そして、同じ一般的な方向でのさまざまな未回答の質問:
itextsharpはPdfptableを目的の位置に配置します
だから私の質問は、WYSIWYGエディターを使用して静的にPDFを作成し、それを変更してテーブルや任意の長さのテキストなどの動的なサイズのコンテンツを追加する現在の最良の方法は何ですか?WYSIWYG LiveCycleを使用してテンプレートを機能させることができれば、最初から生成したくありませんが、PDFテンプレート用にフォーマットされたテーブルを取得するのに、すべてをその場で生成するよりも手間がかかる場合は、 itextsharpを使用して、PDF全体をその場で生成します。