2009-02-24 59 views
36

Tôi có một tệp PDF hiện có và tôi có thể sử dụng FdFWriter để nhập vào các hộp văn bản. Nó hoạt động tốt. Bây giờ tôi có một hình ảnh. Tôi đã đọc tài liệu và xem nhiều ví dụ nhưng tất cả đều tạo tài liệu mới và chèn hình ảnh. Tôi muốn lấy một tệp PDF hiện có và chèn hình ảnh vào trường hình ảnh hoặc dưới dạng hình ảnh biểu tượng của một nút. Tôi đã thử nhưng nó làm hỏng tài liệu.Làm cách nào để chèn hình ảnh với iTextSharp vào một tệp PDF hiện có?

Tôi cần có thể lấy một tài liệu hiện có và đặt một hình ảnh lên đó. Tôi không muốn mở, đọc, thay thế và xóa bản gốc. Thay đổi ban đầu này và tên "nguyên bản" chỉ có nghĩa là tệp nguồn trong ngữ cảnh này. Có nhiều tệp PDF như thế này cần một hình ảnh.

Cảm ơn bạn đã được trợ giúp.

Chỉnh sửa - Tôi rất biết ơn mã bên dưới. Nó hoạt động rất tốt, nhưng vấn đề đối với tôi là PDF hiện tại có chữ ký số trên đó. Khi tài liệu được sao chép như thế này (thành result.pdf) những chữ ký đó, trong khi vẫn còn hiện diện, có số byte khác nhau hoặc mục khác bị hỏng. Điều này có nghĩa là chữ ký, trong khi chúng hiển thị trên result.pdf, có một biểu tượng bên cạnh chúng mà trạng thái "chữ ký không hợp lệ".

Trong trường hợp quan trọng, tôi đang sử dụng bảng chữ ký Topaz để tạo chữ ký của mình, có chữ ký riêng. Chỉ sao chép các tập tin PDF sẽ không làm hỏng nó, nhưng quá trình dưới đây sẽ.

Tôi đang cố gắng đặt hình ảnh trên tài liệu hiện có, chứ không phải bản sao của tài liệu, mà trong trường hợp này quan trọng.

Ngoài ra, bằng chữ ký, tôi có nghĩa là viết tay, chứ không phải số pin.

Cảm ơn bạn một lần nữa.

EDIT - Có thể PdfSignatureAppearance được sử dụng cho điều này không?

EDIT - Tôi dường như có thể làm điều đó với:

var stamper = PdfStamper mới (đọc, outputPdfStream, '1', true);

+0

này cũng có thể được sử dụng: http://stackoverflow.com/questions/7115242/insert-an-image-in-pdf-using-itextsharp –

Trả lời

56

Nếu bạn muốn thay đổi nội dung của tệp PDF hiện có và thêm nội dung bổ sung như hình mờ, pagenumbers, tiêu đề bổ sung, PdfStamper là đối tượng bạn cần. Tôi đã sử dụng thành công mã sau đây để chèn hình ảnh vào tệp pdf hiện có vào một vị trí tuyệt đối đã cho:

using System.IO; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (Stream inputPdfStream = new FileStream("input.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) 
     using (Stream inputImageStream = new FileStream("some_image.jpg", FileMode.Open, FileAccess.Read, FileShare.Read)) 
     using (Stream outputPdfStream = new FileStream("result.pdf", FileMode.Create, FileAccess.Write, FileShare.None)) 
     { 
      var reader = new PdfReader(inputPdfStream); 
      var stamper = new PdfStamper(reader, outputPdfStream); 
      var pdfContentByte = stamper.GetOverContent(1); 

      Image image = Image.GetInstance(inputImageStream); 
      image.SetAbsolutePosition(100, 100); 
      pdfContentByte.AddImage(image); 
      stamper.Close(); 
     } 
    } 
} 

Khi bạn chèn hình ảnh, bạn có thể thay đổi kích thước hình ảnh đó. Bạn có thể xem transformation matrix trong tài liệu iTextSharp.

+0

Có cách nào để làm điều đó, nơi nó đặt hình ảnh trên bản gốc thay vì result.pdf? Cảm ơn bạn vì câu trả lời này. – johnny

+0

Lý do là vì tài liệu có chữ ký số bị hỏng bởi quy trình. – johnny

+3

Chữ ký điện tử đảm bảo rằng tài liệu không bị giả mạo. Bạn không thể thêm nội dung vào nó mà không từ chức tài liệu. –

1

tôi có thể giải quyết vấn đề của tôi bằng cách thêm dòng sau vào mã ký của tôi để thêm hình ảnh

var image = iTextSharp.text.Image.GetInstance(@"C:\Users\sushil\Documents\sansign.jpg"); 
appearance.Acro6Layers = true; 
appearance.SignatureGraphic = image; 
appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; 

Như tôi đã ký tài liệu với chữ ký số có thể nhìn thấy, bây giờ tôi có thể có cả hai đặc tính hình ảnh và chữ ký số cạnh nhau

+0

Vấn đề của op là thêm một hình ảnh vào một pdf hiện có, đã được ký, chứ không phải để đặt hình ảnh của một hình ảnh chữ ký. – mkl

+0

tôi nghĩ rằng việc thêm bất kỳ thứ gì vào tài liệu đã ký sẽ làm mất hiệu lực tài liệu đã ký kỹ thuật số. xin vui lòng sửa tôi nếu tôi sai –

+0

Để biết chi tiết cf. http://stackoverflow.com/documentation/pdf/5161/integrated-pdf-signatures/18524/allowed-and-disallowed-changes-to-a-signed-document#t=20170227100646546925 – mkl

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