将图表保存为 pdf 时消除模糊图表

2024-01-06

所以我在网上找到了一个如何将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 时,图表看起来有点模糊。

For e.g:

If I zoom 100% to the pdf the diagramm "dissapears": enter image description here If I zoom out to 75% percent or zoom in to 125% the diagramm looks blurry:

enter image description here enter image description here Now my question is, if there is some way to make the chart in the pdf looking sharper, because in the programm the chart looks normal (not blurry,looks sharp)?


通过在 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将图表保存为 pdf 时消除模糊图表 的相关文章

随机推荐

  • Django Select Option选择问题

    我尝试按照 stackoverflow 上的一些示例来获取在选择列表中选择的选项 但仍然无法使其工作 这是我的代码片段
  • C++内存对齐问题

    一行代码胜过一千个字 这是我的问题 Platform specific 16 byte alignment macro switch On Visual C it would substitute declspec align 16 On
  • “if”语句在 Debian Linux 上不起作用

    我有一个 bash 脚本 其中包含以下 if 语句 问题是我无法让它在 Debian 上运行 它在 Fedora 和 CentOS 上运行良好 if 1 daily lt line 116 then countDaily elif 1 mo
  • Qt - 使用 lambda 将槽与参数连接

    我有几个小部件将连接到需要额外参数的单个函数 我发现我可以使用 lambda 函数来向函数传递一些参数 问题是参数在循环中被替换 而 lambda 函数仅传递最后一组参数 这是我得到的 自我小部件是一个字典 其中包含一组按钮的按键 为了简短
  • 如何将充满 UNIX 时间字符串的文件转换为人类可读的日期?

    我正在处理一个充满 unix 时间字符串的文件 我想将它们全部转换为人类可读的 该文件看起来像这样 1153335401 1153448586 1153476729 1153494310 1153603662 1153640211 这是脚本
  • 存在部分移动错误的结构

    我有一个简单的结构和它的两个实例 如下所示 derive Debug struct User first String last String age u32 let u1 User first String from John last
  • 在 Java 中为 Kotlin 编译器注释类型参数

    在Java中 我有以下方法 public Optional
  • 返回 False 在 jQuery.ajax 中不起作用

    P S 阅读 2019 06 29 编辑 我有一个用于更新用户信息的网络表单 当他更新电子邮件时 将通过以下方式执行验证ajax 这样 如果新的电子邮件地址已被其他用户使用 他就会收到警告 我试图在使用电子邮件时取消表单提交 但是retur
  • 自动生成 F# 签名文件 (.fsi)

    我正在开发一个项目 该项目有许多我想对其应用访问控制约束的模块 我还想让我的项目包含有关每个函数的类型签名的附加文档 我知道通过 F 签名文件可以非常轻松地完成这两项任务 但是 我的项目很大并且包含很多文件 我需要一种方便的方法为每个文件生
  • SQL Server SQL 语句可以有多少个字符长?

    SQL Server 中 SQL 语句的最大长度是多少 这个长度是否取决于 SQL Server 的版本 例如 在 DECLARE SQLStatement NVARCHAR MAX N Something EXEC SQLStatemen
  • cordova edit-config 不更新 AndroidManifest.xml

    我正在尝试更新AndroidManifest xml在 config xml 文件中包含以下内容
  • `string.replace` 不会更改变量[重复]

    这个问题在这里已经有答案了 var variableABC A B C variableABC replace B D Wanted output A D C but variableABC没有改变 console log variable
  • Docker 如何运行具有不同内核的发行版?

    docker 如何在 Debian 主机或者容器中的 OpenSUSE 上运行 它使用不同的内核 具有独立的模块 此外 较旧的 Debian 版本也使用较旧的内核 那么如何在内核版本 3 10 上运行它呢 较旧的内核仅具有较旧的内置功能 旧
  • 调用 [super viewWillAppear] [super viewDidLoad] 等的正确顺序是什么?

    当提供一个实现时viewWillAppear viewDidLoad viewDidAppear loadView etc 应该在执行自定义操作之前还是之后调用超类相应的方法 如果按错误的顺序执行可能会产生哪些后果 i e 应该是 void
  • 从本地开发计算机使用 AWS DynamoDB DAX

    我正在为当前使用 DynamoDB 的应用程序尝试 DAX 客户端 发现它仅在 VPC 内受支持 DAX 端点位于 172 31 x y 范围内 这是否意味着无法从本地开发计算机测试 DAX 功能 或者是否可以将 DAX 配置为可通过 In
  • Heroku 应用程序到底托管在哪里?

    Through https devcenter heroku com articles regions https devcenter heroku com articles regions我看到对于heroku公共运行时空间heroku有
  • 为什么 Java 中的引用赋值是原子的?

    据我所知 引用分配在 64 位 JVM 中是原子的 现在 我假设 jvm 内部不使用原子指针来对此进行建模 因为否则就不需要原子引用 所以我的问题是 java Scala 的 规范 中的原子引用分配是否保证会发生 或者大多数时候都是这样 这
  • 使用 OpenXML 和 C# 在 Excel 文档中设置文本居中对齐

    我的 asp net 页面正在创建一个文档 我需要将某些列的文本居中对齐 我在 openXML SDK 中手动居中列后打开了文档 但反映的代码没有达到预期的结果 这就是我设置这些列的自定义宽度的方式 我想向此函数 方法 whatevs 添加
  • 为什么 R 中内置的 lm 函数这么慢?

    我一直以为lm函数在 R 中非常快 但正如本例所示 使用以下函数计算封闭解solve功能更快 data lt data frame y rnorm 1000 x1 rnorm 1000 x2 rnorm 1000 X cbind 1 dat
  • 将图表保存为 pdf 时消除模糊图表

    所以我在网上找到了一个如何将javafx图表保存为pdf的例子 所以我尝试了一下 final AreaChart