私が知ったように、この目標を達成する方法がありますが、(私が知っている)特にエレガントな手段を介してではありません。
これを行う方法は、iTextSharpを使用して、既存のフォームフィールドの上に直接テキストフィールドを書き込むことです。
ここでの主な注意点は、基本的にpdfがフォームでなくなることです。したがって、フォームフィールドの内容を読む必要がある場合は、面倒です。
一方、フォームフィールドが基本的にiTextSharpにPDFのどこにテキストを配置するかを指示するための簡単なガイドとして使用されている場合(そして出力専用に存在する場合)、これはうまくいく可能性があります。
using (FileStream filestream = new FileStream(outputpath, FileMode.CreateNew, FileAccess.Write))
{
var stamper = new PdfStamper(reader, filestream);
var acroFields = stamper.AcroFields;
string fieldName = "Field Name";
var fieldPositions = acroFields.GetFieldPositions(fieldName);
var helveticaBold = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 14);
var helveticaRegular = FontFactory.GetFont(FontFactory.HELVETICA, 14);
List<Chunk> chunks = new List<Chunk>();
chunks.Add(new Chunk("Rodrigo, you are ", helveticaRegular));
chunks.Add(new Chunk("NOT", helveticaBold));
chunks.Add(new Chunk(" the father!", helveticaRegular));
Phrase currentPhrase = new Phrase();
foreach (Chunk chunk in chunks)
{
currentPhrase.Add(chunk);
}
foreach (var currentPosition in fieldPositions)
{
PdfContentByte currentCanvas = stamper.GetOverContent(currentPosition.page);
ColumnText currentColumnText = new ColumnText(currentCanvas);
currentColumnText.SetSimpleColumn(currentPhrase, currentPosition.position.Left,
currentPosition.position.Bottom, currentPosition.position.Right,
currentPosition.position.Top, 13, Element.ALIGN_LEFT);
currentColumnText.Go();
}
stamper.FormFlattening = true;
stamper.Close();
}