2009-06-25 37 views
14

Tôi cần điền các trường biểu mẫu XFA vào PDF (được tạo bằng Adobe LiveCycle Designer). Chúng tôi đang cố gắng sử dụng iText (thực sự iTextSharp với C#) để phân tích cú pháp PDF, điền vào các trường XFA và sau đó lưu lại PDF đã sửa đổi.Sử dụng iText (iTextSharp) để điền các trường biểu mẫu XFA vào PDF?

Tất cả các ví dụ tôi có thể tìm thấy với iText (rất ít ví dụ iTextSharp) nói về sửa đổi các trường AcroForm. PDF này KHÔNG có các trường AcroForm và chỉ sử dụng XFA.

Con trỏ đến bất kỳ tài nguyên không chuẩn nào sẽ hữu ích (Tôi đã thực hiện các yêu cầu của Google về chủ đề này và không tìm thấy bất kỳ điều gì hữu ích).

Ví dụ mã ở đây sẽ tuyệt vời từ bất kỳ ai thực sự đã thực hiện những gì tôi đang cố gắng làm.

+1

Tôi chỉ tìm nó trong cuốn sách "iText in action" và nó đọc "Các hình thức như thế này không được thảo luận trong cuốn sách này" vì vậy đừng mua cuốn sách này với hy vọng câu trả lời. –

Trả lời

5

Nếu bạn có thể nhận gói dữ liệu vào PDF, thời gian chạy XFA trong Acrobat sẽ điền các trường đó với dữ liệu trong gói dữ liệu.

Nếu bạn muốn xem một trong những cái này trông như thế nào, hãy tạo biểu mẫu trong Trình thiết kế LiveCycle (đi kèm với Acrobat Pro), thêm một số trường vào đó và lưu nó dưới dạng PDF động. Mở biểu mẫu trong Acrobat và nhập một số giá trị vào các trường và lưu nó.

Mở PDF bằng công cụ cho phép bạn xem dữ liệu PDF và bạn sẽ tìm thấy/Catalog/AcroForm/XFA luồng có gói < xfa: datasets > với các giá trị bạn đã nhập. Đó là những gì bạn sẽ cần để tạo cho mình và chèn vào PDF.

Thông số XDP bao gồm mô tả gói dữ liệu và thuật toán hợp nhất. Bạn có thể tìm thấy nó ở đây:

http://partners.adobe.com/public/developer/xml/index_arch.html

Cách khác, bạn mua máy chủ LiveCycle từ Adobe cho phép bạn làm tất cả điều này lập trình trong một số cách bao gồm thông qua các cuộc gọi dịch vụ web.

+0

Đây là thông tin hữu ích @stevex. Nhiều đánh giá cao. Tôi đã thấy xfa: datasets đoạn dữ liệu (hoặc những gì tôi nghĩ tương ứng với điều đó) khi nhìn vào các đối tượng bên trong của iTextSharp. –

0

Nó nói rằng trong cuốn sách bởi vì nó không làm điều này. Bạn có thể chuyển đổi PDF của bạn?

+0

Không. Đó là một hình thức do chính phủ tạo ra mà tôi cần sửa đổi và sau đó mọi người sẽ phải gửi lại tới gov. –

+1

Sách đã lỗi thời - đã có một số hỗ trợ XFA từ năm 2006. Ví dụ: xem http://1t3xt.info/examples/browse/?page=example&id=433 và http://1t3xt.info/examples/browse /? page = example & id = 441 – JasonPlutext

+0

Các liên kết này đã chết, vui lòng cập nhật –

3
using (FileStream existingPdf = new FileStream("existing.pdf", FileMode.Open)) 
using (FileStream sourceXml = new FileStream("source.xml", FileMode.Open)) 
using (FileStream newPdf = new FileStream("new.pdf", FileMode.Create)) 
{ 
    // Open existing PDF 
    PdfReader pdfReader = new PdfReader(existingPdf); 

    // PdfStamper, which will create 
    PdfStamper stamper = new PdfStamper(pdfReader, newPdf); 
    stamper.AcroFields.Xfa.FillXfaForm(sourceXml); 

    stamper.Close(); 
    pdfReader.Close(); 
} 
+0

Đây là mã tuyệt vời, cảm ơn! Bạn có thể vui lòng cho chúng tôi ví dụ về định dạng XML để nhập vào FillXfaForm không? Cảm ơn! –

1

Tôi có cùng một vấn đề và tôi nghĩ rằng tôi đã tìm thấy giải pháp. Tôi đang sử dụng Powershell để kiểm tra đối tượng pdf.

Tải DLL iTextSharp.

Add-Type -Path "C:\Users\micah\Desktop\itextsharp.dll" 

tải PDF vào một biến:

$PDF = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList "C:\Users\micah\Desktop\test.pdf" 

Kiểm tra đối tượng này:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Get-Member 

Những gì bạn sẽ thấy, đó là tất cả các lĩnh vực của bạn trên PDF của bạn là ở đối tượng này như một tài sản. Bạn có thể xem nhanh tất cả các trường của mình như sau:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Select-Object -Property "*" 

Đó phải là vé ma thuật.Vị trí này là cả hai trường từ biểu mẫu gốc VÀ phần XFA của biểu mẫu.

Các vấn đề liên quan