2013-02-01 42 views
5

Tôi muốn thêm văn bản vào tệp PDF hiện có bằng iTextSharp, tôi đã tìm các cách khác nhau nhưng trong tất cả chúng, trình ghi và trình đọc là các tệp pdf riêng biệt. Tôi muốn một cách để tôi có thể mở một pdf sau đó viết những thứ khác nhau ở các vị trí khác nhau. ngay bây giờ tôi có mã này, nhưng nó tạo một tệp mới.ITextSharp chỉnh sửa pdf hiện có

using (FileStream stream1 = File.Open(path, FileMode.OpenOrCreate)) 
     { 
     BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
     PdfReader reader = new PdfReader("C:\\26178DATA\\pdf\\holding.pdf"); 
     var pageSize = reader.GetPageSize(1); 
     PdfStamper stamper = new PdfStamper(reader, stream1); 
     iTextSharp.text.Font tmpFont = new iTextSharp.text.Font(bf, fontSize); 
     PdfContentByte canvas = stamper.GetOverContent(1); 
     Phrase ph = new Phrase(words[1], tmpFont); 
     ph.Font = tmpFont; 
     canvas.SetFontAndSize(bf, fontSize); 
     ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, ph, iTextSharp.text.Utilities.MillimetersToPoints(x * 10), pageSize.GetTop(iTextSharp.text.Utilities.MillimetersToPoints(y * 10)), 0); 
     stamper.Close(); 
      } 

Trả lời

4

Bạn muốn thêm một văn bản vào một tập tin PDF sẵn có sử dụng iTextSharp, tìm thấy nhiều cách khác nhau nhưng trong tất cả trong số họ người viết và người đọc là các tập tin pdf riêng biệt.

Theo cách thông thường, iText (Sharp) thao tác PDF bằng PdfStamper, có thể liên quan đến việc tổ chức lại các phần tử PDF hiện có, iText không chỉnh sửa tệp tại chỗ. Cách khác, sử dụng chế độ nối thêm, sẽ cho phép chỉnh sửa tại chỗ; nhưng một tùy chọn như vậy không được thực hiện. Một sự thu hút lớn về chỉnh sửa tại chỗ là trong trường hợp một số lỗi chương trình, tệp được đề cập có thể vẫn ở trạng thái trung gian, không sử dụng được.

Điều đó đang được nói, bạn có thể lưu tệp mới vào đường dẫn của tệp gốc bằng cách đọc tệp hoàn toàn vào bộ nhớ và sau đó bắt đầu tạo đầu ra với cùng một đường dẫn. Trong trường hợp của mã mẫu của bạn mà có ngụ ý ít nhất di chuyển các nhà xây dựng sử dụng PdfReader trước sự ra đời của dòng đầu ra:

PdfReader reader = new PdfReader(path); 
using (FileStream stream1 = File.Open(path, FileMode.OpenOrCreate)) 
{ 
    BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
    ... 

Hoặc bạn có thể tạo ra các tập tin kết quả trong bộ nhớ, tức là trong một MemoryStream thay vì một FileStream, và khi hoàn thành, hãy ghi nội dung của luồng bộ nhớ vào đường dẫn tệp nguồn của bạn.

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