如何在使用RTL语言时打印javafx节点

时间:2016-05-08 12:19:24

标签: javafx printing orientation direction persian

我正在开发一个支持Persian language的JavaFX应用程序。有些人可能知道波斯语中的字母是从右到左书写的,就像希伯来语或阿拉伯语一样。使用NodeOrientation在窗口上以正确的顺序放置波斯语内容相当容易,但是当我尝试打印JavaFX节点时出现问题,结果打印的纸张被颠倒了。我尝试通过向窗口显示内容但在打印介质上显示错误时向您显示内容来解释问题。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

好的,我发现了一个令人讨厌的解决方法,我试图解释一下:

val pj = PrinterJob.createPrinterJob()
val pl = pj.printer.createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.HARDWARE_MINIMUM)
pj.jobSettings.pageLayout = pl
if(pj.showPrintDialog(stage)) {
    val rotate = Transform.rotate(90.0, documentRoot.width/2, documentRoot.height/2)
    val affine = Transform.affine(0.0, 1.0, 1.0, 0.0, 0.0, 0.0)
    documentRoot.transforms.add(rotate)
    documentRoot.transforms.add(affine)
    pj.printPage(documentRoot)
    pj.endJob()
    stage.hide()
  }

诀窍是你可以旋转flay上的节点并在节点上应用仿射函数以使其处于崇敬模式并将其提交给打印机,反转节点的反转形式是正确的