WkHtmlToPdf を使用して、html から pdf に変換しています。これで、リクエストに応じてすべてのフォーム フィールドも編集できるようになりました。Html を Pdf に変換する際に WkHtmlToPdf にバグがあるため、すべてのフォーム フィールドのプロパティが Visible Not Printable になります。
この問題を回避するために、ITextSharp を使用して、WkHtmlToPdf によって生成された既存の pdf を読み取り、そのプロパティをすべてのフォーム フィールドの Visible として設定しています。
これが私がやっている方法です
var pdfReader = new PdfReader(inputFilename);
using (var outputStream = new FileStream(outputFilename, FileMode.OpenOrCreate))
{
var stamper = new PdfStamper(pdfReader, outputStream);
// Regenarating all the fileds using itextSharp.
// Since wkHtmltoPdf has differnt default settings for pdf form fields (Visible and not Printable)
var formFields = stamper.AcroFields;
var filedNames = formFields.Fields.Keys;
foreach (var keyName in filedNames)
{
formFields.SetFieldProperty(keyName, "setflags", PdfAnnotation.FLAGS_PRINT, null);
formFields.SetFieldProperty(keyName, "setflags", PdfFormField.FF_EDIT, null);
formFields.SetFieldProperty(keyName, "textsize", 8.0f, null);
formFields.RegenerateField(keyName);
}
}
これにより、ボックスをチェックする以外のすべてのフィールドで問題が解決しました。WkHtmlToPdf を使用して pdf に変換される html のチェック ボックスはほとんどありません。RegenerateField() (foreach ループの最後の行) を試みるたびに、チェック ボックスがすべてのプロパティを失っていることに気付きました (チェックしたかどうかに関係なく)、空のチェック ボックスのみが表示され、編集できません。
この問題を解決するために、私は次のことを思いつきました
if (formFields.GetFieldType(keyName).Equals(AcroFields.FIELD_TYPE_CHECKBOX))
{
// Regenerate checkbox formfield causing it to reset all its properties
// including checkd/uncheked property
formFields.SetFieldProperty(keyName, "setflags", PdfAnnotation.FLAGS_PRINT, null);
// Ignore the commented code as it is not working Not sure why??? and how
//var item = formFields.GetFieldItem(keyName);
//var appearance = item.GetValue(0).Get(PdfName.AS);
//if (appearance != null)
/{
// if (appearance.tostring().tolower().equals("/yes"))
// {
// formfields.regeneratefield(keyname);
// Not even one working when I try to set the check box status like below
// success = formfields.setfield(keyname, "yes");
// success = formfields.setfield(keyname, "/yes");
// success = formfields.setfield(keyname, "/yes");
// success = formfields.setfield(keyname, "on");
// success = formfields.setfield(keyname, "1");
// }
}
コード (コメントを除く) コード チェック ボックスは、その状態を正常に保持し、生成された Pdf に表示されます。しかし、それは印刷ではありません。PDFの他のフィールドと同じように表示されるチェックボックスのプロパティを確認しました。チェックボックスとは別に、すべてのフィールド(テキストボックス)がその値を出力しています。
私はプロパティをチェックしています --> PDF ドキュメントを開く --> フォーム --> フィールドの追加/編集
ここで何が間違っていますか?チェック ボックスにプロパティを設定する代わりに、Itextsharp を使用して新しいチェック ボックスを作成しようとしましたが、ItexSharp のマニュアル例を使用できませんでした。誰かが前にこのようなことをしましたか?
ItextSharp を使用して新しいチェック ボックスを生成した場合でも、既存のチェック ボックスを正確に置き換えるにはどうすればよいですか?
私の話を読んでくれてどうもありがとう..