我使用itext
庫來創建PDF文件,因爲PDF創建具有非常詳細的渲染功能。當用戶點擊按鈕時,我會寫一個模板並每次填寫DB中的空白單元格。Icepdf特殊字符渲染問題
比我用Icepdf
庫顯示給用戶和輸出創建的PDF文件。
但Icepdf有一些字符編碼問題,我認爲。當PDf創建並由Icepdf
調用時,土耳其人的一個字符看起來像方塊。在這link可以看到土耳其字符。所有字符都成功呈現,但圖片中的第八個字符不是。
當我去創建的pdf文件的文件路徑(由itext
庫創建),並用Adobe Acrobat Reader手動打開所有字符顯示正確。但是,如果編程Icepdf
打開文件並顯示給用戶,圖片中的第八個字符看起來像方塊。
我需要改變Icepdf的字符編碼,但我還不能。閱讀很多關於字符的文章和Font
編碼的Icepdf
,但我還沒有成功。如果我解決了這個問題,我的應用程序就可以部署了。
生成的PDF文件可以下載here。
當我打開這個文件與Acrobat它看起來像這樣:
當我打開與IcePDF文件programaticly它看起來像THI:
此外,我在Stackoverflow上閱讀一些關於這個問題和答案,但他們都沒有一個接受的答案/幫助。
代碼用於創建文件路徑:
File fUrl = new File(CreateAndViewPdf
.class
.getProtectionDomain()
.getCodeSource()
.getLocation()
.getPath()
);
String path = fUrl
.toString()
.substring(0,fUrl.toString().lastIndexOf(File.separator))
.replace("%20", " ") + "\\hello.pdf";
代碼爲createPdf()
方法:
public void createPdf()throws DocumentException, IOException {
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, "ISO-8859-9", BaseFont.EMBEDDED);
Document document = new Document(PageSize.A5);
PdfWriter.getInstance(document, new FileOutputStream(path));
document.setMargins(10, 10, 10, 10);
document.setMarginMirroring(true);
document.open();
Font font = new Font(bf);
PdfPCell cell;
PdfPTable table = new PdfPTable(2);
font = new Font(bf);
font.setSize(15);
font.setStyle("bold");
cell = new PdfPCell(new Phrase("Sender\n"+"Information", font));
cell.setPaddingBottom(7);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
font = new Font(bf);
font.setSize(12);
font.setStyle("normal");
cell = new PdfPCell(new Phrase("â ç ğ ı İ î ö ş ü û\n\n"+"Â Ç Ğ I İ Î Ö Ş Ü Û",font));
cell.setPaddingBottom(7);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
table.setWidths(new int[]{50,200});
table.setWidthPercentage(100);
table.setSpacingAfter(10);
table.setSpacingBefore(10);
document.add(table);
document.close();
}
代碼爲viewPdf()
方法:
public void viewPdf(String fileP)throws IOException, InterruptedException {
String filePath = fileP;
SwingController controller = new SwingController();
SwingViewBuilder factory = new SwingViewBuilder(controller);
JPanel viewerComponentPanel = factory.buildViewerPanel();
controller.getDocumentViewController().setAnnotationCallback(
new org.icepdf.ri.common.MyAnnotationCallback(
controller.getDocumentViewController()));
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
CreateAndViewPdf.this.getContentPane().add(viewerComponentPanel);
CreateAndViewPdf.this.setSize(new Dimension(screen.width/2,screen.height));
CreateAndViewPdf.this.setLocationRelativeTo(null);
controller.openDocument(filePath);
}
您是否嵌入了字體?那就是:你是否正確地嵌入了它?你使用哪種字體?向我們展示實際的PDF(不是PDF的屏幕截圖)。 –
我在我的問題中添加了IcePdf查看器方法。我如何向您展示PDF本身?我應該將文件傳輸到任何免費的文件存儲網站? –
這就是大多數人的做法:他們將文件放在Dropbox,Google Drive,...(最好是沒有太多廣告且沒有任何惡意軟件的服務),並且公開該文件,以便其他人可以下載它。 –