2014-02-01 3 views
0

Я пытаюсь экспортировать линейку строк XY для таймсеров в документ pptx с использованием векторной графики JFreechart-FreeHEP-apache poi XSLF. Логика я следую, как показано нижеЭкспортировать jfreechart в pptx как изображение EMF - рендеринг строки неправильный

  • использование JFreeChart создать диаграмму
  • экспорта диаграмму как э.д.с. изображения с помощью freehep апите
  • добавить это изображение в PPTX слайд с помощью Apache POI XSLF LIB.

Проблема заключается в способе визуализации линий в изображении EMF. см. изображение ниже. Выстроенные линии не совсем прямые, они выглядят как зигзагообразные. Горизонтальные линии оказываются прямыми, но вертикальные линии не отображаются как прямые, они похожи на ->/\/\/\/\/\/\/\/\/\. Оцените любые предложения о том, чтобы линии отображались как прямые.

Эта проблема только в формате EMF, я пробовал то же самое с PNG, JPG-форматом, и линии отображаются как прямые. Причина, по которой я использую EMF, заключается в том, что после экспорта в pptx другие форматы изображений (JPEG/PNG/TIF/BMP), похоже, теряют качество - четкость и яркость.

Screen shot of EMF image

код я использую как ниже

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")); 
+0

Я не любил blury изображения при экспорте JFreeChart изображений в JasperReports тоже, так что я приспособил Graphics2D контекст из апача пои экспортировать в Powerpoint формы непосредственно. Я играл с FreeHep в начале, но также не понравился результат. Возможно, это помогает кому-то с той же проблемой: https://code.google.com/p/pptx-shape-exporter/ – kiwiwings

ответ

1

Fixed этот вопрос при сохранении файла в более высоком разрешении, а затем подрезать на более низкий при вставке в слайд. Диаграмма была сохранена как файл png, прежде чем вставлять ее в слайд.

byte[] pptxpic = null; 

ChartUtilities.saveChartAsPNG(pngfile, chart, 1000, 800); 

pptxpic = IOUtils.toByteArray(new FileInputStream(pngfile)); 

int idx = pptxTemplate.addPicture(pptxpic, 
       XSLFPictureData.PICTURE_TYPE_PNG); 
XSLFPictureShape pic = slidedips.createPicture(idx); 

pic.setAnchor(new java.awt.Rectangle(0, 60, 960, 630)); 
Смежные вопросы