我是一名学生,需要创建一个 silten 打印功能,希望能够打印 PDF。这个需要基于Java。
我在 Google 上搜索并找到了一个无需对话框即可打印的代码。
但如果源是 .txt
文件,它就会正确打印。
如果我尝试使用此功能打印 PDF 文件,我会打印出非常奇怪的字符。
现在我想问一下为什么会发生这种情况,有没有办法解决它。
package org.pack.mypack.jsf;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.Size2DSyntax;
import javax.print.attribute.standard.MediaSize;
public class PrintJob {
public static void main(String[] args) {
PrintJob print = new PrintJob();
}
public PrintJob() {
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
FileInputStream psStream = null;
PrintRequestAttributeSet aset = null;
aset = new HashPrintRequestAttributeSet();
aset.add(MediaSize.findMedia(2, 2, Size2DSyntax.INCH));
try {
psStream = new FileInputStream("C:\\Users\\myUser\\test\\test.pdf");
} catch (FileNotFoundException ffne) {
ffne.printStackTrace();
}
if (psStream == null) {
return;
}
if (services.length > 0) {
PrintService myService = null;
for (PrintService service : services) {
System.out.println(service.getName());
if (service.getName().contains("PrinterName")) {
myService = service;
break;
}
}
DocPrintJob printJob = myService.createPrintJob();
Doc document = new SimpleDoc(psStream, flavor, null);
try {
printJob.print(document, aset);
} catch (PrintException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("No PDF printer available.");
}
}
}
最佳答案
我之前的工作中已经做过类似的事情,我可以确保在不使用库的情况下这是一场小噩梦(并且我希望您的 PDF 在不知道密码的情况下不受密码保护)。
我使用了Apache PDFBox library .
网上有很多关于如何在静默模式下使用它的示例
关于Java静默PDF(标签)打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34744727/