我們正在研究從Java內部無聲打印PDF文檔。打印將從桌面調用,而不是通過瀏覽器,所以我們不能使用JavaScript。 PDF渲染器是一種可操作的解決方案,但其渲染質量不可接受。 iText似乎無法與Java打印服務一起插入。有一些商業Java庫,Qoppa,JPedal和ICEpdf的jPDFPrint,我們還沒有嘗試過。從Java內部靜默打印PDF
有沒有人有使用Java的PDF靜音打印的經驗?
我們正在研究從Java內部無聲打印PDF文檔。打印將從桌面調用,而不是通過瀏覽器,所以我們不能使用JavaScript。 PDF渲染器是一種可操作的解決方案,但其渲染質量不可接受。 iText似乎無法與Java打印服務一起插入。有一些商業Java庫,Qoppa,JPedal和ICEpdf的jPDFPrint,我們還沒有嘗試過。從Java內部靜默打印PDF
有沒有人有使用Java的PDF靜音打印的經驗?
Apache PDFBox。它目前正在孵化,但PDF打印功能在此之前已經出現。在內部,它使用Java Print Services創建打印作業,並且它也支持silent printing。
請注意,它也需要Fontbox,而且當前(即將發佈的0.8.0版本)已經包含了適用於Type 0字體文檔的優雅回退。 Type 1字體打印正確;但是在0.7.3中,嘗試使用Type 0字體打印文檔將導致引發異常。
看看www.pdflib.com。它的comercial但PDFlib Lite可以免費用於開源項目。它具有Java的綁定。
也許我誤解了,但爲什麼不直接使用Print Service API呢?我下面的作品(假設您已經將PDF文檔作爲字節數組):
DocFlavor flavor = DocFlavor.BYTE_ARRAY.PDF;
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
if (services.length > 0)
{
DocPrintJob printJob = services[0].createPrintJob();
Doc document = new SimpleDoc(pdfBytes, flavor, null)
printJob.print(document, null);
}
else
{
System.out.println("No PDF printer available.");
}
這隻適用於你的打印機本身支持PDF - 很少做 – 2009-09-12 04:17:01
所有的人I已經在Linux下嘗試過了似乎工作。在Windows下,我不得不更新驅動程序。 – 2009-09-12 10:29:04
我試圖在Windows和Linux。這是更新的版本,但是我不能讓它工作,就像我如何加載文件c:\ print.pdf並推入沉默打印?任何建議plz?例如:https://gist.github.com/1093987 – YumYumYum 2011-07-19 23:21:15
有一個在http://www.jpedal.org/support_egSP.php
使用JPedal爲例,用戶將需要IcePdf的商業版本,如果你想完整的字體支持。
我有使Acrobat(Reader或Full)進行打印的經驗,但它沒有什麼安靜的跡象(它是無人看管的 - 只是取決於沉默的要求是多麼「沉默」)。如果有興趣,我可以向您發送進行所需DDE呼叫的本機代碼。
您能否顯示代碼? – asalamon74 2009-11-13 08:28:15
有一個命令行開關來觸發打印操作從Acrobat閱讀器,但讀者保持開放...一種解決方案是使用外部工具,請參閱http://www.rgagnon.com/javadetails/java-print-a-pdf.html。很顯然,這僅適用於WIndows ! – RealHowTo 2011-12-31 18:06:53
和那個命令行開關永遠不會w (爲現代版本的Acrobat和/或Reader - 它在舊版本中工作)... – 2012-01-09 19:41:18
iText是用於創建PDF文件(每篇文章我從作者看到),因此可能不是你想要的。
我已經用Qoppa的jPDFPrint完全實現了這個目的,但它並不便宜。如果你能負擔得起,這是迄今爲止我發現的最強大的解決方案。我對支持的程度印象深刻,他們甚至爲我生成了一些自定義示例代碼。
我試過PDFBox,但發現它不支持使用Acrobat獲得的「縮小到可打印區域」頁面縮放比例。不是每個人都會關心這個功能,但它對我來說很重要。
這個工作對我來說:
public void print() {
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
FileInputStream psStream = null;
try {
psStream = new FileInputStream("c:\\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("my printer")) {
myService = service;
break;
}
}
DocPrintJob printJob = myService.createPrintJob();
Doc document = new SimpleDoc(psStream, flavor, null);
try {
printJob.print(document, null);
} catch (PrintException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{
System.out.println("No PDF printer available.");
}
}
什麼是與Sun的PDFRender問題了嗎?我在這裏有一些打印輸出,他們看起來乾淨漂亮。您是否有導致問題的特殊元素或圖像? – Stroboskop 2010-06-14 07:30:28