Избавьтесь от размытой диаграммы при сохранении в PDF - PullRequest
0 голосов
/ 29 августа 2018

Итак, я нашел в интернете пример того, как сохранить диаграмму javafx в формате pdf, и попробовал:

final AreaChart<Number, Number> arechart = new AreaChart<>(new NumberAxis(0, 3, 0.5), new NumberAxis(0, 3, 0.5));
xAxis.setLabel("average quality");
yAxis.setLabel("average quantity");
sc.setTitle("Producerdata");

XYChart.Series series1 = new XYChart.Series();
series1.setName("Water 11");

producer.getProducts().forEach((pr) -> {
    if (pr.getName().equals("Water 11")) {
        series1.getData().add(new XYChart.Data(pr.getPercentQual(), pr.getAmount()));
    }
});

XYChart.Series series2 = new XYChart.Series();
series2.setName("Water E40");
producer.getProducts().forEach((pr) -> {
    if (pr.getName().equals("Water E40")) {
        series2.getData().add(new XYChart.Data(pr.getPercentQual(), pr.getAmount()));
    }
});
arechart.getData().addAll(series1, series2);
PDDocument newPDF=new PDDocument();
PDPage chartPage = new PDPage();
newPDF.addPage(chartPage);
WritableImage image = arechart.snapshot(new SnapshotParameters(), null);
BufferedImage bf= SwingFXUtils.fromFXImage(image, null);
PDImageXObject pdImageXObject = LosslessFactory.createFromImage(newPDF, bf);
PDPageContentStream contentStream = new PDPageContentStream(newPDF, chartPage);
contentStream.drawImage(pdImageXObject, 150, 500, pdImageXObject.getWidth()  , pdImageXObject.getHeight() );
contentStream.close();
newPDF.close();
newPDF.save(new File("C:\\Users\\chelsfan\\Desktop\\TestingNetbeans\\PDFS\\chart.pdf"));

Теперь проблема, с которой я сталкиваюсь, заключается в том, что когда я сохраняю диаграмму площади javafx в формате pdf, диаграмма выглядит немного размытой.

Например:

Если я увеличу масштаб на 100% до pdf, диаграмма "исчезнет": enter image description here Если я уменьшу до 75% или увеличу до 125%, диаграмма будет размытой:

enter image description here enter image description here Теперь мой вопрос: есть ли способ сделать диаграмму в PDF более четкой, потому что в программе диаграмма выглядит нормально (не размыто, выглядит резко)?

1 Ответ

0 голосов
/ 29 августа 2018

Создайте увеличенное изображение, применив масштабное преобразование в JavaFX:

SnapshotParameters sp = new SnapshotParameters();
Transform transform = Transform.scale(5, 5); // increase for larger image
sp.setTransform(transform);
WritableImage image = arechart.snapshot(sp, null);
BufferedImage bf= SwingFXUtils.fromFXImage(image, null);
ImageIO.write(bf, "png", new File("JavaFXTest.png")); // remove this line in production, this is just for you to see that the image is larger but not blurry

позже при создании обратного масштаба PDF, чтобы он выглядел меньше:

contentStream.drawImage(pdImageXObject, 150, 500, pdImageXObject.getWidth() / 5, pdImageXObject.getHeight() / 5);
...