上标不能正确显示在pdf上由itext创建的图像上

时间:2013-03-28 23:21:10

标签: unicode awt itext jfreechart graphics2d

我在pdf中生成的饼图中有一个关于unicode支持的非常令人困惑的问题。 这是我有的: 我正在生成饼图(使用jfreechart库),需要在饼图的标题上添加上标。 我测试过,我知道jfreechart正在生成正确的标题(上标很好),我也测试了itext unicode支持。 有一个Graphics2D(来自java awt)之间将jfreechart变成模板然后我可以将这个模板打印到我的pdf中。 根据我的测试,我猜问题应该在graphics2d和itext模板之间。

PdfContentByte canvas = writer.getDirectContent();

PdfTemplate template = canvas.createTemplate(width, height);

FontMapper mapper = new DefaultFontMapper();

template.setFontAndSize(mapper.awtToPdf(new java.awt.Font("Arial Unicode MS", java.awt.Font.PLAIN, 7)) , 7);

Graphics2D graphics2d = template.createGraphics(width, height);

graphics2d.setFont(new java.awt.Font("Arial Unicode MS", java.awt.Font.PLAIN, 7));

JFreeChart chart = getPieChart("", title, value);


我发现了问题。 问题是模板(PdfTemplate)不显示unicode字符。虽然我嵌入了unicode字体并将其设置为模板,但仍无效。 任何想法?

1 个答案:

答案 0 :(得分:1)

实际上我最终通过从饼图中删除上标并将其直接打印到模板中来解决问题。这也消除了使用unicode字体(这需要额外的钱):

template.beginText();

template.setFontAndSize(arial, 8);

// the fixed position of the xy coordinate that I want to print superscript template.moveText(97, 142);

template.showText(superscript);

template.setTextRise(5f);

template.endText();