PDFBox 未在 javax.print api 上打印签名
PDFBox not printing signature over javax.print api
给定一个带签名的数字签名 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 中一样呈现reader(Acrobat 或 Evince)。
打印时如何让PDFBox正确渲染签名?我不想乱打印 BufferedImage
,因为它会将文档分成多个打印作业,并让我对发送到打印机的渲染图像的质量负责。
您的问题的解决方法是使用具有非 0 值的 PDFPageable
的 4 参数构造函数:
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 用户的另一种解决方法。
给定一个带签名的数字签名 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 中一样呈现reader(Acrobat 或 Evince)。
打印时如何让PDFBox正确渲染签名?我不想乱打印 BufferedImage
,因为它会将文档分成多个打印作业,并让我对发送到打印机的渲染图像的质量负责。
您的问题的解决方法是使用具有非 0 值的 PDFPageable
的 4 参数构造函数:
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 用户的另一种解决方法。