Если содержимое PrinterJob
задается с помощью метода setPrintable
, то во время PrinterJob
работает некоторое оборудование внутри и модифицирует указанные PageFormat
, ...
Рабочий раствор #1 : используйте setPageable
и PDFPageable
, что делает печать с использованием формата страницы документа:
public void printPDF(byte[] pdf) throws IOException, PrinterException {
PDDocument document = PDDocument.load(pdf);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(new PDFPageable(document));
if (job.printDialog()) {
job.print();
}
}
Рабочий раствор # 2 : используйте setPageable
и Book
с возможностью просмотра.Book
печатает, используя указанный формат страницы:
public void printPDF(byte[] pdf) throws IOException, PrinterException {
PDDocument document = PDDocument.load(pdf);
MediaSize media = MediaSize.getMediaSizeForName(MediaSizeName.ISO_A4);
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(media.getMediaSizeName());
PrinterJob job = PrinterJob.getPrinterJob();
if (job.printDialog(attributes)) {
PageFormat pageFormat = (PageFormat) job.getPageFormat(attributes).clone();
Paper paper = pageFormat.getPaper();
paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
pageFormat.setPaper(paper);
PDFPrintable printable = new PDFPrintable(document, Scaling.ACTUAL_SIZE, false, 0, false);
Book book = new Book();
book.append(printable, pageFormat);
job.setPageable(book);
job.print(attributes);
}
}
Другие решения: Это мой собственный ответ на мой собственный вопрос.Ответ основан на нескольких часах работы / расследования, проведенных по этой проблеме, и, к счастью, нашел какое-то решение.
Если вы знаете, что происходит ниже, и можете предоставить более подробный ответ, объясняя, что на самом деле происходит и какровно PrinterJob
все работает, тогда я буду рад, и с радостью одобрю ваш более подробный ответ.