代码 - 多张图片合并成PDF(每页宽高即是当前页面图片的宽高)- itextpdf
文章目录
- 1. 多张图片转成PDF(每页PDF的宽高是当前页面图片的宽高)
- 7.2.3版本
- 官方示例
- 多图合并成PDF
1. 多张图片转成PDF(每页PDF的宽高是当前页面图片的宽高)
7.2.3版本
文档(创建多页自定义宽高页面): https://kb.itextpdf.com/home/it7kb/faq/how-to-create-a-document-with-unequal-page-sizes
图片(页面放置大图片): https://kb.itextpdf.com/home/it7kb/faq/how-to-create-a-document-with-unequal-page-sizes
依赖
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext7-core --><dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.3</version><type>pom</type></dependency>
官方示例
创建多页自定义宽高页面(官方示例代码)
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Rectangle one = new Rectangle(70,140);
Rectangle two = new Rectangle(700,400);
Document document = new Document(pdf, new PageSize(one));
document.setMargins(2, 2, 2, 2);
Paragraph p = new Paragraph("Hi");
document.add(p);
document.add(new AreaBreak(new PageSize(two)));
document.setMargins(20, 20, 20, 20);
document.add(p);
document.close();
页面放置大图片(官方示例代码)
package com.itextpdf.samples.sandbox.images;import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfStream;
import com.itextpdf.kernel.pdf.xobject.PdfImageXObject;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;import java.io.File;public class LargeImage1 {public static final String DEST = "./target/sandbox/images/large_image1.pdf";public static final String SRC = "./src/main/resources/pdfs/large_image.pdf";public static void main(String[] args) throws Exception {File file = new File(DEST);file.getParentFile().mkdirs();new LargeImage1().manipulatePdf(DEST);}protected void manipulatePdf(String dest) throws Exception {PdfDocument resultDoc = new PdfDocument(new PdfWriter(dest));PdfDocument srcDoc = new PdfDocument(new PdfReader(SRC));// Assume that there is a single XObject in the source document// and this single object is an image.PdfDictionary pageDict = srcDoc.getFirstPage().getPdfObject();PdfDictionary pageResources = pageDict.getAsDictionary(PdfName.Resources);PdfDictionary pageXObjects = pageResources.getAsDictionary(PdfName.XObject);PdfName imgRef = pageXObjects.keySet().iterator().next();PdfStream imgStream = pageXObjects.getAsStream(imgRef);PdfImageXObject imgObject = new PdfImageXObject((PdfStream) imgStream.copyTo(resultDoc));Image image = new Image(imgObject);image.scaleToFit(14400, 14400);image.setFixedPosition(0, 0);srcDoc.close();PageSize pageSize = new PageSize(image.getImageScaledWidth(), image.getImageScaledHeight());Document doc = new Document(resultDoc, pageSize);doc.add(image);doc.close();}
}
多图合并成PDF
基于上述两个官方Demo进行代码合并-从而支持多张图片合并PDF
package work.linruchang;import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.AreaBreak;
import com.itextpdf.layout.element.Image;
import lombok.SneakyThrows;import java.io.File;
import java.util.List;/*** @author LinRuChang* @version 1.0* @date 2022/09/03* @since 1.8**/
public class OthreTest2 {@SneakyThrowspublic static Image toItexImage(File imageFile) {return new Image(ImageDataFactory.create(imageFile.getAbsolutePath()));}@SneakyThrowspublic static File imagesToPdf(List<File> imageFiles, File targetPdfFilePath) {if (CollUtil.isNotEmpty(imageFiles) && targetPdfFilePath != null) {// 创建PDF实例PdfWriter pdfWriter = new PdfWriter(targetPdfFilePath);// 管理跟踪、添加的内容PdfDocument pdfDocument = new PdfDocument(pdfWriter);File firstImageFile = CollUtil.getFirst(imageFiles);Image firstImage = toItexImage(firstImageFile);Document document = new Document(pdfDocument, new PageSize(Convert.toFloat(firstImage.getImageWidth()), Convert.toFloat(firstImage.getImageHeight())));document.add(firstImage);List<File> removeFirstImageList = CollUtil.removeAny(imageFiles, firstImageFile);removeFirstImageList.stream().map(OthreTest2::toItexImage).forEachOrdered(image -> {document.add(new AreaBreak(new PageSize(Convert.toFloat(image.getImageWidth()), Convert.toFloat(image.getImageHeight()))));document.setMargins(10, 10, 10, 10);document.add(image);});document.close();return targetPdfFilePath;}return null;}public static void main(String[] args) {List<File> imagesFiles = CollUtil.list(false, FileUtil.file("D:\\截图3\\合并截图0-版权信息.jpg"), FileUtil.file("D:\\截图3\\合并截图1-小桥老树致微信读书朋友的一封信+独家视频.jpg"));File resultPdf = FileUtil.file("D:\\截图3\\test.pdf");imagesToPdf(imagesFiles, resultPdf);}}
代码 - 多张图片合并成PDF(每页宽高即是当前页面图片的宽高)- itextpdf相关推荐
- 多张图片合并成PDF文件,还在下载合并软件,PS就能帮你搞定
我们知道pdf格式是我们在工作和学习中常用的一种文件格式,pdf是一种通用的文档格式.很多阅读器都支持pdf格式,比如小编就非常喜欢用kindle来进行阅读,kindle可以打开pdf格式的电子书,可 ...
- 多张图片合并转为PDF
需要使用的依赖 <dependency><groupId>com.lowagie</groupId><artifactId>itext</arti ...
- 几张图片合并成一个pdf文件
大家平时都有接触过pdf文件,对pdf文件具备的特点也都有所了解,pdf文件的体积小,稳定性好,内容不会被轻易改变,所以使用率也越来越高.那很多小伙伴的脑子就很灵活,特别善于利用pdf自身具备的特性为 ...
- aspose pdf java,Java 使用aspose.pdf将多张图片转成pdf的方法及示例代码
1.Aspose组件下载 2、多张图片转成pdf 1) 验证license/** * 获取license * * @return */ public static boolean getLicense ...
- java 图片合并成pdf_java将多张图片合并转为PDF
[实例简介] [实例截图] [核心代码] package weaver.gy.util; import java.awt.image.BufferedImage; import java.io.Fil ...
- 如何免费把多张图片合并成一个PDF文件?
图片合并成PDF,也可以叫做图片转换成PDF或创建PDF文件,今天给大家推荐一个免费的PDF工具"金闪PDF编辑器",手机电脑都可以用的图片合并PDF文件的工具. 手机相册图片合成 ...
- 使用python将多张图片转换成pdf
有朋友在问如何通过Python将多张图片转换成pdf,刚好之前写了一个小功能,分享给大家. 不多说,直接上代码: #!/usr/local/python3.6.5 #cd /usr/local/pyt ...
- 【微信小程序云开发】使用云函数(node.js)实现多张图片转成pdf的功能,且pdf带水印
最近在做项目的时候,碰到一个功能需要多张图片转成pdf的功能,首先,在网上找了很多资料,都没有一个合适的. 后来,就自己动手使用云函数写了一个处理图片转成pdf的云函数,而且需带水印. 直奔主题,使用 ...
- 如何使用JAVA代码将WORD转成PDF.
如何使用JAVA代码将WORD转成PDF. 引入jar包 <!-- 转换doc为pdf的组件 --><dependency><groupId>e-iceblue&l ...
最新文章
- 查看运行状态_查看 Linux 系统服务的 5 大方法
- C# WebBrowser 取 window.open 新窗口 url的方法
- python hist 参数_关于python中plthist参数的使用详解
- 新手如何准确的控制油门
- java web service简单示例
- 香甜的黄油(信息学奥赛一本通-T1345)
- python华容道最短路径_NOIp2013D2T3 华容道【搜索图论-最短路】
- Java——can U do
- C语言指令启动mcs51计时器是,单片机原理及应用-中国大学mooc-题库零氪
- java使用163邮箱完成发送邮件完成注册
- python马尔科夫链
- 微信营销解密个人分析
- Java筑基18-布置作业啦(考查抽象类、内部类、工厂模式等)
- 手机必备的广告过滤利器---X浏览器
- 【BugkuCTF】Web--never give up
- 计算机无法连接iphone,iPhone连接电脑没反应,怎么办?
- python - dict.__reversed__() 无效吗?
- sso单点登录控件添加白名单教程(window Defender 和赛门铁克添加白名单)
- 30天干掉tensorflow2.0-day01
- HttpHandler【转】