使用java在网络打印机中打印pdf
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/21255000/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Print pdf in network printer using java
提问by saharsh
Guys I am stuck in printing a pdf using java. The code that I have written is below:
伙计们,我一直在使用 java 打印 pdf。我写的代码如下:
`
`
public static void main(String[] args) throws PrinterException, PrintException, IOException{
DocFlavor docflavor = new DocFlavor.INPUT_STREAM ("application/octet-stream");
// DocFlavor docflavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
/* DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.;*/
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
DocFlavor[] docF = printService.getSupportedDocFlavors();
for(int i = 0; i<docF.length;i++){
System.out.println(docF[i]);
}
FileInputStream fis = new FileInputStream("pathofpdffile");
Doc pdfDoc = new SimpleDoc(fis, docflavor, null);
DocPrintJob printJob = printService.createPrintJob();
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1));
aset.add(Sides.ONE_SIDED);
printJob.print(pdfDoc,aset);
fis.close();
}`
}`
The above code intiate the printing activity but the problem is that I get only encode character in print. I am not able to get my exact file.
上面的代码启动了打印活动,但问题是我在打印中只得到了编码字符。我无法获得我的确切文件。
Second if I change the DocFlavor to SERVICE_FORMATTED.PAGEABLE ,it throws an error
其次,如果我将 DocFlavor 更改为 SERVICE_FORMATTED.PAGEABLE ,则会引发错误
java.lang.IllegalArgumentException: data is not of declared type
at javax.print.SimpleDoc.<init>(Unknown Source)
at com.calculator.main.PrintingTest.main(PrintingTest.java:42)
Third IF I change the DocFlavor to INPUT_STREAM.PDF, it throws as error
第三,如果我将 DocFlavor 更改为 INPUT_STREAM.PDF,它会抛出错误
`Exception in thread "main" sun.print.PrintJobFlavorException: invalid flavor
at sun.print.Win32PrintJob.print(Unknown Source)
at com.calculator.main.PrintingTest.main(PrintingTest.java:49)`
All this I am trying on a network printer. Any help would gr8..
所有这些我都在网络打印机上尝试。任何帮助都会gr8 ..
回答by Aaron Digulla
My first guess would be that new DocFlavor.INPUT_STREAM ("application/octet-stream")
isn't what you want.
我的第一个猜测是那new DocFlavor.INPUT_STREAM ("application/octet-stream")
不是你想要的。
You may want to try the code from this answer: https://stackoverflow.com/a/18962278/34088
您可能想尝试此答案中的代码:https: //stackoverflow.com/a/18962278/34088
回答by Reddymails
Just change your code to use AUTO_SENSE as shown below.
只需更改您的代码以使用 AUTO_SENSE,如下所示。
InputStream inputStream = new FileInputStream("C://test.pdf");
Doc doc = new SimpleDoc(inputStream, DocFlavor.INPUT_STREAM.AUTOSENSE,null);