JFreechart-FreeHEP vector graphics-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"));