// 获得pdf页数
int pdfPage = DocUtil.getPdfPage(filePath); //指定将和 图片拼接的 PDF// 获取第一页宽和高
PdfReader pdfreader = new PdfReader(filePath);
Document document = new Document(pdfreader.getPageSize(1));
// 获取页面宽度
float width = document.getPageSize().getWidth();
// 获取页面高度
float height = document.getPageSize().getHeight();
if ( pdfreader != null)pdfreader.close();
if ( document != null)document.close();
System.out.println("width = "+width+", height = "+height);
String picturePath; //图片路径PdfReader pdf = new PdfReader(filePath);
PdfStamper stamper  = null;try {stamper  =  new PdfStamper(pdf, new FileOutputStream(outPath));//生成的PDF 路径 outPathfor (int i = 1 ;i <= pdfPage; i++){PdfContentByte overContent = stamper.getOverContent(i);picturePath = file + "/wordTemplate/"+"cutContract"+i+".png";// 剪切图片File directory = new File("");// 参数为空String courseFile = directory.getCanonicalPath();DocUtil.cutPicture("png",courseFile+"\\src\\main\\webapp\\WEB-INF\\docPicture\\contract.png",113/pdfPage*(i-1),0,113/pdfPage,113,picturePath);//添加图片com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(picturePath);//图片名称image.setAbsolutePosition((int)width-113/pdfPage,(int)height/2);//左边距、底边距overContent.addImage(image);overContent.stroke();}
} catch (Exception e){e.printStackTrace();
} finally {try {if (null != stamper ){stamper.close();}if (pdf != null){pdf.close();}} catch (Exception e){e.printStackTrace();}}
 

public static void cutPicture(String lastDir, String srcPath, int x, int y, int width,int height, String subPath) throws IOException {FileInputStream is = null;ImageInputStream iis = null;try {// 读取图片文件is = new FileInputStream(srcPath);/** 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。* 参数:formatName - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。*/Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(lastDir);ImageReader reader = it.next();// 获取图片流iis = ImageIO.createImageInputStream(is);/** <p>iis:读取源.true:只向前搜索 </p>.将它标记为 ‘只向前搜索’。* 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。*/reader.setInput(iis, true);/** <p>描述如何对流进行解码的类<p>.用于指定如何在输入时从 Java Image I/O* 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 将从其 ImageReader 实现的* getDefaultReadParam 方法中返回 ImageReadParam 的实例。*/ImageReadParam param = reader.getDefaultReadParam();/** 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象* 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。*/Rectangle rect = new Rectangle(x, y, width, height);// 提供一个 BufferedImage,将其用作解码像素数据的目标。param.setSourceRegion(rect);/** 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 它作为一个完整的* BufferedImage 返回。*/BufferedImage bi = reader.read(0, param);// 保存新图片ImageIO.write(bi, lastDir, new File(subPath));} finally {if (is != null)is.close();if (iis != null)iis.close();}
}

Pdf 插入图片 | 指定位置插入图片 不改变原格式 直接操作 pdf相关推荐

  1. java pdf添加图片_java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: com.itextpdf itextp ...

  2. java pdf域插入img_java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: com.itextpdf itextp ...

  3. java pdf 插入图片_java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: com.itextpdf itextp ...

  4. C++ 笔记(23)— STL vector 类(实例化 vector、末尾插入、指定位置插入、数组方式访问元素、指针方式访问元素、删除元素、大小与容量区别)

    1. vector 特点 vector 是一个模板类,提供了动态数组的通用功能,具有如下特点: 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此: ...

  5. 数组之倒序与插入(首位插入,末尾插入,指定位置插入)

    数组倒序 元素值顺序不变 将数组从最后一位开始循环向前输出 (视觉效果,数组中值顺序不变) for(int i = array.length-1;i>=0;i--){System.out.pri ...

  6. java pdf 插入图片_java在pdf模板的指定位置插入图片

    个人感觉pdf的操作比word舒心多了 java操作pdf有个非常好用的库itextpdf,maven: com.itextpdf itextpdf 5.5.6 com.itextpdf itext- ...

  7. PDF中在指定位置插入图片

    public static void pdfInsertPhoto()throws Exception{//pdf路径File file = new File("D:\\file\\888. ...

  8. Pdf 插入图片 | 指定位置插入图片 不改变原格式 直接操作

    直接可用 大神链接地址: https://blog.csdn.net/qq_35077107/article/details/102653651?utm_medium=distribute.pc_re ...

  9. python替换指定位置word图片_用Python在word的指定位置插入图片(使用Python-docx包)...

    1 2 首先,本实例是采用java语言的,需要进行xml操作,至于poi,docx4j这些,因为感觉不是文档不太好,要嘛就是操作不方便,而且英文就算了,主要是注释很少,让人云里雾里的.所以,嘿嘿,直接 ...

最新文章

  1. JQuery对象和JS对象区别与转换|| 事件绑定 入口函数 样式控制
  2. bool类型返回值_Python语法基础:高级变量类型
  3. retargeting PHP,Retargeting the Animation 教学
  4. mongoDB 从单节点迁移到分布式集群 遇到的问题
  5. C#发布程序添加其他程序文件
  6. 设计模式--适配器(Adapter)
  7. Pyqt之模态与无模态对话框(Modal and Modeless)
  8. rmnet蠕虫病毒样本分析
  9. gnome黑屏 ubuntu_Ubuntu 16.04+GTX970 黑屏无法安装解决方法
  10. mysql怎么设置角色_mysql 用户角色权限表建立
  11. LCD屏的TCON、Source Driver、Gate Driver 、Gamma概念
  12. 摄氏度与华氏度相互转换
  13. 图形渲染与UWA论坛,mipi官网
  14. 计算机内存不能为read,电脑弹出窗口显示该内存不能为read的两种解决方法
  15. 从 Git 提交中删除文件
  16. 唯智信息WMS:让制造业仓库管理更智能
  17. 走近古人的生活 衣食住行
  18. 云服务器流量是什么东西_在线科普,买一台云服务器到底能干嘛?
  19. Docker 【Nginx集群部署】
  20. cad图纸怎么看懂_cad学习技巧:如何快速看懂图纸

热门文章

  1. Win7开机加速全攻略四:系统服务优化
  2. win7 eclipse调用虚拟机ubuntu部署的hadoop2.2.0伪分布(1)
  3. 信用卡有很多好处,远不止解决你燃眉之急这么简单
  4. github的Whoa there!问题
  5. spark分区读写mysql
  6. sql中的left join 查询
  7. 2143.replace.favo.xrcch.com Dns劫持解决方案
  8. Your IP address is spelled incorrectly问题排查
  9. c# 无法加载DLL“SQLite.Interop.dll”,: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
  10. Python编程之围圈报数