iText如何嵌入JFreeChart用于图表标题和标签的字体?

时间:2013-07-16 03:39:33

标签: pdf itext jfreechart

我正在使用带有iText和JFreeChart的Linux机器。我注意到嵌入图表后,Helvetica字体(未嵌入)现在出现在PDF文件中。这是我正在使用的代码:

import com.itextpdf.text.Font;

// create chart using JFreeChart
final XYPlot plot = jchart.getXYPlot();
final LogAxis xAxis = new LogAxis("x axis");
final NumberAxis yAxis = new NumberAxis("y axis");
...
java.awt.Font cFont = new java.awt.Font("/home/fonts/jigsaw.otf",java.awt.Font.PLAIN,10);
xAxis.setLabelFont(cFont);  // set axis label font
...

// add chart to PDF
PdfTemplate chart = canvas.createTemplate(chartWidth, chartHeight);  
Graphics2D  g2d1 = new PdfGraphics2D(chart, chartWidth, chartHeight);
Rectangle2D r2d1 = new Rectangle2D.Double(0,0,chartWidth,chartHeight);
jchart.draw(g2d1, r2d1); 
g2d1.dispose();
canvas.addTemplate(chart,document.left(),100);

虽然使用的字体大小为10(源自cFont),但在创建的PDF中未观察到字体jigsaw.otf(并且更改此值会控制在此处替换的Helvetica字体大小)。

我的最终目标是嵌入所有字体。这意味着要么(1)嵌入jigsaw.otf以使Helvetica看起来不嵌入,或者(2)嵌入Helvetica并忘记使用jigsaw.oft。两者都可以接受,只要我可以控制JFreeChart图表中使用的字体大小。

怎么做(最简单的方法)?

iText第2版14.5.2“将文本绘制到PdfGraphics2d”中有一节,但我相信这是在现有图形中添加文本,而不是将JFreeChart使用的文本嵌入其图表中。如我错了请纠正我。相当困惑。希望有人可以提供一个简单的例子。

1 个答案:

答案 0 :(得分:2)

在iText的第二版第二版中找到了我自己的问题的答案,列出了14.20“Text2ToPdf1.java”。

要注意的一个问题是使用Font类用于java的AWT与iText - 它们都共享相同的Font类名,因此请务必将它们组织在您的代码中(例如链接的{ {1}} Font {1}} import java.awt.Font;点{1}}。{1}}我在下面的代码中包含了路径com.itextpdf.text.Font以避免混淆:

java.awt.Font

这样,字体始终嵌入到所有JFreeChart对象的最终PDF中。

感谢布鲁诺写的一本好书! http://itextpdf.com/examples/iia.php?id=254