2017-09-13 8 views
0

pdf에 일부 필드를 설정하고 채워진 후에는 수정할 수 있도록 열어 둡니다. 내 문제는 추가 모드에서 PDF를 편집 할 때 확인란이 설정되지 않는다는 것입니다. 텍스트 필드가 올바르게 작동합니다.itextsharp - 추가 모드에서 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

문제의 PDF – mkl

+0

[2017 W4 (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는 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