文章目录

  • 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相关推荐

  1. 多张图片合并成PDF文件,还在下载合并软件,PS就能帮你搞定

    我们知道pdf格式是我们在工作和学习中常用的一种文件格式,pdf是一种通用的文档格式.很多阅读器都支持pdf格式,比如小编就非常喜欢用kindle来进行阅读,kindle可以打开pdf格式的电子书,可 ...

  2. 多张图片合并转为PDF

    需要使用的依赖 <dependency><groupId>com.lowagie</groupId><artifactId>itext</arti ...

  3. 几张图片合并成一个pdf文件

    大家平时都有接触过pdf文件,对pdf文件具备的特点也都有所了解,pdf文件的体积小,稳定性好,内容不会被轻易改变,所以使用率也越来越高.那很多小伙伴的脑子就很灵活,特别善于利用pdf自身具备的特性为 ...

  4. aspose pdf java,Java 使用aspose.pdf将多张图片转成pdf的方法及示例代码

    1.Aspose组件下载 2、多张图片转成pdf 1) 验证license/** * 获取license * * @return */ public static boolean getLicense ...

  5. java 图片合并成pdf_java将多张图片合并转为PDF

    [实例简介] [实例截图] [核心代码] package weaver.gy.util; import java.awt.image.BufferedImage; import java.io.Fil ...

  6. 如何免费把多张图片合并成一个PDF文件?

    图片合并成PDF,也可以叫做图片转换成PDF或创建PDF文件,今天给大家推荐一个免费的PDF工具"金闪PDF编辑器",手机电脑都可以用的图片合并PDF文件的工具. 手机相册图片合成 ...

  7. 使用python将多张图片转换成pdf

    有朋友在问如何通过Python将多张图片转换成pdf,刚好之前写了一个小功能,分享给大家. 不多说,直接上代码: #!/usr/local/python3.6.5 #cd /usr/local/pyt ...

  8. 【微信小程序云开发】使用云函数(node.js)实现多张图片转成pdf的功能,且pdf带水印

    最近在做项目的时候,碰到一个功能需要多张图片转成pdf的功能,首先,在网上找了很多资料,都没有一个合适的. 后来,就自己动手使用云函数写了一个处理图片转成pdf的云函数,而且需带水印. 直奔主题,使用 ...

  9. 如何使用JAVA代码将WORD转成PDF.

    如何使用JAVA代码将WORD转成PDF. 引入jar包 <!-- 转换doc为pdf的组件 --><dependency><groupId>e-iceblue&l ...

最新文章

  1. 查看运行状态_查看 Linux 系统服务的 5 大方法
  2. C# WebBrowser 取 window.open 新窗口 url的方法
  3. python hist 参数_关于python中plthist参数的使用详解
  4. 新手如何准确的控制油门
  5. java web service简单示例
  6. 香甜的黄油(信息学奥赛一本通-T1345)
  7. python华容道最短路径_NOIp2013D2T3 华容道【搜索图论-最短路】
  8. Java——can U do
  9. C语言指令启动mcs51计时器是,单片机原理及应用-中国大学mooc-题库零氪
  10. java使用163邮箱完成发送邮件完成注册
  11. python马尔科夫链
  12. 微信营销解密个人分析
  13. Java筑基18-布置作业啦(考查抽象类、内部类、工厂模式等)
  14. 手机必备的广告过滤利器---X浏览器
  15. 【BugkuCTF】Web--never give up
  16. 计算机无法连接iphone,iPhone连接电脑没反应,怎么办?
  17. python - dict.__reversed__() 无效吗?
  18. sso单点登录控件添加白名单教程(window Defender 和赛门铁克添加白名单)
  19. 30天干掉tensorflow2.0-day01
  20. HttpHandler【转】

热门文章

  1. SonicWALL常见监控说明及日志查看
  2. 关于solidworks软件的显卡驱动
  3. QQ2011多开的实现
  4. ANSYS Fluent 压力基求解方法
  5. 安装打印机后默认不是中文的原因及解决方法
  6. 一个让人类窒息的AI工具,或许未来人工智能真的能代替人类!
  7. 当安全遇上AI 阿里聚安全算法挑战赛 队伍经验分享
  8. 全球搜索引擎营销大会(上海站)即将召开
  9. 144均线的神奇用法
  10. 超级好用的json格式化工具