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文件完整版