use*_*844 16 java printing java-print
尝试使用Java打印PDF文件时遇到问题.这是我的代码:
PdfReader readFtp = new PdfReader(); // This class is used for reading a PDF file
PDDocument document = readFtp.readFTPFile(documentID);
printRequestAttributeSet.add(new PageRanges(1, 10));
job.setPageable(document);
job.print(printRequestAttributeSet); // calling for print
document.close()
Run Code Online (Sandbox Code Playgroud)
我使用document.silentPrint(job);
和job.print(printRequestAttributeSet);
- 它工作正常.如果我使用document.silentPrint(job);
- 我无法设置PrintRequestAttributeSet
.
谁能告诉我如何设置PrintRequestAttributeSet?
Ren*_*Ren 25
我的打印机不支持原生PDF打印.
我使用开源库Apache PDFBox https://pdfbox.apache.org来打印PDF.打印本身仍然由Java的PrinterJob处理.
import java.awt.print.PrinterJob;
import java.io.File;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
public class PrintingExample {
public static void main(String args[]) throws Exception {
PDDocument document = PDDocument.load(new File("C:/temp/example.pdf"));
PrintService myPrintService = findPrintService("My Windows printer Name");
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(new PDFPageable(document));
job.setPrintService(myPrintService);
job.print();
}
private static PrintService findPrintService(String printerName) {
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
for (PrintService printService : printServices) {
if (printService.getName().trim().equals(printerName)) {
return printService;
}
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
Mir*_*ert 18
这对我来说可以用普通的JRE打印PDF:
public static void main(String[] args) throws PrintException, IOException {
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();
patts.add(Sides.DUPLEX);
PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);
if (ps.length == 0) {
throw new IllegalStateException("No Printer found");
}
System.out.println("Available printers: " + Arrays.asList(ps));
PrintService myService = null;
for (PrintService printService : ps) {
if (printService.getName().equals("Your printer name")) {
myService = printService;
break;
}
}
if (myService == null) {
throw new IllegalStateException("Printer not found");
}
FileInputStream fis = new FileInputStream("C:/Users/John Doe/Desktop/SamplePDF.pdf");
Doc pdfDoc = new SimpleDoc(fis, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
DocPrintJob printJob = myService.createPrintJob();
printJob.print(pdfDoc, new HashPrintRequestAttributeSet());
fis.close();
}
Run Code Online (Sandbox Code Playgroud)
试试这个代码:
\n\nFileInputStream fis = new FileInputStream(\xe2\x80\x9cC:/mypdf.pdf\xe2\x80\x9d);\nDoc pdfDoc = new SimpleDoc(fis, null, null);\nDocPrintJob printJob = printService.createPrintJob();\nprintJob.print(pdfDoc, new HashPrintRequestAttributeSet());\nfis.close();\n
Run Code Online (Sandbox Code Playgroud)\n\n您也可以按照以下步骤操作
\n