2016-11-09 9 views
1

私はこの問題で苦労しています。私はフィールドを持つPDFファイルを持っているので、ユーザーはそれらを記入することができます。Acrofieldの塗りつぶしが意図したとおりに機能しない

iTextSharp(vb.net上)を使用してPDFファイルを開き、フィールドを読み込んでデータを書き戻して(ユーザーに表示します)。

文書はロックされておらず、セキュリティ対策もありません。

次のように私はそれを読む:

Dim readerPDF As New PdfReader(Application.StartupPath & "\PDF\" & filename) 
Dim pathTemp = IO.Path.GetTempFileName & ".pdf" 
Dim stamperPDF As New PdfStamper(readerPDF, New IO.FileStream(pathTemp, IO.FileMode.Create)) 
Dim pdfFormFields As AcroFields = stamperPDF.AcroFields 

を、私は単純にループpdfFormFields(私はすでにデータベースに保存された各フィールドのキーを持って

For each f as field_keys 
    pdfFormFields.SetField(f, "dummy text") 
Next 

これは、すべてのテキスト入力のための素晴らしい作品。何も問題はありません。私が複数行のフィールドを持っている場合、このことは厄介なものになります。

このアプローチを使って塗りつぶすと、私には:

Wrong field

しかし、私には、Adobe Readerで、元のPDFファイルを開くと、私は私が得る同じ書く場合:

enter image description here

だから... ...私もこれを見てする方法がわかりませんのインターネット上でiTextSharpはこれをサポートしていないのですか、何か不足していますか?

EDIT:Link to PDF

EDIT: iTextのDLLが時代遅れでした。最新のものをダウンロードしても、問題は引き続き発生します。

+0

問題のPDFを共有できますか? – mkl

+0

@mklありがとう! Q. – Jaxedin

答えて

0

問題は複数行フィールドのプロパティで発生する可能性があります。 1つの問題は、フォントが固定されている可能性があり、フィールドがオーバーフローしたときにテキストが画面にクリップされることです。フォントがAutoの場合、コントロールがいっぱいになるとフォントが縮小されます。

+0

へのリンクを追加しました。これはAdobe Readerの機能です。 iTextを使用すると、もう一方の行の下に行を書くだけです。私はiTextがフィールドのプロパティを読み込めないのですか?またはAdobeだけができますか? – Jaxedin

+0

iTextは写真から外れています - もし私が正しいなら。プロパティは、PDFフォームフィールドの定義方法に固有のものです。 – rheitzman

+0

iTextを使用していますか? – Jaxedin

0

PDFで、フィールドの値とフィールドの外観は2つの非常に異なるものです。フィールドビューは、PDFビューアがフィールドまたはその値が何であるかを知らない場合にフィールドを表示するためのものです。あなたが見ている理由は、あなたが見ていることは、Adobe Readerが外観を生成する方法とiTextが外観を生成する方法との間にいくつかのマイナーな、そして大きな...違いがあるということです。私の理論をテストするには、単にAdobe Readerでフィールドを編集し、問題が修正されているかどうかを確認するだけです。そうであれば、iTextの外観ジェネレータが問題になります。

+0

Adob​​e Readerで埋められた同じPDFがうまくいきます。行には「高さ」があり、新しい行がすべて正しく書き込まれます。何とかiTextを使用して、それを逃して、ちょうど下に書き込みを続ける....私は行の高さを設定する方法は何も見つけられず、印刷ブレークラインは機能しません。 – Jaxedin

+0

stamper.AcroFields.Xfa.FillXfaForm(sourceXml)のようなものを使用してみてください。これにより、Acrobatはデータだけを使用してフィールドの書式を設定できます。 – joelgeraci

+0

XFAで塗りつぶしてみました。同じ出力:( – Jaxedin

関連する問題