Мне удается напечатать PDF-файл, но он получается неправильно: напечатанная страница меньше (она занимает половину бумаги формата А4), и каждый символ документа немного квадратный, как неизвестная буква .
Я пытался изменить размер бумаги с помощью paper.setSize (x, y), setImageableArea и MediaSizeName, но когда я это делаю, мой принтер выдает ошибку и перестает работать (с красным светодиодом).
public static void printPdf3 (String filePath, String jobName) throws IOException, PrinterException {
FileInputStream fileInputStream = new FileInputStream(filePath);
byte[] pdfContent = new byte[fileInputStream.available()];
fileInputStream.read(pdfContent, 0, fileInputStream.available());
ByteBuffer buffer = ByteBuffer.wrap(pdfContent);
final PDFFile pdfFile = new PDFFile(buffer);
PDFPrintPage pages = new PDFPrintPage(pdfFile);
PrinterJob printJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = PrinterJob.getPrinterJob().defaultPage();
pageFormat.setOrientation(PageFormat.PORTRAIT);
printJob.setJobName(jobName);
Book book = new Book();
book.append(pages, pageFormat, pdfFile.getNumPages());
printJob.setPageable(book);
Paper paper = new Paper();
paper.setSize(210,297); //A4
paper.setImageableArea(0, 0, paper.getWidth()-20, paper.getHeight()-20);
System.out.println(paper.getHeight());
System.out.println(paper.getWidth());
pageFormat.setPaper(paper);
AttributeSet aset = new HashAttributeSet();
aset.add(new PrinterName("\\\\ber-ser-2\\Laser CED", null));
PrintService[] pservices = PrintServiceLookup.lookupPrintServices(null, aset);
PrintRequestAttributeSet attr_set = new HashPrintRequestAttributeSet();
attr_set.add(MediaSizeName.ISO_A4);
printJob.print(attr_set);
fileInputStream.close();
}
Я ожидаю, что мой файл будет напечатан в формате А4 правильным образом (разумеется, с возможностью чтения всех символов) и в портретном режиме.