分页预览主要解决两个问题

(1)前端下载整个pdf比较慢。

(2) 前端可以下载整个文件流,不安全。

若要分页预览,也有两种方案:

(1)把pdf 转成一张一张的图片。

(2)把pdf 再次截取from-to页,然后生成一个新的pdf文件。

pdf 分页截取截取生成新的pdf,转图片 代码

  <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.16</version>
</dependency>
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.16</version>
</dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency></dependencies>
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;import javax.imageio.ImageIO;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;public class PdfToImageUtil {/*** dpi越大转换后越清晰,相对转换速度越慢*/private static final Integer DPI = 100;/*** 转换后的图片类型*/private static final String IMG_TYPE = "png";public static void main1(String[] args) throws FileNotFoundException, IOException {pdfToImage(new FileInputStream(new File("C:\\Users\\xxx\\Desktop\\temp\\zhuanhuan\\360Teams移动端使用简介.pdf")));}public static void main(String[] args) throws FileNotFoundException, IOException {partitionPdfFile("C:\\Users\\xxx\\Desktop\\temp\\zhuanhuan\\360Teams移动端使用简介.pdf", "C:\\Users\\xxx\\Desktop\\temp\\zhuanhuan\\360Teams移动端使用简介2.pdf", 1, 1);
}/*** PDF转图片 InputStream 和 OutputStream最好都不要落地,直接存储到s3** @param fileContent PDF文件的二进制流* @return 图片文件的二进制流*/public static List<String> pdfToImage(InputStream inputStream) throws IOException {List<String> imgKeys = new ArrayList<>();try (PDDocument document = PDDocument.load(inputStream)) {PDFRenderer renderer = new PDFRenderer(document);for (int i = 0; i < document.getNumberOfPages(); ++i) {BufferedImage bufferedImage = renderer.renderImageWithDPI(i, DPI);String imageKey = i + "_" + UUID.randomUUID().toString().replace("-", "");// 自己确定文件key的格式// 需要几页,就存几页即可。try (OutputStream outputStream = new FileOutputStream("C:\\Users\\xxx\\Desktop\\temp\\zhuanhuan\\" + imageKey + "." + IMG_TYPE)) {imgKeys.add(imageKey);ImageIO.write(bufferedImage, IMG_TYPE, outputStream);} catch (Exception e) {e.printStackTrace();}}}return imgKeys;}/*** PDF转图片** @param fileContent PDF文件的二进制流* @return 图片文件的二进制流*/public static List<byte[]> pdfToImage(byte[] fileContent) throws IOException {List<byte[]> result = new ArrayList<>();try (PDDocument document = PDDocument.load(fileContent)) {PDFRenderer renderer = new PDFRenderer(document);for (int i = 0; i < document.getNumberOfPages(); ++i) {BufferedImage bufferedImage = renderer.renderImageWithDPI(i, DPI);ByteArrayOutputStream out = new ByteArrayOutputStream();ImageIO.write(bufferedImage, IMG_TYPE, out);result.add(out.toByteArray());}}return result;}/*** 截取pdf某几页,生成一个新的pdf* @param pdfFile* @param newFile* @param from* @param end*/public static void partitionPdfFile(String pdfFile, String newFile, int from, int end) {Document document = null;PdfCopy copy = null;try {PdfReader reader = new PdfReader(pdfFile);int n = reader.getNumberOfPages();if (end == 0) {end = n;}document = new Document(reader.getPageSize(1));copy = new PdfCopy(document, new FileOutputStream(newFile));document.open();for (int j = from; j <= end; j++) {document.newPage();PdfImportedPage page = copy.getImportedPage(reader, j);copy.addPage(page);}document.close();} catch (Exception e) {e.printStackTrace();}}
}

pdf分页分片预览,pdf截取,pdf转图片相关推荐

  1. 在线文件/文档预览/分页分片预览 之开源kkfileview(word转pdf,pdf截取,pdf转图片,Aspose jobConverter , OpenOffice ,libreoffice )

    前提说明 浏览器不能直接浏览word文件,但可以浏览pdf文件!!! 可以后台把word,excel 转成成pdf.然后给前端预览: 业界常用的开源工具有:Aspose jobConverter ,  ...

  2. 实现pdf文件在线预览(需要PDF文件的路径)

    工作中需要完成一个PDF在线预览的功能,最简单的方法还是使用pdf的插件. 1.首先下载插件 链接:https://pan.baidu.com/s/1q4zuHrmjJL9QSEn2Iy5O9Q 提取 ...

  3. pdf.js —— 在线预览下载打印pdf文件插件,实现的两种方式

    ViewerJS简介 ViewerJS的繁重工作是由这些令人敬畏的项目完成的: PDF.js(由Mozilla提供) WebODF(由KO GmbH提供) 运行ViewerJS就像创建链接一样简单.您 ...

  4. pdf.js——在线预览下载打印pdf文件插件

    html页面使用 下载PDF.js, http://mozilla.github.io/pdf.js/getting_started/#download 将 pdfjs 文件夹 放到 项目static ...

  5. pdfjs-dist 实现pdf文件在线预览

    pdfjs-dist 实现pdf文件在线预览 实现效果 实现过程 (1)安装pdfjs-dist (2)代码部分 (3)原理 项目要求实现pdf文件在线预览,并且pdf预览通过上下页滚动pdf,且兼容 ...

  6. vue项目实现前端预览word和pdf格式文件

    最近做vue项目遇到一个需求,就是前端实现上传word或pdf文件后,后端返回文件对应的文件流,前端需要在页面上展示出来.word预览简单一些,pdf预览我试过pdfjs,vue-pdf总是报各种奇奇 ...

  7. java实现文件预览(Office转PDF)

    一.首先下载安装openOffice软件,下载地址:http://www.openoffice.org/download/index.html 当然,下载速度特别慢,下面是百度网盘地址. 链接:htt ...

  8. 怎样使用Mac的预览应用在PDF上签名?

    如何在PDF上签名?首先想到的是先把文件打印出来,等签完名字后再扫描进电脑里,听起来就很麻烦,现在用Mac的预览应用就可以跳过打印的步骤,轻松完成签名. 用Mac的预览应用在PDF上签名具体步骤 当你 ...

  9. vue pdf下载及预览(移动端)

    本文使用的是 vue-pdf,其实还有其他的很多比如pdf.js,只不过觉得这个和vue结合了应该不用下载一堆东西,直接npm install就可以,所以采用vue-pdf来撰写pdf下载及预览. 无 ...

  10. java flexpaper_java web word文件 pdf文件在线预览源码(flexpaper)

    [实例简介]java web word文件 pdf文件在线预览源码 经过测试 [实例截图] [核心代码] BrowsenOnline html, body{ height:100%; } body { ...

最新文章

  1. 基于Python的特征自动化选择:两行代码完成特征工程
  2. 【附可运行代码】剑指 Offer 16. 数值的整数次方
  3. eclipse中的WEB项目打包部署到tomcat .
  4. OpenCV手写数字字符识别(基于k近邻算法)
  5. Linux的文件系统及文件缓存知识点整理
  6. BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)
  7. 终于等到你——ggplot2树状图
  8. 【安卓项目】期末大作业——“记账宝”APP开发案例
  9. UIAutomator2常用类之UiObject2
  10. java抖音字符视频_java爬取新版抖音无水印视频教程(2020/09/14附带java代码)
  11. 万字长文!多图预警!46张图彻底搞懂 IP 基础知识!
  12. 如何让 MacBook 最适化 macOS Big Sur 和 Monterey 电池
  13. 超算优化重在存储,DAOS助力瑞金打造先进的生信大数据平台
  14. AcroFields设置PDF文本域
  15. 数据结构与算法分析:实现list【理解 iter++ 和 ++iter 】
  16. 手机连接Charles代理,手机上不了网
  17. National day present
  18. 邮件群发数量多少?如何邮件群发数量日发10W?
  19. centos7针对xfs文件系统缩小home目录并动态扩容根目录
  20. 大数据分析:消费金融公司利润

热门文章

  1. PreferenceScreen 的使用
  2. 如何快速激活数据恢复软件
  3. 设计师配色宝典:教你从零开始学配色
  4. 【设计师配色宝典!教你从零开始学配色】转
  5. scala入门学习之类的使用
  6. 自动化办公-Python处理Excel生成试卷
  7. 冰河木马学习之监听服务端失败
  8. 计算机操作系统课后答案--郁红英版
  9. AI2021下载 Illtrator2021安装教程
  10. 【eoeAndroid社区索引】android 条形码的知识汇总