当前位置: 首页 > news >正文

PDF转成图片

使用开源库Apache PDFBox将PDF转换为图片

依赖

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.4</version>
</dependency>
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.4</version>
</dependency>
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import javax.imageio.ImageIO;import cn.hutool.core.lang.UUID;
import com.zxzx.ssm.common.constant.SsmConstant;
import org.apache.commons.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;/*** @author admin*/
public class PDFToImageConverter {/*** 按照页数返回图片-转成BASE64*/public static List<String> pdfToPng(File pdfFile) {List<String> list = new ArrayList<>();try (PDDocument doc = PDDocument.load(pdfFile)) {PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = 0; i < pageCount; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144);File file = new File(SsmConstant.TEMP_PIC + "/" + pdfFile.getName() + "_" + (i + 1) + ".png");ImageIO.write(image, "png", file);InputStream inputStream = Files.newInputStream(file.toPath());byte[] byteArray = IOUtils.toByteArray(inputStream);String s = Base64.getEncoder().encodeToString(byteArray);list.add(s);}} catch (IOException e) {e.printStackTrace();}return list;}/*** 转换到同一张图片*/public static String pdfToPngCollect(File file) {String outPicPath = SsmConstant.TEMP_PIC + UUID.fastUUID() + ".png";try (PDDocument doc = PDDocument.load(file)) {PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();List<BufferedImage> imageList = new ArrayList<>();int height = 0;int weight = 0;for (int i = 0; i < pageCount; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144);height += image.getHeight();weight = Math.max(weight, image.getWidth());imageList.add(image);}BufferedImage mergedImage = new BufferedImage(weight, height, BufferedImage.TYPE_INT_RGB);Graphics2D g = mergedImage.createGraphics();int accHeight = 0;for (BufferedImage image : imageList) {g.drawImage(image, 0, accHeight, null);accHeight += image.getHeight();}g.dispose();File outputfile = new File(outPicPath);ImageIO.write(mergedImage, "jpg", outputfile);} catch (IOException e) {e.printStackTrace();}return outPicPath;}}

http://www.lryc.cn/news/239844.html

相关文章:

  • Qt无边框设计
  • 规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法
  • C语言二十三弹---求第N项斐波那契数列的值
  • Pickcode:教孩子们编码的新视觉语言
  • 乐划锁屏插画大赏热度持续,进一步促进价值内容的创造与传播
  • 【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)
  • 2023亚太杯数学建模B题:玻璃温室中的微气候法规,思路模型代码论文
  • Eclipse常用设置-乱码
  • MySQL面试,MySQL事务,MySQL锁,MySQL集群,主从,MySQL分区,分表,InnoDB
  • HarmonyOS应用开发者认证题目满分指南
  • openssl+ SM2 + linux 签名校验开发实例(C++)
  • 有关Vue、微信小程序、UniApp中的CSS中的宽度width单位、自适应
  • 黑马React18: ReactRouter
  • 算法刷题-动态规划-1
  • 分享一篇很就以前的文档-VMware Vsphere菜鸟篇
  • QT中的lambda表达式
  • linux文件I/O:文件锁的概念、函数以及代码实现
  • MySQL数据库系统教程
  • 这样写postman实现参数化,阿里p8都直呼牛逼
  • 【Qt-25】控件篇
  • 《算法通关村——反转字符串中的单词问题解析》
  • C++使用Tensorflow2.6训练好的模型进行预测
  • 5-1 Java 网络编程
  • 汇编-CALL和RET指令
  • STM32_5(中断)
  • docker 部署hbase 并且java Api连接
  • EasyExcel listener无法通过Autowired注入xxMapper
  • Android Spannable 使用​注意事项
  • Apache访问控制
  • 二、类与对象(二)