鉴于带有签名的数字签名PDF文件,我想在纸上打印此文档。
使用带有以下代码的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 :(得分:1)
您的问题的解决方法是使用PDFPageable
的4参数构造函数,其值为非0:
public PDFPageable(PDDocument document, Orientation orientation, boolean showPageBorder, float dpi)
将第4个参数设置为有用的数字(如300)会导致图像在给定的DPI下被光栅化。所以对你来说,电话会是
PDFPageable pageable = new PDFPageable(pdDocument, Orientation.AUTO, false, 300);
正在跟踪问题PDFBOX-3729中可能导致打印问题的原因。该问题还为Windows用户提供了另一种解决方法。