Java 使用itextPdf7操作pdf,写入照片这一篇就够了
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 使用itextPdf7操作pdf,写入照片这一篇就够了相关的知识,希望对你有一定的参考价值。
Java 使用itextPdf7操作pdf,写入照片这一篇就够了
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、setVerticalAlignment
return 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样式
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,写入照片这一篇就够了的主要内容,如果未能解决你的问题,请参考以下文章
百度文库的实现——java利用openoffice,word转pdf
如何将 ResponseBody(在我的情况下为 PDF)写入外部存储? java.lang.IllegalStateException 的问题:已关闭