как распечатать узел javafx при использовании языков RTL

Я разрабатываю приложение JavaFX, поддерживающее персидский язык. Как некоторые из вас, возможно, знают, буквы в персидском языке пишутся справа налево, как в иврите или арабском языке. Используя NodeOrientation, довольно легко размещать персидский контент в правильном порядке в окне, НО возникает проблема, когда я пытаюсь распечатать узел JavaFX, в результате печатная бумага переворачивается. Я пытаюсь объяснить проблему, показывая вам содержимое, когда оно правильно отображается в окне, но неправильно на печатном носителе.

введите здесь описание изображения введите здесь описание изображения


person sepisoad    schedule 08.05.2016    source источник


Ответы (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()
  }

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

person sepisoad    schedule 08.05.2016