-1

Active PDF Toolkit と Adob​​e の FDFToolkit を使用している PDF フォーム Web アプリケーションのリファクタリングに取り組んでいます。私の目標は、iTextSharp を使用して次のことを行うことです。

  1. データベースからのデータをフォーム フィールドに事前入力する
  2. ユーザーがFDF を介して署名および/またはバーコード画像を添付できるようにする

アイテム#1は問題ではありません。項目 2 は最大の課題です。背景を説明しましょう。

これは、PDF フォームを1 回レンダリングする Web アプリケーションです。初期ロード後、フォームには 2 つのキー ボタンがあり、PDF フォームを URL に送信し、クエリ文字列にアクション パラメータを指定します。これらのボタンは「保存」および「署名」と呼ばれます。[保存] ボタンは、FDF フィールド ディクショナリを取得してデータベースに保存します。[署名] ボタンは、ログインしているユーザーの署名を検索し、署名画像を FDF に添付して、FDF を HTTP 応答に書き込みます。

FDFToolkit は、次の方法を使用してフィールドに画像を添付することをサポートしています。

FDFSetAP(文字列 bstrFieldName, short whichFace, 文字列 bstrFileName, short pageNum)

iTextSharp は、FdfWriter クラスで同等のメソッドを提供しません。FdfWriter クラスをサブクラス化し、独自のメソッドを追加して画像を添付することを検討しましたが、ここに連絡して、誰かが同じ問題を抱えているかどうかを確認したかった.

この方法を使用してフィールドの上に画像を重ねることができましたが、これは FDF ではなく、基になる PDF にあります。

AcroFields.FieldPosition pos = _Stamper.AcroFields.GetFieldPositions("SIGNATUREFIELD").First();
Image signature = Image.GetInstance("Signature.gif");
image.SetAbsolutePosition(pos.position.Left, pos.position.Bottom); 
image.ScaleToFit(pos.position.Width, pos.position.Height);
PdfContentByte pcb = _Stamper.GetOverContent(pos.page);
pcb.AddImage(image);

ありがとう!

4

1 に答える 1

1

PdfStamperを使用し、プッシュボタンフィールドを作成して、フォームに画像を配置しました。既存のフィールドをプッシュボタンフィールドに置き換え、プッシュボタンをREAD_ONLYに設定して、押すことができず、静止画像のように見えるようにすることができます。これにより、追加しようとしている画像がページコンテンツに追加されるのではなく、フィールド注釈として保持されます。

using (PdfStamper stamper = new PdfStamper(new PdfReader(inputFile), File.Create(outputFile)))
{
    AcroFields.FieldPosition fieldPosition = stamper.AcroFields.GetFieldPositions(fieldName)[0];

    PushbuttonField imageField = new PushbuttonField(stamper.Writer, fieldPosition.position, fieldName);
    imageField.Layout = PushbuttonField.LAYOUT_ICON_ONLY;
    imageField.Image = iTextSharp.text.Image.GetInstance(imageFile);
    imageField.ScaleIcon = PushbuttonField.SCALE_ICON_ALWAYS;
    imageField.ProportionalIcon = false;
    imageField.Options = BaseField.READ_ONLY;

    stamper.AcroFields.RemoveField(fieldName);
    stamper.AddAnnotation(imageField.Field, fieldPosition.page);
}
于 2013-03-20T00:04:10.737 に答える