2016-05-02 6 views
2

Ich versuche, ein PDF in A4-Format zu drucken, aber die Ausgabe variiert von der erwarteten.Java-Druck: falsche Papiergröße

das ist, was es wie

sieht

enter image description here

aber es sollte wie diese

enter image description here

beiden Bilder sind gleiche Auflösung

Dies ist der Code sein, erzeugt diese Ausgabe.

PrinterJob pj = PrinterJob.getPrinterJob(); 
pj.setPrintService(service); 
PageFormat pf = new PageFormat(); 
Paper paper = new Paper(); 
paper.setSize(595, 842); // a4 in px 
paper.setImageableArea(0, 0, 595, 842); 
pf.setPaper(paper); 

Book book = new Book(); 
book.append(pages, pf, pdfFile.getNumPages()); 
pj.setPageable(book); 

pj.print(); 

im Grunde ist es nur geschrumpft. Was soll ich tun, um das zu beheben?

und übrigens, ich benutze keinen echten Drucker. Ich benutze eine virtual printer, die eine Druckanforderung nimmt und eine PDF ausgibt.

+0

Haben Sie den Code, der die Tabelle generiert, weil ich mit diesem Teil des Codes nichts falsch sehe. – namlik

+0

meine Anwendung kann das pdf sowohl drucken als auch speichern. das korrekte Bild (2. Bild) wurde durch Speichern des Bildes (natürlich A4) erzeugt. und das falsche (1. Bild) ist das gleiche, aber GEDRUCKT. also ich denke, es ist nichts falsch mit der Tabelle Zeichnungscode. – bazi

Antwort

0

Ich habe eine Lösung gefunden. Ich habe javax.print statt java.awt.print benutzt.

File file = new File("path/to/pdf"); 
DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF; 
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); 
attr.add(MediaSizeName.ISO_A4); 
FileInputStream fis = new FileInputStream(file); 
Doc doc = new SimpleDoc(fis, flavor, null); 
DocPrintJob job = printService.createPrintJob(); 
job.print(doc, attr); 
fis.close(); 

jetzt wird es richtig gedruckt.