Я хочу напечатать узлы с их содержимым (ImageView
, Label
, VBox
и т. Д.) На термопринтере.
У меня уже есть готовые узлы, и они настроены на размер бумаги 80 мм.
Проблема в том, что, когда я пытаюсь создать нестандартный размер бумаги, соответствующий размеру бумаги 80 мм моего термопринтера, я смещаю все содержимое вправо.
Однако это происходит только тогда, когда я меняю height
бумаги.
Это мой печатный код
public void printImage(Node node) {
PrinterJob job = PrinterJob.createPrinterJob();
Paper paper = PrintHelper.createPaper("Roll80", 80, 270, Units.MM);
PageLayout pageLayout = job.getPrinter().createPageLayout(paper, PageOrientation.PORTRAIT, 0, 0, 0, 0);
double scale = 0.791;
node.getTransforms().add(new Scale(scale, scale));
if (job != null) {
boolean success = printerJob.printPage(pageLayout, node);
if (success) {
job.endJob();
System.exit(0);
}
}
}
ٌ Результаты, если я установил высоту бумаги меньше 310 или больше 340
Пример: Paper paper = PrintHelper.createPaper("Roll80", 80, 270, Units.MM);
results1
ٌ Результаты, если я установил высоту бумаги 310 или 340 или более 560
Пример: Paper paper = PrintHelper.createPaper("Roll80", 80, 590, Units.MM);
results2 * Img гораздо сложнее, чем захваченный.
Примечание:
Когда я настраиваю ширину более 100, я все равно могу без проблем получить высоту менее 230, но все же я хочу, чтобы ширина моей страницы была 80 мм, а высота равнялась высоте моей квитанции (узлы).
Метод PrintHelper:
package com.sun.javafx.print;
import javafx.print.JobSettings;
import javafx.print.Paper;
import javafx.print.PaperSource;
import javafx.print.PrintResolution;
import javafx.print.Printer;
/**
* An internal class which provides a way for implementation code to
* access to package level protected constructors (etc).
* All entry points to the printing API need to ensure this class is
* loaded and initialized.
*/
public class PrintHelper {
private static PrintAccessor printAccessor;
static {
forceInit(Printer.class);
}
private PrintHelper() {
}
public static PrintResolution createPrintResolution(int fr, int cfr) {
return printAccessor.createPrintResolution(fr, cfr);
}
public static Paper createPaper(String paperName,
double paperWidth,
double paperHeight,
Units units) {
return printAccessor.createPaper(paperName, paperWidth, paperHeight, units);
}
public static PaperSource createPaperSource(String name) {
return printAccessor.createPaperSource(name);
}
public static JobSettings createJobSettings(Printer printer) {
return printAccessor.createJobSettings(printer);
}
public static Printer createPrinter(PrinterImpl impl) {
return printAccessor.createPrinter(impl);
}
public static PrinterImpl getPrinterImpl(Printer printer) {
return printAccessor.getPrinterImpl(printer);
}
public static void setPrintAccessor(final PrintAccessor newAccessor) {
if (printAccessor != null) {
throw new IllegalStateException();
}
printAccessor = newAccessor;
}
public interface PrintAccessor {
PrintResolution createPrintResolution(int fr, int cfr);
Paper createPaper(String paperName,
double paperWidth,
double paperHeight,
Units units);
PaperSource createPaperSource(String name);
JobSettings createJobSettings(Printer printer);
Printer createPrinter(PrinterImpl impl);
PrinterImpl getPrinterImpl(Printer printer);
}
private static void forceInit(final Class<?> classToInit) {
try {
Class.forName(classToInit.getName(), true,
classToInit.getClassLoader());
} catch (final ClassNotFoundException e) {
throw new AssertionError(e); // Can't happen
}
}
}