2011-08-22 41 views
5

Tôi thấy rất nhiều giải pháp ở đây nhưng không có giải pháp rõ ràng hoặc tốt.Làm thế nào để thay thế văn bản trong một tệp PDF bằng C#?

Đây là câu hỏi đơn giản của tôi, hy vọng với câu trả lời thẳng.

Tôi có một tập tin PDF (mẫu) mà được tạo ra có một cái gì đó văn bản như thế này:

{FIRSTNAME} {LASTNAME} {ADDRESS} {PHONENUMBER}

sao có thể có mã C# thay thế các mẫu này bằng văn bản mà tôi chọn?

Không có trường nào, không có nội dung phức tạp nào khác.

Có thư viện nguồn mở nào giúp tôi đạt được điều đó không?

+0

Bạn có một số mã bạn có thể chia sẻ với chúng tôi, có thể giúp bạn dễ dàng hơn không? – diceler

+0

câu hỏi khác này có thể tương tự: [Chỉnh sửa pdf trong C#] [1] [1]: http://stackoverflow.com/questions/1781208/is-there-any-api-in-c -hoặc-net-to-edit-pdf-documents – malinois

+0

Bạn có thể sử dụng http://sourceforge.net/projects/itextsharp/, có các hướng dẫn dễ làm theo (nhưng một chút đã lỗi thời): http: // asp- net-whidbey.blogspot.com/2006/04/generating-pdf-files-with-itextsharp.html – Andreas

Trả lời

2

Như đã nêu trong similar thread điều này không thực sự có thể là một cách dễ dàng. Cách dễ dàng hơn là nhận tệp DocX và sử dụng thư viện DocX cho phép hoán đổi từ dễ dàng và sau đó chuyển đổi tệp DocX sang PDF (bằng cách sử dụng máy in PDF Creator).

Hoặc sử dụng pdf sharp/migradoc để tạo tài liệu mới.

+0

Điều đó thật thú vị, bởi vì mẫu của tôi thực sự được tạo bằng từ và được lưu vào PDF! vì vậy tôi có thể giữ nó dưới dạng docx và sử dụng nó làm mẫu! :-) –

+0

cái này hoạt động độc đáo, nhưng nếu tôi có văn bản được định dạng thì nó sẽ thay đổi định dạng thành mặc định! có vẻ như có một lỗi trong đó và tôi hy vọng họ sẽ sửa chữa nó, nhưng thực sự cảm ơn cho đăng nó ở đây :-) –

+0

Đọc thông qua diễn đàn có thể đã có một sửa chữa cho điều này. Tôi nhớ nhìn thấy nó trong đó – MadBoy

2

'Vấn đề' với tài liệu PDF là chúng vốn không phù hợp để chỉnh sửa. Đặc biệt là những người không có các lĩnh vực. Điều tốt nhất là quay trở lại và xem xét quy trình của bạn và xem liệu có cách thay thế văn bản trước khi tệp PDF được tạo hay không. Rõ ràng, bạn có thể không phải lúc nào cũng có tự do này.

Nếu bạn có thể thay thế văn bản, bạn nên lưu ý rằng sẽ không có sự tự động chỉnh lại văn bản sau văn bản được thay thế. Cho rằng bạn tốt với điều đó, sau đó có rất ít giải pháp cho phép bạn thay thế văn bản.

Tôi biết rằng bạn đang tìm kiếm giải pháp nguồn mở nên tôi cảm thấy miễn cưỡng khi cung cấp cho bạn giải pháp thương mại. Chúng tôi cung cấp một tệp gọi là PDFKit.NET. Nó cho phép bạn trích xuất tất cả nội dung trên một trang được gọi là hình dạng (văn bản, hình ảnh, đường cong, v.v.). Xem phương thức Page.CreateShapes trong tham chiếu kiểu. Sau đó, bạn có thể điều hướng và chỉnh sửa cấu trúc hình dạng này theo cách lập trình và sau đó viết lại thành một tệp PDF.

Ở đây là: http://www.tallcomponents.com/pdfkit3.aspx

Tiết lộ: Tôi là người sáng lập của TallComponents, nhà cung cấp của thành phần này

+0

nếu không có giải pháp nguồn mở, thì tôi sẽ phải tìm kiếm một giải pháp thương mại :-) –

+0

Thật vậy, phần lớn các tệp PDF sử dụng phông chữ được subsetted. Điều đó có nghĩa là chỉ các phông chữ cần thiết được nhúng vào. Ví dụ: nếu tệp PDF hiện tại của bạn không chứa chữ 'A', bạn không thể thêm nó. Trừ khi, tất nhiên, tệp phông chữ gốc vẫn tồn tại trên máy tính của bạn. Nếu không, bạn có thể phải tìm một phông chữ đủ giống nhau. –

3

chủ đề này đã chết, tuy nhiên tôi gửi bài giải pháp của tôi cho linh hồn bị mất khác mà có thể phải đối mặt với vấn đề này trong tương lai. Rất tiếc, công ty của tôi không cho phép đăng mã trực tuyến nên tôi sẽ mô tả giải pháp :). Vì vậy, về cơ bản những gì bạn phải làm là sử dụng PdfSharp và sửa đổi này sample để thay thế văn bản trong luồng, nhưng bạn phải tính đến văn bản đó có thể được chia thành nhiều dấu ngoặc đơn (chuyển đổi chuỗi thành chuỗi để xem định dạng là gì) .

Sau đó, với mã tương tự như this sample duyệt qua trang nguồn pdf theo trang và sửa đổi trang hiện tại bằng cách tìm kiếm các mục PdfContent bên trong các mục PdfReference và thay thế văn bản trong luồng nội dung.

2

Để thay thế văn bản đơn giản, hãy sử dụng thư viện iTextSharp. Mã thay thế một chuỗi với chuỗi khác bên dưới. Lưu ý rằng điều này sẽ chỉ thay thế văn bản đơn giản và có thể không hoạt động trong mọi trường hợp.

//using iTextSharp.text.pdf; 
    void VerySimpleReplaceText(string OrigFile, string ResultFile, string origText, string replaceText) 
    { 
     using (PdfReader reader = new PdfReader(OrigFile)) 
     { 
      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       byte[] contentBytes = reader.GetPageContent(i); 
       string contentString = PdfEncodings.ConvertToString(contentBytes, PdfObject.TEXT_PDFDOCENCODING); 
       contentString = contentString.Replace(origText, replaceText); 
       reader.SetPageContent(i, PdfEncodings.ConvertToBytes(contentString, PdfObject.TEXT_PDFDOCENCODING)); 
      } 
      new PdfStamper(reader, new FileStream(ResultFile, FileMode.Create, FileAccess.Write)).Close(); 
     } 
    } 
+0

Thật không may giải pháp này không hoạt động ngay cả đối với một tệp PDF rất đơn giản. Tôi đã kiểm tra 'contentString' và nó không chứa bất kỳ văn bản nào từ tệp PDF. Có thể bạn đã có một phiên bản cập nhật? Các tệp PDF tôi đang làm việc rất đơn giản và văn bản tìm kiếm cũng là duy nhất. –

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