Java 使用itextPdf7操作pdf,写入照片这一篇就够了

  • 1. 效果图
    • 1.1 M*N列图片(无边界&有边界)
    • 1.2 图片重叠
    • 1.3 文字背景图片
    • 1.4 图片与文字相邻 & 图片文字Rowspan样式
    • 1.5 一个单元格多图片 & 多图片文本内容
    • 1.6 单元格中文本图片位置设置
  • 2. 源代码
    • 2.0 maven pom配置
    • 2.1 M*N图片(有边界 & 无边界)
    • 2.2 图片重叠
    • 2.3 文字背景图片
    • 2.4 图片与文字相邻 & 图片文字Rowspan样式
    • 2.5 一个单元格多图片 & 多图片文本内容
    • 2.6 单元格中文本图片位置设置
  • 参考

itextPdf已更新到7,本文将走入最新的itextpdf 7教程

这篇博客将介绍如何使用itextPdf7在pdf中插入图片,包括插入N*M的图片、图片重叠、一张接一张图像、相邻图像、图片与文字相邻、一个单元格多图像、单元格多图片与文字并存、单元格多块内容、单元格中复杂文本图片位置设置。

  • 图片的各种使用场景:https://kb.itextsupport.com/home/it7kb/examples/adding-images-to-a-table
  • github源码:https://github.com/seminar2012/i7js-examples/blob/develop/src/main/java/com/itextpdf/samples/sandbox/tables/ImagesNextToEachOther.java

1. 效果图

1.1 M*N列图片(无边界&有边界)

生成5行4列图片的PDF,有边界框效果图如下:

生成5行4列图片的PDF,无边界框效果图如下:

1.2 图片重叠

图片重叠

1.3 文字背景图片

1.4 图片与文字相邻 & 图片文字Rowspan样式


图片与文字同一行,RowSpan样式:

1.5 一个单元格多图片 & 多图片文本内容

一个单元格多图片

一个单元格中多块内容(图片&空格或者文字多次叠加)

单元格中多块内容

1.6 单元格中文本图片位置设置

单元格中文本图片位置设置

单元格中文本图片位置复杂设置:

2. 源代码

2.0 maven pom配置

  <dependencies><!--创建itextpdf7--><dependency><groupId>com.itextpdf</groupId><artifactId>pdftest</artifactId><version>7.2.0-SNAPSHOT</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>kernel</artifactId><version>7.2.0-SNAPSHOT</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>layout</artifactId><version>7.2.0-SNAPSHOT</version></dependency></dependencies><repositories><repository><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots><id>itext-snapshot</id><name>iText Repository - snapshots</name><url>https://repo.itextsupport.com/snapshot</url></repository><repository><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots><id>itext-releases</id><name>iText Repository - releases</name><url>https://repo.itextsupport.com/releases</url></repository><repository><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots><id>apache.snapshots</id><name>Apache Development Snapshot Repository</name><url>https://repository.apache.org/content/repositories/snapshots/</url></repository></repositories>

2.1 M*N图片(有边界 & 无边界)

package com.ocr.itepdf;import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.borders.Border;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.properties.HorizontalAlignment;
import com.itextpdf.layout.properties.UnitValue;
import com.itextpdf.layout.properties.VerticalAlignment;import java.io.File;
import java.net.MalformedURLException;public class ImagesNextToEachOther {public static final String DEST = "E:\\mat\\itepdf\\image_next_to_each_other2.pdf";public static final String IMG1 = "D:\\20210905\\images\\ml.jpg";public static final String IMG2 = "D:\\20210905\\images\\circle.png";public static void main(String[] args) throws Exception {File file = new File(DEST);file.getParentFile().mkdirs();new ImagesNextToEachOther().manipulatePdf(DEST);}protected void manipulatePdf(String dest) throws Exception {PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));Document doc = new Document(pdfDoc);int col = 4; // 图片列int row = 5; // 图片行Table table = new Table(UnitValue.createPercentArray(col)).useAllAvailableWidth();for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (j % 2 == 0) {table.addCell(createImageCell(IMG1));} else {table.addCell(createImageCell(IMG2));}}}doc.add(table);doc.close();}private static Cell createImageCell(String path) throws MalformedURLException {Image img = new Image(ImageDataFactory.create(path));// 设置图片自动缩放,img.setAutoScale(true)// 设置图片宽度 img.setWidth// 设置cell宽度、高度 setWidth// 设置cell无边界框 setBorder// 设置水平、垂直对其方式 setHorizontalAlignment、setVerticalAlignmentreturn new Cell().add(img.setAutoScale(true).setWidth(UnitValue.createPercentValue(100)))
//                .setWidth(50)
//                .setHeight(50).setBorder(Border.NO_BORDER).setHorizontalAlignment(HorizontalAlignment.CENTER).setVerticalAlignment(VerticalAlignment.MIDDLE);}
}

2.2 图片重叠

[图片重叠](https://github.com/seminar2012/i7js-examples/blob/develop/src/main/java/com/itextpdf/samples/sandbox/tables/AddOverlappingImage.java)

2.3 文字背景图片

[文字背景图片](https://github.com/seminar2012/i7js-examples/blob/develop/src/main/java/com/itextpdf/samples/sandbox/tables/ImageBackground.java)

2.4 图片与文字相邻 & 图片文字Rowspan样式

图片与文字相邻 & 图片文字Rowspan样式

2.5 一个单元格多图片 & 多图片文本内容

表格多图片与文字并存

一个单元格多图片

2.6 单元格中文本图片位置设置

单元格中文本图片位置设置

参考

  • https://kb.itextsupport.com/home/it7kb/ebooks/itext-7-jump-start-tutorial-for-java/
  • https://github.com/seminar2012/i7js-examples/blob/develop/src/main/java/com/itextpdf/samples/sandbox/tables/ImagesNextToEachOther.java
  • https://kb.itextsupport.com/home/it7kb/examples/adding-images-to-a-table
  • https://itextpdf.com/en
  • iText5实现Java生成PDF文件完整版

Java 使用itextPdf7操作pdf,写入照片这一篇就够了相关推荐

  1. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  2. java 修改pdf_Java 操作PDF书签详解 - 添加、修改、读取和删除

    目录前言 Free Spire.PDF for Java库概述和安装 给PDF文档添加书签 修改现有书签 设置PDF文档打开时展开或折叠书签 读取书签标题 从PDF文档中删除书签 前言 书签在一些PD ...

  3. Java使用PDFBOX操作pdf文件(一,加载和创建pdf)

    前言: 之前想学习使用Java操作pdf的时候看过了IText的文档.确实IText的文档很全,也有一个官网可以很方便的查找信息.但IText的开源协议为AGPL,使用者必须传染性的开源代码,商业使用 ...

  4. Java用ItextPdf7导出pdf

    欢迎各位来我的博客看看 背景 需要导出以下的pdf模板出来,之前做的都用freemarker来导出word,现在更换成了pdf,所以临时整了个 准备工作 maven依赖 <dependency& ...

  5. Java使用PDFBox操作PDF文件

    1首先,导入jar (maven方式导入) PS: 这个jar里面囊括了所有的pdfbox操作工具类,导入这一个就够了 <dependency><groupId>org.apa ...

  6. Java高频重点面试题,看这一篇就够了。

    查缺补漏 一.基础篇 1. ==和equals区别? 2. spring 有哪些主要模块? 3. Spring中bean的生命周期 3.1 Spring Bean的生命周期指的是从一个普通的Java类 ...

  7. Java中的多线程你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  8. Java 中的多线程你只要看这一篇就够了

    作者丨纳达丶无忌 https://www.jianshu.com/p/40d4c7aebd66 引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多 ...

  9. python自动操作微信_Python+Appium 自动化操作微信入门看这一篇就够了

    简介 Appium 是一个开源的自动化测试工具,支持 Android.iOS 平台上的原生应用,支持 Java.Python.PHP 等多种语言. Appium 封装了 Selenium,能够为用户提 ...

最新文章

  1. Android SpannableString 给TextView 设置颜色,删除线等
  2. BZOJ 1503 郁闷的出纳员(splay)
  3. Sublime Text 快捷键
  4. 小瓜牛漫谈 — String、StringBuffer、StringBuilder
  5. CF1063A Oh Those Palindromes
  6. 37signals为何砍掉中层?个人点评,高素质人才队伍工作,靠的是全体发挥综合能力,而不是靠......
  7. 指标波动多大才算是异常?
  8. TADVAlertWindow
  9. php-fpm性能优化
  10. matplotlib plot 分组_Python数据分析模块二:Matplotlib
  11. html 固定表头和左侧列,纯css实现固定表头和锁定列
  12. 幼儿园带括号算式口诀_巧记数学公式,背熟这41组数学顺口溜就对了!
  13. Swarm-BZZ踩坑日记之 如何在Linux下使用docker开30个bzz节点
  14. ff14优雷卡补正什么意思_禁地优雷卡 | 新大陆见闻录 - 《最终幻想14》萌新指导手册...
  15. 关于Excel操作编写的一个软件设计构思案例[连载]
  16. Channel 用法
  17. java包是什么意思_java中的“包”到底是什么意思?
  18. 中国越野汽车电子市场趋势报告、技术动态创新及市场预测
  19. PYNQ-Z2零基础学习详解
  20. 红帽linux竞赛,浅谈红帽linux挑战赛(三)

热门文章

  1. 客快物流大数据项目(四):大数据项目为什么使用Docker
  2. Java基础Switch和循环控制
  3. hook情况下,解决内联没有:hover的方案
  4. C++ 函数的模板的使用
  5. 微信小程序点击图片切换图片
  6. 火狐浏览器中添加httprequest的方法
  7. python pip换源方法
  8. leetcode-回文数(简单)
  9. 2022-2028年中国成人艺术培训行业市场前瞻与投资战略规划分析报告
  10. 中国互联网+光伏建筑一体化行业商业模式创新与投资机会深度报告