2017-09-01 52 views
0

給出一個帶簽名的數字簽名PDF文件,我想將此文檔打印在紙上。PDFBox未在javax.print api上打印簽名

將PDFBox與下列代碼一起使用我可以打印文檔,除了簽名不會在死樹的薄薄的漂白表單上結束。文本週圍的定位不會改變。所以它似乎意識到那裏應該有東西,但它不會被打印。

import java.awt.print.PrinterJob; 
    import javax.print.PrintService; 
    import javax.print.attribute.HashPrintRequestAttributeSet; 
    import org.apache.pdfbox.pdmodel.PDDocument; 
    import org.apache.pdfbox.printing.PDFPageable; 

    InputStream pdf = getPDFInputStreamSomeHow(); 
    PDDocument pdDocument = PDDocument.load(pdf); 
    PDFPageable pageable = new PDFPageable(pdDocument); 

    PrinterJob job = PrinterJob.getPrinterJob(); 
    job.setPrintService(service); 
    job.setPageable(pageable); 
    job.print(attrs); 

看來,PDFBox的實際上不支持這種簽名的,因爲當我使用org.apache.pdfbox.rendering.PDFRenderer來渲染頁面的BufferedImage,簽名只是渲染,因爲它是我經常PDF閱讀器(Acrobat或了Evince) 。

如何在打印時讓PDFBox正確呈現簽名?我寧願不打印BufferedImage,因爲它會將文檔分成多個打印作業,並使我對發送到打印機的渲染圖像的質量負責。

+0

您正在使用什麼PDFBox版本以及您使用的操作系統是否可以共享PDF?某些打印問題可通過使用4參數PDFPageable構造函數來解決,最後一個參數設置爲您希望的dpi,例如300(是的,這使您對發送給打印機的渲染圖像的質量負責)。其他打印問題可能會通過關閉或打開「擴展」對話框中的高級打印而消失。 (沒有確切的詞語,有JIRA問題,但JIRA已關閉) –

+0

以下是https://issues.apache.org/jira/browse/PDFBOX-3729問題,這可能是也可能不是原因。 –

+0

我不能分享這個PDF,因爲它包含機密信息並生成一個新的而不是一個麻煩。但這不是問題,因爲你的建議奏效了!請張貼使用4參數構造函數作爲答案,我會接受它。 – Joost

回答

1

一種用於您的問題解決方法是使用的PDFPageable 4-參數構造具有非0值:

public PDFPageable(PDDocument document, Orientation orientation, boolean showPageBorder, float dpi) 

的第四參數設置爲像300所導致圖像是有用的數目被光柵化在給定的新聞部。所以對你來說,通話將

PDFPageable pageable = new PDFPageable(pdDocument, Orientation.AUTO, false, 300); 

的打印問題的一個可能的原因正在跟蹤的問題PDFBOX-3729。這個問題也是Windows用戶的另一個解決方法。