我正在尝试使用 JFreechart-FreeHEP 矢量图形-apache poi XSLF 将时间序列 XY 折线图导出到 pptx 文档中。我遵循的逻辑如下
- 使用 jfreechart 创建图表
- 使用 freehep api 将图表导出为 emf 图像
- 使用 apache poi XSLF lib 将此图像添加到 pptx 幻灯片。
问题在于在 EMF 图像中呈现线条的方式。请看下图。渲染的线条并不完全笔直,它们有点曲折。水平线呈现直线,但垂直线不呈现为直线,它们就像 -> /\/\/\/\/\/\/\/\/\ 。感谢任何关于将线条呈现为直线的建议。
此问题仅适用于 EMF 格式,我尝试了相同的 PNG、JPG 格式,并且线条呈现为直线。我使用 EMF 的原因是,在导出为 pptx 后,其他图片格式(JPEG/PNG/TIF/BMP)似乎失去了它们的质量——清晰度和亮度。
我使用的代码如下
chart = createChart(createDataset());
ChartPanel panel = new ChartPanel(chart);
EMFGraphics2D emffile = new EMFGraphics2D(new File(
"C:\\Users\\out\\chart.emf"),
new Dimension(1500, 600));
emffile.setDeviceIndependent(true);
emffile.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
emffile.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
RenderingHints.VALUE_STROKE_NORMALIZE);
emffile.startExport();
chart.draw((Graphics2D) emffile.create(), new Rectangle(1500, 600));
emffile.endExport();
emffile.closeStream();
XMLSlideShow pptx = new XMLSlideShow();
XSLFSlide slide = pptx.createSlide();
byte[] pptxpic = IOUtils.toByteArray(new FileInputStream(
"C:\\Users\\out\\chart.emf"));
int idx = pptx.addPicture(pptxpic, XSLFPictureData.PICTURE_TYPE_EMF);
XSLFPictureShape pic = slide.createPicture(idx);
pic.setAnchor(new java.awt.Rectangle(0, 25, 720, 500));
pptx.write(new FileOutputStream(
"C:\\Users\\out\\poitest002.pptx"));