gpt4 book ai didi

java - PDFBox 不通过 javax.print api 打印签名

转载 作者:行者123 更新时间:2023-12-02 12:18:15 29 4
gpt4 key购买 nike

鉴于带有签名的数字签名 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 值的 PDFPageable 的 4 参数构造函数:

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

将第四个参数设置为有用的数字(例如 300)会导致图像以给定的 DPI 进行光栅化。所以对你来说,电话是

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

问题 PDFBOX-3729 中正在跟踪打印问题的可能原因。 。对于 Windows 用户来说,该问题还有另一种解决方法。

关于java - PDFBox 不通过 javax.print api 打印签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45999854/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com