2012-11-21 52 views
5

Tôi đang dán một tệp PDF hiện có với thông tin bổ sung bằng cách sử dụng thư viện iText. Thông tin bổ sung là văn bản sẽ được hiển thị bằng phông chữ TTF tùy chỉnh.Phông chữ ttf nhúng iText không hiển thị trong Adobe Reader

Vấn đề là văn bản không hiển thị trong Adobe Reader. Trình xem PDF khác, chẳng hạn như trình đọc eVince mặc định trong Ubuntu và trình đọc PDF trực tuyến của Google hiển thị văn bản được đóng dấu trong phông chữ được nhúng tùy chỉnh tốt.

tôi đã cố gắng nhiều mã hóa, chẳng hạn như CP1251, BaseFont.Identity_H, ...

Mã nơi sự kỳ diệu xảy ra:

PdfReader pdfReader = new PdfReader(new FileInputStream(inputPdf)); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("stamped.pdf")); 
PdfContentByte canvas = pdfStamper.getOverContent(1); 
String text = "The stamp"; 
BaseFont bf = BaseFont.createFont("assign.ttf", "Cp1251",BaseFont.EMBEDDED); 
canvas.beginText(); 
canvas.setColorFill(BaseColor.BLUE); 
canvas.setFontAndSize(bf, 13); 
canvas.moveText(310, 600); 
canvas.showText(text); 
pdfStamper.close(); 
+0

Khi bạn chuyển đến Tài liệu> Thuộc tính và mở tab Phông chữ, bạn thấy gì? Bạn có thấy phông chữ không? –

+0

Tôi thấy vấn đề: có thể bạn đang sử dụng phiên bản cũ của iText! –

Trả lời

5

Bạn có một vấn đề cú pháp. Trạng thái văn bản trong PDF được đánh dấu bằng BTET. Các toán tử này được thêm bằng các phương thức beginText()endText(). Bạn có một số BT, nhưng không có ET. Adobe Reader là nghiêm ngặt hơn so với những người xem khác (đó là lý do tại sao tôi thích Adobe Reader hơn tất cả người xem khác: mọi người nên tôn trọng cú pháp khi viết mã).

Thêm dòng sau trước khi pdfStamper.close();

canvas.endText(); 

Hơn thế nữa, đọc book và bạn sẽ tìm ra bạn có thể giảm sự phức tạp của mã của bạn bằng cách sử dụng ColumnText.showTextAligned() tôi.

+1

Cảm ơn Bruno, điểm đánh dấu cuối đã giải quyết vấn đề trên Adobe Reader. Ngoài ra kudo cho thư viện iText tuyệt vời. – nkr1pt

+0

Cảm ơn bạn đã chấp nhận câu trả lời: nó khiến tôi giành được danh tiếng hơn 2000 ;-) –

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