【问题标题】:Get rid of blurred chart when saving it to a pdf将图表保存为 pdf 时消除模糊图表
【发布时间】:2019-02-03 15:18:27
【问题描述】:

所以我在网上找到了一个如何将 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,则图表“消失”: 如果我缩小到 75% 或放大到 125%,图表看起来很模糊:

现在我的问题是,是否有某种方法可以使 pdf 中的图表看起来更清晰,因为在程序中图表看起来很正常(不模糊,看起来很清晰)?

【问题讨论】:

  • 你没有放完整的代码......很可能,答案是让原始图表更大,然后再扩大规模。完美的解决方案是使用矢量图形,这当然需要更多的工作。
  • @TilmanHausherr 我在上面添加了图表代码。我在哪里可以设置大小/比例?
  • 最简单的方法是将pdImageXObject.getWidth() , pdImageXObject.getHeight()除以一个数字。
  • 重新调整原始图像的大小,我不知道如何增加那个。我以为这与场景有关,但事实并非如此。也许snapshot中的一些参数。
  • @TilmanHausherr hmm.maybe 。当我划分图像对象的宽度和长度并放大到 100% 时,图表并没有消失,但看起来还是有点模糊

标签: java image javafx pdfbox blurry


【解决方案1】:

通过在 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);

【讨论】:

  • 它工作得更好一点。现在,如果我有正常的缩放(100%),它看起来有点模糊,但好的部分是,如果放大得更多,它会变得更清晰/更少模糊。我必须更改哪个参数才能默认缩放看起来越来越清晰
  • 在 4 个位置增加“5”。我无法测试自己,因为您的代码不起作用。缺少 xAxis、yAxis、sc 和 producer 的声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多