java - 如何在 java fx 中显示打印对话框并打印文档(不仅仅是节点)

标签 java printing javafx javafx-8

我正在尝试在 java fx 中打印生成的 pdf 文件,但我看到的所有示例都是用于打印 java fx 节点的。我本可以使用普通的打印 api,但它显示的打印对话框是基于 swing 的,在行为和外观上就像一个完全不同的应用程序,这可能会使用户感到困惑。

我想在打印前显示一个对话框,以便用户可以选择他们喜欢的打印机,并在可能的情况下更改页面设置。根据the open jdk wiki这在 Java 8 中是预期的

1) PrinterJob - the class that controls the printing process and provides support for
* print and page setup dialogs which will be the platform native dialog at least on Windows and Mac OS X.

the related jira issue被标记为固定的

但是这个 PrinterJob 类和 javafx 打印包有两个问题(据我所知):

  1. 它只打印节点。
  2. 没有明确的方式显示用户选择打印属性的对话框

那么如何在java fx中提供一个打印对话框来帮助用户打印pdf文档呢?

PS:我在桌面环境(Windows 7 64 位)中使用 Java 8 update 20

感谢任何指点。

最佳答案

如果您使用 Java8,则只能打印节点(据我所知)。 但是您可以创建一个 ImageView 来呈现可以打印的图像。 如果您想打印 pdf,请查看 https://www.idrsolutions.com/javafx-pdf-viewer或任何其他 javafx PDF 查看器。

您可以在节点(PDF 查看器)中呈现 pdf 并打印它。

但是如果你想要一个打印对话框,我认为你必须自己构建。

但这并不难。

您可以使用打印机类提供的所有信息,例如:

    ObservableList<PaperSource> paperSources = FXCollections.observableArrayList();
    paperSources.add(PaperSource.AUTOMATIC);
    paperSources.add(PaperSource.BOTTOM);
    ...

    PrintQuality.values()
    PrintSides.values() 
    ...

关于java - 如何在 java fx 中显示打印对话框并打印文档(不仅仅是节点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384442/

相关文章:

java - 使用 Jackson 进行反序列化

javascript - 打印出 html5 Canvas 的部分

c - 为什么我的链表打印倒着?

Javafx Listview 添加和编辑元素

java - 如何在同一场景中使用另一个 Controller 类加载新的 FXML

java - Java 9 中的 JFrame 缩放

java - 将链接合并为一个

java - 有没有办法从终端启动本地 Java IBM Liberty 服务器?

html - 为什么 Web Print 不断向左移动图像?

java - 如何更改表格 View 上的边框线颜色