我正在使用iText生成一些PDF文件,這些pdf文件有一些中文字符(簡體中文--GB2312),但是我無法生成帶有這些字符的pdf。IText - 用中文生成PDF(簡體中文)
任何人都可以告訴我我錯在哪裏?
我嘗試使用各種形式的創作,但沒有成功:
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
com.itextpdf.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.
at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:699)
at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:606)
at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:441)
at com.ford.fc.frc.render.wsltopdf.PDFDefaultWriter.printText(PDFDefaultWriter.java:176)
at com.ford.fc.frc.render.wsltopdf.PDFDefaultConverter.convertFile(PDFDefaultConverter.java:122)
at com.ford.fc.frc.render.wsltopdf.PDFDefaultConverter.convert(PDFDefaultConverter.java:234)
at com.ford.fc.frc.render.plugins.PDFDefaultRenderer.render(PDFDefaultRenderer.java:41)
at com.ford.fc.frc.report.ReportManager.executeRenderer(ReportManager.java:1113)
at com.ford.fc.frc.report.ReportManager.reportCompleted(ReportManager.java:596)
at com.ford.fc.roc.ReportOutputControl.reportCompleted(ReportOutputControl.java:87)
at LoadFRC.main(LoadFRC.java:69)
BaseFont bfComic = BaseFont.createFont(AsianFontMapper.ChineseSimplifiedFont, AsianFontMapper.ChineseSimplifiedEncoding_H, BaseFont.NOT_EMBEDDED);
Font fontbold = new Font(bfComic, 8);
BaseFont bfComic = BaseFont.createFont("C:\\Windows\\Fonts\\cour.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font fontbold = new Font(bfComic, 8);
有人能幫助我嗎?
增加的問題,這是我目前的測試代碼:
while(null != (line = reader.readLine())) {
document.open();
FontSelector selector = new FontSelector();
/*FontFactory.getFont("MSung-Light","UniCNS-UCS2-H", BaseFont.NOT_EMBEDDED);*/
Font f2 = FontFactory.getFont(AsianFontMapper.ChineseSimplifiedFont, AsianFontMapper.ChineseTraditionalEncoding_H, BaseFont.NOT_EMBEDDED);
f2.setColor(BaseColor.RED);
selector.addFont(f2);
Phrase ph = selector.process(line);
document.add(new Paragraph(ph));
BaseFont bfComic = BaseFont.createFont("C:\\Windows\\Fonts\\arialuni.ttf", BaseFont.IDENTITY_V, BaseFont.EMBEDDED);
Font fontbold = new Font(bfComic, 8);
Paragraph p = new Paragraph(line, fontbold);
document.add(p);
// step 5: we close the document
}
我目前的工作中,我們有很多的官僚機構增加新的API,是有另一種解決方案?不需要添加itext-asian? –
你認爲你正在添加一個新的API是錯誤的。如果你打開itext-asian.jar,你會發現它包含指標文件(數據),而不是可執行代碼。另外:如果你的工作環境是官僚主義,你的公司可能已經購買了使用iText的商業許可證。如果是這樣,他們已經接受了所有iText相關的罐子。 –
至於你的問題:如果你的具體要求是使用CJK字體(未嵌入並需要字體包的字體),那麼你需要itext-asian.jar中的度量。如果您的要求是創建中文文本,那麼您有其他選擇。這些在我的書中描述。如果您沒有該書的副本,請參閱第11章的示例:http://itextpdf.com/book/chapter.php?id=11(例如:您可以使用arialuni.ttf作爲一個包含告訴iText如何**嵌入中文字形的信息的字體。) –