2009-01-16 30 views
5

Tôi có tệp PDF có thể điền, có thể điền được có mật khẩu chủ sở hữu (mà tôi không có quyền truy cập). Tôi có thể điền vào trong trình đọc Adobe, xuất tệp FDF, sửa đổi tệp FDF và sau đó nhập tệp.Tôi có thể điền một tệp PDF được mã hóa bằng iTextSharp không?

Sau đó, tôi đã cố gắng làm điều đó với iText cho .NET. Tôi không thể tạo PdfStamper từ PdfReader vì tôi không cung cấp mật khẩu chủ sở hữu cho người đọc. Có cách nào để làm điều này lập trình hoặc tôi phải tạo lại tài liệu?

Ngay cả khi sử dụng FdfReader yêu cầu PdfStamper. Tôi có thiếu gì không? Bất cứ điều gì hợp pháp đó là - Tôi khá chắc chắn rằng tôi có thể hack tài liệu, nhưng tôi không thể. Trớ trêu thay, tái tạo nó có lẽ sẽ ổn.

+0

hỗ trợ cờ an ninh iText là không tồn tại. Chúng tôi chỉ kiểm tra xem liệu bạn có mật khẩu chủ sở hữu hay không và vứt bỏ nếu bạn không có. Gần đây, đã có đủ đơn khiếu nại trong các dòng này rằng chúng tôi có thể sẽ thêm một số hỗ trợ bảo mật cấp độ cờ trong tương lai. –

Trả lời

0

Trừ khi ai đó chuông vào, tôi sẽ giả câu trả lời là "Không"

tôi lên vết thương tái tạo PDF trong một hình thức mã hóa.

+1

Tại sao bạn có 2 lần đăng nhập? –

+2

Tôi đã đăng câu hỏi từ trang web của khách hàng bằng iPhone và tôi quá vội vàng (hoặc quá lười) để xác thực qua OpenID, vì vậy tôi chỉ đăng ẩn danh rồi quên đặt nó vào cộng đồng wiki. – CMPalmer

3

[Tôi tìm thấy câu hỏi này vài tháng sau khi nó đã được đăng và tôi gửi bài giải pháp này ngay bây giờ cho bất cứ ai đi qua câu hỏi này trong một tìm kiếm.]

tôi là trong tình hình chính xác như nhau: khách hàng của tôi có một tệp PDF có các trường có thể điền mà tôi cần để truy cập theo chương trình. Rất tiếc, tệp PDF đã được bảo vệ bằng mật khẩu và chúng không có mật khẩu nên tôi thấy không thể làm việc với tệp của chúng.

Điều tôi phát hiện ra là iTextSharp phiên bản 4.0.4 (và sau này) thực thi các hạn chế về mật khẩu, các phiên bản trước đó thì không.

Vì vậy, tôi đã tải xuống phiên bản 4.0.3 và chắc chắn nó đã hoạt động. Trong trường hợp của tôi, tôi thậm chí không phải thay đổi mã của mình để sử dụng phiên bản cũ này.

Bạn có thể download 4.0.3 (and all other versions) at SourceForge.

+0

Bạn không còn có thể tải xuống phiên bản dưới 5.0.0 vì chúng có vấn đề kỹ thuật và pháp lý. Và trong mọi trường hợp, iTextSharp đã chuyển từ SourceForge sang Github: http://github.com/itext/itextsharp –

5

Dòng này sẽ bỏ qua chỉnh sửa mật khẩu kiểm tra trong iTextSharp:

PdfReader.unethicalreading = true; 
0

Hai điều quan trọng

  1. Đặt PdfReader.unethicalreading = true để ngăn chặn BadPasswordException.
  2. Đặt chế độ append trong constructor PdfStamper của, nếu không thì Adobe Reader Extensions chữ ký trở thành bị hỏng và Adobe Reader sẽ hiển thị thông báo sau: "Tài liệu này chứa những quyền nhất định để cho phép các tính năng đặc biệt trong Adobe Reader Tài liệu này đã được. đã thay đổi kể từ khi được tạo và các quyền này không còn giá trị. 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. "

Vì vậy, tất cả các bạn cần làm là:

PdfReader.unethicalreading = true; 
using (var pdfReader = new PdfReader("form.pdf")) 
{ 
    using (var outputStream = new FileStream("filled.pdf", FileMode.Create, FileAccess.Write)) 
    { 
     using (var stamper = new iTextSharp.text.pdf.PdfStamper(pdfReader, outputStream, '\0', true)) 
     { 
      stamper.AcroFields.Xfa.FillXfaForm("data.xml"); 
     } 
    } 
} 

Xem How to fill XFA form using iText?

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