2013-07-25 22 views
9

Tôi có mẫu PDF có biểu mẫu có bật tính năng Mở rộng. Sau khi điền vào các lĩnh vực của mẫu này sử dụng iTextSharp, một người dùng với Acrobat Reader nhận được thông báo lỗi:Tắt các tính năng mở rộng với iTextSharp

Tài liệu này kích hoạt các tính năng mở rộng trong Adobe Reader. Tài liệu có đã được thay đổi kể từ khi được tạo và sử dụng các tính năng mở rộng không còn là . Vui lòng liên hệ với tác giả để biết phiên bản gốc của tài liệu này.

Tôi googled một chút nhưng tất cả các bài viết nói về "cho phép" các tính năng mở rộng, tuy nhiên, tôi muốn các trường mẫu vẫn tàn tật và mở rộng các tính năng tắt

Dưới đây là một số mẫu mã mà tôi đang sử dụng:

using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open)) 
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create)) 
{ 
    // Open existing PDF 
    var pdfReader = new PdfReader(existingFileStream); 

    // PdfStamper, which will create 
    var stamper = new PdfStamper(pdfReader, newFileStream); 

    var form = stamper.AcroFields; 

    var fieldKeys = form.Fields.Keys; 

    foreach (string fieldKey in fieldKeys) 
    { 
     if (fieldKey.Equals("Retailer Name")) 
      form.SetField(fieldKey, retailerName); 
    } 
    // “Flatten” the form so it wont be editable/usable anymore 
    stamper.FormFlattening = true; 

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

Có thể bạn không nên lưu, nhưng crea te một trường hợp mới của nó thay vì với iTextSharp?Kết quả là không có thay đổi, bởi vì bạn vừa tạo lại tài liệu? Tôi không quen với các tính năng mở rộng PDF hoặc iTextSharp. Mã của bạn liên quan đến việc sử dụng iTextSharp trông như thế nào? Tôi hiện đang đọc Java API nhưng nó rất lớn ... –

+0

@Mike: Tôi đang tạo một phiên bản mới. Tôi đã cập nhật câu hỏi để hiển thị mã tôi đang sử dụng. – Jags

Trả lời

10

các iText Keyword: Reader enabled PDFs điểm để các thông tin sau:

0.123.

Đăng bởi Bruno Lowagie on Fri, 2010/12/31 - 16:37

Sau khi điền vào mẫu đơn của tôi, PDF của tôi hiển thị thông báo sau: Tài liệu này kích hoạt các tính năng mở rộng trong Adobe Reader. Tài liệu đã được thay đổi kể từ khi nó được tạo và sử dụng các tính năng mở rộng không còn khả dụng nữa. Vui lòng liên hệ với tác giả để biết phiên bản gốc của tài liệu này. Làm cách nào để tránh thông báo này?

Tác giả của biểu mẫu đã bật tài liệu Reader. Việc bật trình đọc chỉ có thể được thực hiện bằng phần mềm Adobe. Bạn có thể tránh thông báo này theo hai cách:

  • Xóa quyền sử dụng. Điều này sẽ dẫn đến một biểu mẫu không còn được kích hoạt Reader nữa. Ví dụ: nếu người tạo tài liệu cho phép biểu mẫu đã điền có thể được lưu cục bộ, điều này sẽ không thể thực hiện được nữa sau khi xóa quyền sử dụng.
  • Điền vào biểu mẫu ở chế độ nối thêm. Điều này sẽ dẫn đến kích thước tệp lớn hơn, nhưng tính năng bật Reader sẽ được giữ nguyên.

Nó cũng chỉ ra các mẫu ReaderEnabledForm.java (C#/iTextSharp tương đương trong số đó là ReaderEnabledForm.cs) trong đó cho thấy làm thế nào để làm một trong hai.

Trong trường hợp của bạn số tiền này để gọi

pdfReader.RemoveUsageRights(); 

ngay sau khi tạo PdfReader và trước khi tạo PdfStamper.

/** 
* Removes any usage rights that this PDF may have. Only Adobe can grant usage rights 
* and any PDF modification with iText will invalidate them. Invalidated usage rights may 
* confuse Acrobat and it's advisabe to remove them altogether. 
*/ 
public void RemoveUsageRights() 
0

Điền vào biểu mẫu trong chế độ append bằng cách sử dụng sự quá tải PdfStamper constractor

// PdfStamper, which will create 
var stamper = new PdfStamper(pdfReader, fileStream, '\0', true); 
Các vấn đề liên quan