不使用前端的pdf.js,通过pdfbox转换pdf为图片,拼接成html实现pdf前端预览

一般情况,pdf类型的文件在前端预览,都是通过前端插件,或者获取源文件浏览器自带的工具预览,由于项目中,是前后端分离,前端不想使用pdf.js类的插件,预览的要求又是只能看不能下载,所以只能另外想别的办法处理,参照之前openoffice将word/excel能转换成html的功能思路,想到能否将pdf也转换成html进行预览

于是就找到了apache的一个pdfbox的工具包能将pdf转换成图片,于是想到一个实现方案

1.将pdf转换成图片,图片保存在文件服务器,能通过get请求和图片地址获取

2.拼接一段html文件的代码,将每一个图片作为img标签的src插入html代码中

3.最后将这段html代码生成一个html文件,预览时,直接获取这个html就能查看

1.引入包

<dependency>

<groupId>org.apache.pdfbox</groupId>

<artifactId>pdfbox</artifactId>

<version>2.0.19</version>

</dependency>

<dependency>

<groupId>org.apache.pdfbox</groupId>

<artifactId>pdfbox-tools</artifactId>

<version>2.0.19</version>

</dependency>

2.转换代码和生成图片代码以及拼接html生成文件代码

public static String pdf2Html(File file, String savePath, String saveUrl) throws Exception {

String ht

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 通过 pdfbox 库可以实现图片PDF 的功能,同时也可以通过该库对 PDF 中的图片进行压缩。以下是一个示例代码: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import java.io.File; import java.io.IOException; public class ImageToPdf { public static void main(String[] args) throws IOException { // 创建一个空白的PDF文档 PDDocument document = new PDDocument(); // 加载要转换PDF图片文件 File imageFile = new File("image.jpg"); // 创建一个页面对象 PDPage page = new PDPage(); // 将图片转换PDF图像对象 PDImageXObject image = JPEGFactory.createFromImage(document, ImageIO.read(imageFile), 0.5f); // 在页面上添加图像 page.getCropBox(); page.setMediaBox(image.getCropBox()); page.setRotation(0); page.setArtBox(image.getCropBox()); page.setBleedBox(image.getCropBox()); page.setTrimBox(image.getCropBox()); PDPageContentStream contentStream = new PDPageContentStream(document, page); contentStream.drawImage(image, 0, 0); // 关闭页面内容流 contentStream.close(); // 将页面添加到文档中 document.addPage(page); // 保存PDF文件 document.save("image.pdf"); // 关闭PDF文档 document.close(); } } ``` 如果需要在压缩 PDF 中的图片,可以使用下面的代码对 PDF 中的所有图片进行压缩: ```java import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory; import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import java.io.File; import java.io.IOException; public class CompressPdfImages { public static void main(String[] args) throws IOException { // 加载PDF文件 PDDocument document = PDDocument.load(new File("input.pdf")); // 遍历所有页面 for (PDPage page : document.getPages()) { // 获取页面中的所有图像 for (PDImageXObject image : page.getResources().getXObjectNames().stream() .map(x -> page.getResources().getXObject((COSName) x)) .filter(x -> x instanceof PDImageXObject) .map(x -> (PDImageXObject) x) .toArray(PDImageXObject[]::new)) { // 如果图像是JPEG格式,则进行压缩 if ("jpg".equals(image.getSuffix())) { PDImageXObject compressedImage = JPEGFactory.createFromImage(document, image.getImage(), 0.5f); page.getResources().add(compressedImage); page.getResources().remove(image.getName()); } // 如果图像是PNG格式,则进行压缩 else if ("png".equals(image.getSuffix())) { PDImageXObject compressedImage = LosslessFactory.createFromImage(document, image.getImage(), 0.5f); page.getResources().add(compressedImage); page.getResources().remove(image.getName()); } } } // 保存压缩后的PDF文件 document.save("output.pdf"); // 关闭PDF文档 document.close(); } } ``` 如果需要将多个 PDF 文件合并为一个 PDF 文件,可以使用下面的代码: ```java import org.apache.pdfbox.multipdf.PDFMergerUtility; import java.io.File; import java.io.IOException; public class MergePdfFiles { public static void main(String[] args) throws IOException { // 创建一个PDF合并工具对象 PDFMergerUtility merger = new PDFMergerUtility(); // 添加要合并的PDF文件 merger.addSource(new File("file1.pdf")); merger.addSource(new File("file2.pdf")); merger.addSource(new File("file3.pdf")); // 合并PDF文件 merger.setDestinationFileName("merged.pdf"); merger.mergeDocuments(null); } } ``` 以上是 Java 中使用 pdfbox实现图片PDF、压缩 PDF图片、合并多个 PDF 文件为一个 PDF 文件的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值