您的位置:首页 > 其它

PdfWriter PdfContentByte Graphics2D 导出PDF中文乱码问题解决方案

2016-09-11 11:53 681 查看
JFreeChart1.0.1和iText集成时,中文字符出现乱码的解决方法

环境:JFreeChart 1.0.1、iText1.3

JFreeChart1.0.1中的Plot接口没有提供SetValueLabelFont的方法,无法直接设置label的字体,郁闷啊!

不过还好试了一下午总算弄出来了,具体代码如下:

PdfWriter writer;
writer = PdfWriter.getInstance(document, new FileOutputStream(
filename));
document.open();
PdfContentByte cb = writer.getDirectContent();
PdfTemplate tp = cb.createTemplate(width,
height);

// 关键是使用AsianFontMapper替代DefaultFontMapper
AsianFontMapper mapper = new AsianFontMapper("STSong-Light","UniGB-UCS2-H");
Graphics2D
g2d = tp.createGraphics(width, height,
mapper);
Rectangle2D r2d = new Rectangle2D.Double(0, 0,
width, height);
chart.draw(g2d, r2d);
g2d.dispose();
cb.addTemplate(tp, 0, 0);
记住别忘了添加iTextAisan.jar不然会报如下错误:下载地址:http://download.csdn.net/detail/itxiaohei323/9627537

com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)

at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)

at com.lowagie.text.pdf.AsianFontMapper.awtToPdf(Unknown Source)

at com.lowagie.text.pdf.PdfGraphics2D.getCachedBaseFont(Unknown Source)

at com.lowagie.text.pdf.PdfGraphics2D.setFont(Unknown Source)

at com.lowagie.text.pdf.PdfGraphics2D.(Unknown Source)

at com.lowagie.text.pdf.PdfContentByte.createGraphics(Unknown Source)

at JFreeChartExample.convertToPdf(JFreeChartExample.java:94)

at JFreeChartExample.main(JFreeChartExample.java:63)

com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)

at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)

at com.lowagie.text.pdf.AsianFontMapper.awtToPdf(Unknown Source)

at com.lowagie.text.pdf.PdfGraphics2D.getCachedBaseFont(Unknown Source)

at com.lowagie.text.pdf.PdfGraphics2D.setFont(Unknown Source)

at org.jfree.chart.title.TextTitle.arrangeRR(TextTitle.java:488)

at org.jfree.chart.title.TextTitle.arrange(TextTitle.java:450)

at org.jfree.chart.JFreeChart.drawTitle(JFreeChart.java:1125)

at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1015)

at org.jfree.chart.JFreeChart.draw(JFreeChart.java:925)

at JFreeChartExample.convertToPdf(JFreeChartExample.java:97)

at JFreeChartExample.main(JFreeChartExample.java:63)

Exception in thread "main" java.lang.NullPointerException

at com.lowagie.text.pdf.PdfWriter.addSimple(Unknown Source)

at com.lowagie.text.pdf.PdfContentByte.setFontAndSize(Unknown Source)

at com.lowagie.text.pdf.PdfGraphics2D.drawString(Unknown Source)

at org.jfree.text.TextUtilities.drawRotatedString(TextUtilities.java:566)

at org.jfree.text.TextUtilities.drawRotatedString(TextUtilities.java:600)

at org.jfree.text.TextFragment.draw(TextFragment.java:212)

at org.jfree.text.TextLine.draw(TextLine.java:174)

at org.jfree.text.TextBlock.draw(TextBlock.java:269)

at org.jfree.text.TextBlock.draw(TextBlock.java:231)

at org.jfree.chart.title.TextTitle.drawHorizontal(TextTitle.java:628)

at org.jfree.chart.title.TextTitle.draw(TextTitle.java:569)

at org.jfree.chart.JFreeChart.drawTitle(JFreeChart.java:1128)

at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1015)

at org.jfree.chart.JFreeChart.draw(JFreeChart.java:925)

at JFreeChartExample.convertToPdf(JFreeChartExample.java:97)

at JFreeChartExample.main(JFreeChartExample.java:63)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息