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

news/2024/9/20 17:54:16

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Flash气泡回弹效果

好久没有碰过Flash了&#xff0c;今天温习一下AS3.0&#xff0c;做了一个回弹效果&#xff0c;气泡回弹本想着怎么可以定义气泡的不同颜色&#xff0c;这样可以做出更绚丽的效果&#xff0c;或者更进步一&#xff0c;气泡和气泡直接回弹&#xff0c;想了老半天没有想出来&#…

Computer Vision Tasks

Computer Vision Tasks: 图像分类、目标检测、语义分割、实例分割&#xff1b; 只有目标检测和实例分割是实现了实例级别的识别的&#xff0c;就是把每一个单独的物体拎出来识别的&#xff1b;目标检测是画框框&#xff0c;而实例分割是抠图。 实例识别&#xff1a;就是把图片…

如何在OpenCV中为InRange阈值选择颜色的最佳HSV值

如何在OpenCV中为InRange阈值选择颜色的最佳HSV值 1. 效果图2. 源码参考之前的博客介绍了如何使用Python,OpenCV通过HSV颜色空间转换检测对象,并进行轨迹追踪。怎么选定合适的HSV颜色阈值范围非常非常非常的重要。 这篇博客将介绍如何在OpenCV中为InRange阈值选择颜色的最佳…

使用pycharm将自己项目代码上传github(保姆教程)

1、梳理一下Git、github和gitee这三个之间的关系&#xff1a; 1.1、Github 首先从我们最熟悉的github来说&#xff0c;他其实是一个代码托管平台&#xff0c;我们可以在他的里面新建很多的仓库&#xff0c;有强迫症的我理解就是一个仓库是一个自己的项目代码&#xff0c;这些…

基于openCV的项目实战1:信用卡数字识别

目的:识别信用卡卡号; 方法:基于模板匹配; 模板匹配思想:拿4和左边模板进行一一匹配,算一下平方项的差异,恰好4和左边模板中的4差异最小,所以就知道当前的数字是4; 具体步骤: 第一步:找到与你当前非常接近的一个模板; 第二步:把模板中每一个数字单独拿出来,…

使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图

使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图 1. EoN是什么2. 安装3. 效果图4. 源代码4.1 源码4.2 源码参考写这篇博客源于博友的提问,好奇EoN是什么,然后安装研究了一下~。 1. EoN是什么 EoN:使用python模拟网络中的疾病扩散模型 这本教科书为网络

OpenCV图像处理之——分水岭算法的图像分割

OpenCV图像处理之——分水岭算法的图像分割 1. 效果图2. 原理3. 源码参考这篇博客将介绍如何使用分水岭算法进行基于标记的图像分割,OpenCV通过cv2.watershed()实现; 1. 效果图 官方示例——水果分割 效果图如下: 共分了8块,可交互式的进行分割;

Overleaf-LaTex表格制作

下面是一个表格生成器的网页&#xff1a;https://tablesgenerator.com/ 这个Tables Generator可以生成Latex代码&#xff0c;我们只要拷贝代码到overleaf平台进行编译就可以得到精美的表格&#xff1b; 比如下边我们新建立一个生成7x4的表格&#xff1a; File--->New tabl…