【PDF添加印章】Java在PDF中添加指定尺寸的图片印章
需求
需要在导出PDF时,添加指定大小为 4cm × 4cm
大小的图片印章
问题
客户提供的图片由 PhotoShop 导出,尺寸大小为 4cm × 4cm
,按说使用 itext 添加到 PDF 文件时,只需要保持 100%
缩放就能保证打印出预期的效果。
FileOutputStream outputStream = new FileOutputStream("a.pdf");
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
writer.getDirectContent();
Image image = Image.getInstance("stamp.png");
image.scalePercent(100);
document.add(image);
document.close();
但是,实际预览时,印章大约为预期效果的两倍,已经快有半张纸的大小了
解决
查阅资料发现,iext 默认的 DPI(每英寸像素)为 72
,而客户提供的图片尺寸虽然为 40mm × 40mm
,但为了保持图像清晰,DPI 设置了 144
,这也就能解释为什么印章实际预览效果为原图的两倍了。
于是,我们使用 Image
的 scaleAbsolute
方法,通过计算来精确设置打印大小:
/**
* 每英寸的像素
*/
public static final float DPI = 72f;
/**
* 每毫米像素(1英寸=25.4毫米)
*/
public static final float DPMM = DPI / 25.4f;
public static void main(String[] args) throws IOException, DocumentException {
FileOutputStream outputStream = new FileOutputStream("a.pdf");
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
writer.getDirectContent();
Image image = Image.getInstance("stamp.png");
// 设置印章大小为 40mm × 40mm
image.scaleAbsolute(40 * DPMM, 40 * DPMM);
document.add(image);
document.close();
}
这样就得到了最终想要的 4cm × 4cm
大小
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果