itextpdf 给pdf文档添加图片

  • 主要流程
    • 1、构建图片对象
    • 2、放置图片
    • 3、pdf拼接

主要流程

1、构建图片对象


/*** signDetail 前端canvas 获取的图片信息*/
private static Image buildImageFromSource(String signDetail, float width, float height) {try {signDetail = clearPreffix(signDetail);Image image = Image.getInstance(Base64Utils.decodeFromString(signDetail));image.setAlignment(Image.LEFT);image.setBorder(Image.NO_BORDER);// 将px转成pt  需要 * 0.75,计算完成后,减去上下左右的36pt的边距image.scaleAbsolute((width * 0.75f) -72, (height * 0.75f) -72);return image;} catch (BadElementException | IOException e) {e.printStackTrace();log.error("创建image失败: {}", e.getMessage());}return null;
}// 移除保存图片时不需要的前缀
private static String clearPreffix(String detail) {if (detail.startsWith("data")) {// 获取点的位置int pointIdx = detail.indexOf(",");detail = detail.substring(pointIdx + 1);}return detail;
}

2、放置图片

/*** 新建一个pdf,并追加图片* @param dest          输出文件* @param signDetails   图片详细*/
public static void newPdf(String dest, List<String> signDetails) {File file = new File(dest);if (!file.getParentFile().exists() && !file.getParentFile().mkdirs()) {}FileOutputStream fos = null;try {fos = new FileOutputStream(dest);Document document = new Document(PageSize.A4);PdfWriter writer = PdfWriter.getInstance(document, fos);document.open();// 加载模板文件ClassPathResource resource = new ClassPathResource("tpl/signTpl.pdf");PdfReader reader = new PdfReader(resource.getInputStream());PdfImportedPage page = writer.getImportedPage(reader, 1);PdfContentByte cb = writer.getDirectContent();document.newPage();cb.addTemplate(page, 0, 0);float top = document.top();// 默认顶部拿掉,然后再扣掉页眉的高度float y = top - 66 - 20;float x = 36;int signHeight = 75;int rowCount = 3;for (int i = 0; i < signDetails.size(); i++) {String detail = signDetails.get(i);x = 90 + (i % rowCount) * 150;Image image = buildImageFromSource(detail, 214, 148);if (i % rowCount == 0) {y -= signHeight;if (y <= signHeight) {document.newPage();cb.addTemplate(page, 0, 0);y = top - 66 - 90;}}if (image != null) {image.setAbsolutePosition(x, y);document.add(image);}}document.close();} catch (IOException | DocumentException e) {e.printStackTrace();} finally {IoUtil.close(fos);}}

3、pdf拼接

public static void appendImgToPdf(String sourcePath, String targetPath, List<String> details) throws IOException {String tempPath = new File("/tmp/test").getAbsolutePath() + "/" + UUID.fastUUID().toString() + ".png";newPdf(tempPath, details);mergePdf(Lists.newArrayList(sourcePath, tempPath), targetPath);
}public static void mergePdf(List<String> sourceFilePaths, String targtPath) throws IOException {PDFMergerUtility mergePdf = new PDFMergerUtility();for (String filePath : sourceFilePaths) {File file = new File(filePath);if (file.exists() && file.isFile()) {mergePdf.addSource(file);}}File file = new File(targtPath);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}mergePdf.setDestinationFileName(targtPath);mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
}

itextpdf 给pdf文档添加图片相关推荐

  1. 利用iTextSharp组件给PDF文档添加图片水印,文字水印

    最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了.以下做个记录: 首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来. 代码中添加引用为:   usingSy ...

  2. java使用itextpdf生成pdf文档指定图片印章位置

    项目结构 1.引包 <dependencies><!-- itextpdf--><dependency><groupId>com.itextpdf< ...

  3. 使用免费组件给PDF文档添加文本和图片页眉

    C#/.NET 使用免费组件给PDF文档添加文本和图片页眉 如今PDF文档与Office文档一样成为了一种通用文档,在日常工作中我们经常会碰到需要给PDF文件添加页眉和页脚/页码等情况,如果你正好是喜 ...

  4. Springboot通过模板生成pdf文档带图片

    Springboot通过模板生成pdf文档带图片 环境:springboot2.3.10.RELEASE + itextpdf5.5.13.2 依赖 <dependency><gro ...

  5. PDF文档转换为图片、图片转成PDF 及PDF合并

    简介 功能:PDF文档按每页转换成一张图片,一张图片转换成一张PDF 并将多张PDF合成一个多页的PDF文档. 经历:在各个网站上搜索始终出现各种问题,尤其是遇到引用的版本问题尤其头疼,不是不能适用当 ...

  6. java给word和pdf文档添加二维码

    背景 目前收到一个需求,需要给上传的word和pdf文档添加二维码,防止职工给领导签字时伪造合同,所以提出这个需求,上传的word和pdf添加二维码,然后使用我们的app扫码查看相关的信息. 解决方案 ...

  7. elementui表格添加滚动条_如何给PDF文档添加超链接?

    有时我们在编辑PDF文档时,需要给目录做快速跳转或给文中的某些内容跳转到其他网页,这就需要用到超链接的功能.下面就一起看看给PDF文档添加超链接的是如何操作的. https://www.zhihu.c ...

  8. pdf常用字体包 -baijiahao_如何给PDF文档添加和插入页码?

    如今PDF格式因其比常用的office格式更稳定,被越来越多人使用,但也正因为近几年才慢慢广泛使用,对于其编辑的相关操作也相对陌生,那么如何给PDF文档添加页码呢?如果不喜欢从第一页就开始编码,如何直 ...

  9. html 如何把图片作为背景_办公软件操作技巧062:如何给word文档添加图片背景

    在日常工作中,我们经常用word编辑文档,有时为了使文档更加的美观大气,可以给文档添加上背景图片,今天就来和大家分享如何在word中给文档添加图片背景. 方法一:填充图片法 单击"页面布局& ...

  10. Java使用Spire.Doc实现Word文档添加图片水印

    通过本文你将学到: Spire.Doc是什么? 如何在项目中引入Spire.Doc依赖? 项目中基于Spire.Doc封装工具类实现Word文档添加图片水印? 一.Spire.Doc是什么? 1.Sp ...

最新文章

  1. html 表格隐藏 显示出来了,如何在html页面打开时隐藏表格
  2. 火爆GitHub的《机器学习100天》,有人把它翻译成了中文版
  3. 解决 aka com.chaozh.iReader:style/Theme.AppCompat.Light.NoActionBar) not found.
  4. [网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向
  5. Google Mock启蒙篇 [1] (Google C++ Mocking Framework for Dummies 翻译)
  6. 如何远程连接Windows和linux服务器
  7. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码
  8. springboot项目打war包发布到外置tomcat
  9. 华为模拟器ensp代码错误2,41,40问题的解决
  10. cocos2dx游戏开发简单入门视频教程 (cocos2d-x)- 第5天
  11. python中home定义是什么_关于python中的module你需要了解的
  12. 流氓软件的完全卸载的一些方法
  13. 【大学物理·光学】圆孔的夫琅禾费衍射光学仪器的分辨本领
  14. Eclipse下Hibernate使用学习
  15. PHP8与PHP7计算性能对比
  16. 将 hexo 部署到云服务器
  17. 各种格式的文件用什么软件打开
  18. dva开源项目_后台前端管理系统,基于react、typescript、antd、dva及一些特别优秀的开源库实现...
  19. 前端教程:用 Canvas 编织璀璨星空图
  20. 多个div水平横向排列

热门文章

  1. 解决qt下VCI_OpenDevice一直返回0的问题
  2. 修改网页中的内容与打印网页
  3. python爬虫基础爬取用户头像实战
  4. Excel2021 如何将左侧A列数据填B列空白处A列数据合并到B列
  5. springboot启动报错@Bean definition illegally overridden by existing bean definition
  6. mybatis-plus关联查询,一对一、一对多。
  7. 张正友相机标定全解析
  8. centos7安装有道词典
  9. 大数据平台监控界面和报表
  10. poj-1260 Pearls