2017-09-13 6 views
0

pdfにいくつかのフィールドを設定したいが、データが入力された後にそれらを開いたままにしておきたい。私の問題は、追加モードでpdfを編集すると、チェックボックスが設定されないということです。テキストフィールドは正常に動作します。itextsharp - AppendモードのPdfStamperのときにチェックボックスを設定する

string pdfTemplate = @"c:\test\fw4.pdf"; 
string newFile = @"c:\test\completed_fw4.pdf"; 
PdfReader pdfReader = new PdfReader(pdfTemplate); 
//PdfStamper pdfStamper = new PdfStamper(pdfReader, new System.IO.FileStream(newFile, System.IO.FileMode.Create), '\0', true); //doesn't set field - leaves editable 
PdfStamper pdfStamper = new PdfStamper(pdfReader, new System.IO.FileStream(newFile, System.IO.FileMode.Create)); //sets field - leaves locked 
AcroFields pdfFormFields = pdfStamper.AcroFields; 
pdfFormFields.SetField("topmostSubform[0].Page1[0].c1_01[1]", "2"); 
pdfStamper.Close(); 
+0

質問 – mkl

+0

に[2017 W4を] PDFを共有してください(https://www.google.com/url?sa= T&RCT = J&Q =&ESRC = S&ソース=ウェブ&CD = 1&CAD = RJA&UACT = 8&VED = 0ahUKEwiFtZSU7KLWAhWEw4MKHXCyCoUQFggoMAA&URL = httpsの%3A%2F%2Fwww.irs.gov%2Fpub%2Firs-PDF%2Ffw4.pdf&USG = AFQjCNH6XrXINhUDXXX1C3llG2hdmsZL5g)あなたの助けのための – just4atwork

答えて

0

問題のPDFフォームは、ハイブリッドAcroForm/XFAフォームです。 iText(Sharp)5は、XFAフォームのサポートが限られているだけで、XFAフォーム表現で問題のチェックボックスを処理できないようで、AcroForm表現で処理することができます。

これは、観測結果について説明します。一方で

  • PdfStamper pdfStamper = new PdfStamper(pdfReader, new System.IO.FileStream(newFile, System.IO.FileMode.Create), '\0', true); 
    //doesn't set field - leaves editable 
    

    あなたは追加モードで動作するので、使用権の署名が有効のままで、PDFリーダーが有効のままに。したがって、Adobe ReaderはXFAフォームを表示し、編集を許可します。 iTextはXFAフォームを正しく更新しなかったので、ボックスはチェックされません。一方

  • PdfStamper pdfStamper = new PdfStamper(pdfReader, new System.IO.FileStream(newFile, System.IO.FileMode.Create)); 
    //sets field - leaves locked 
    

    あなたは追加モードでは動作しませんので、使用権の署名は無効になり、有効Readerは、Adobe Readerはとしても、それほどの機能を備えていた状況壊れています使用権署名/リーダー有効化なし。したがって、ReaderはAcroFormのみを表示し、編集は許可しません。しかし、iTextがAcroFormフォームを適切に更新すると、ボックスがチェックされます。

この状況でiText(Sharp)5でできることは、XFAフォームと使用権署名の両方を削除することです。これは純粋なAcroFormフォームと無効な使用権の署名から制限なしであなたを残します:

using (PdfReader reader = new PdfReader(@"fw4.pdf")) 
using (FileStream stream = new FileStream(@"fw4-SetCheckBox.pdf", FileMode.Create)) 
using (PdfStamper stamper = new PdfStamper(reader, stream)) 
{ 
    reader.Catalog.Remove(PdfName.PERMS); 
    reader.Catalog.GetAsDict(PdfName.ACROFORM).Remove(PdfName.XFA); 
    AcroFields pdfFormFields = stamper.AcroFields; 
    pdfFormFields.SetField("topmostSubform[0].Page1[0].c1_01[1]", "2"); 
} 
+0

ありがとう! – just4atwork

関連する問題