--添加依赖

<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
   <groupId>org.apache.pdfbox</groupId>
   <artifactId>pdfbox</artifactId>
   <version>2.0.12</version>
</dependency>

--最佳实践

package com.dhht.wechat.util;

import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.rendering.PDFRenderer;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.*;

/**
 * @Author: sh
 * @Description: PDFUtil
 * @Date: 11:35 2019/7/1
 */
public class PDFUtil {

/**
     * 将base64字符串转换为PDF在显示到页面中
     * @param base64String
     * @param httpServletResponse
     */
    public static void base64StringToPDFToPage(String base64String, HttpServletResponse httpServletResponse){
        BASE64Decoder decoder = new BASE64Decoder();
        ByteArrayOutputStream baos = null;
        ServletOutputStream sos = null;
        try {
            byte[] bytes = decoder.decodeBuffer(base64String);
            baos = new ByteArrayOutputStream();
            baos.write(bytes); //把byte写进输出流里
            if (baos != null) {
                httpServletResponse.setContentType("application/pdf");
                httpServletResponse.setContentLength(baos.size());
                httpServletResponse.setHeader("Expires", "0");
                httpServletResponse.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
                httpServletResponse.setHeader("Pragma", "public");
                // 设置打印PDF的文件名
                String fileName = "社保证明文件.pdf";
                fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
                httpServletResponse.setHeader("Content-Disposition", "filename=" + fileName);
                sos = httpServletResponse.getOutputStream();
                baos.writeTo(sos); //byte输出流写入servlet输出流
                sos.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                sos.close();
                baos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

/**
     *  将base64编码转换成PDF
     *  @param base64String
     *  1.使用BASE64Decoder对编码的字符串解码成字节数组
     *  2.使用底层输入流ByteArrayInputStream对象从字节数组中获取数据;
     *  3.建立从底层输入流中读取数据的BufferedInputStream缓冲输出流对象;
     *  4.使用BufferedOutputStream和FileOutputSteam输出数据到指定的文件中
     */
    public static void base64StringToPDF(String base64String, String pdfPath/*File file*/){
        File file = new File(pdfPath);// 将原来参数修改为字符串
        BASE64Decoder decoder = new BASE64Decoder();
        BufferedInputStream bin = null;
        FileOutputStream fout = null;
        BufferedOutputStream bout = null;
        try {
            //将base64编码的字符串解码成字节数组
            byte[] bytes = decoder.decodeBuffer(base64String);
            //创建一个将bytes作为其缓冲区的ByteArrayInputStream对象
            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
            //创建从底层输入流中读取数据的缓冲输入流对象
            bin = new BufferedInputStream(bais);
            //创建到指定文件的输出流
            fout  = new FileOutputStream(file);
            //为文件输出流对接缓冲输出流对象
            bout = new BufferedOutputStream(fout);

byte[] buffers = new byte[1024];
            int len = bin.read(buffers);
            while(len != -1){
                bout.write(buffers, 0, len);
                len = bin.read(buffers);
            }
            //刷新此输出流并强制写出所有缓冲的输出字节,必须这行代码,否则有可能有问题
            bout.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bout.close();
                fout.close();
                bin.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

/**
     * PDF转换为Base64编码
     * @param file
     * @return
     */
    public static String pdfToBase64(File file) {
        BASE64Encoder encoder = new BASE64Encoder();
        FileInputStream fin =null;
        BufferedInputStream bin =null;
        ByteArrayOutputStream baos = null;
        BufferedOutputStream bout =null;
        try {
            fin = new FileInputStream(file);
            bin = new BufferedInputStream(fin);
            baos = new ByteArrayOutputStream();
            bout = new BufferedOutputStream(baos);
            byte[] buffer = new byte[1024];
            int len = bin.read(buffer);
            while(len != -1){
                bout.write(buffer, 0, len);
                len = bin.read(buffer);
            }
            //刷新此输出流并强制写出所有缓冲的输出字节
            bout.flush();
            byte[] bytes = baos.toByteArray();
            return encoder.encodeBuffer(bytes).trim();

} catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fin.close();
                bin.close();
                baos.close();
                bout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

/**
     * pdf转jpg
     * @param pdfPath
     * @param jpgPath
     */
    public static void pdfToJpg(String pdfPath,String jpgPath){
        long start = System.currentTimeMillis();
        //pdf路径
        InputStream stream = null;
        try {
            stream = new FileInputStream(new File(pdfPath));//URLUtil.getStream(url);
            // 加载解析PDF文件
            PDDocument doc = PDDocument.load(stream);
            PDFRenderer pdfRenderer = new PDFRenderer(doc);
            PDPageTree pages = doc.getPages();
            int pageCount = pages.getCount();
            for (int i = 0; i < pageCount; i++) {
                BufferedImage bim = pdfRenderer.renderImageWithDPI(i, 200);
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                ImageIO.write(bim, "jpg", os);
                byte[] datas = os.toByteArray();
                FileUtils.writeByteArrayToFile(new File(jpgPath),datas);
            }
            long end = System.currentTimeMillis();
            long time = (end - start) / 1000;
            System.out.println("pdf转jpg耗时: {}s"+time);
        }catch (Exception e){

}

}

/**
     * base64转jpg
     * @param val
     * @param pdfFile
     * @param jpgFile
     */
    public static void base64ToJPG(String val,String pdfFile,String jpgFile){
        base64StringToPDF(val,pdfFile);
        pdfToJpg(pdfFile,jpgFile);
    }

}

转载于:https://www.cnblogs.com/sung1024/p/11178360.html

Base64转PDF、PDF转IMG(使用pdfbox插件)相关推荐

  1. PDF转换成图片(Java pdfbox实现 附中文乱码解决方案)

    PDF转换成图片(Java pdfbox实现) pdf转成图片在java中主流的做法就是pdfbox和icepdf 然而我选择pdfbox 废话不多说上代码 引入依赖 <!--pdfbox--& ...

  2. 前端将base64转换成pdf

    #前端 将base64转成pdf: 提示:这里可以添加学习目标 //content是base64格式 viewPdf(content) {console.log("content" ...

  3. vue3中将base64的pdf文件流转换成pdf并预览(三)——base64数据转pdf pdf工具栏不显示 vue3-seamless-scroll组件的使用-事件捕获 给接口追加数据

    vue3中将base64的pdf文件流转换成pdf并预览(三)--接口base64数据转pdf的处理 & pdf工具栏不显示 & vue3-seamless-scroll组件的使用-事 ...

  4. iframe打开base64格式的PDF显示空白

    使用iframe打开Base64格式的PDF文件显示空白,src的数据也加载出来了,但就是不显示 转换一下思路,如果Base64格式不行的话,把Base64转换成Blob对象,创建一个URL的Blob ...

  5. 手机端html5展示pdf,pdf.js移动端展示预览打开pdf-pdfh5.js

    pdf.js移动端展示预览打开pdf-pdfh5.js 本插件基于pdf.js和jQuery,可手势捏合缩放,支持懒加载(即分段加载). 2019.07.18更新:增加npm install pdfh ...

  6. c语言深度解剖 pdf,c语言深度解剖(解密).pdf.pdf

    c语言深度解剖(解密).pdf.pdf 还剩 130页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: * Str ...

  7. word excel转pdf,pdf合并,插入页码

    word excel转pdf,pdf合并,插入页码 将word转换为pdf,excel转换为pdf.pdf合并及在最终的pdf中添加页码 word转换为pdf String wordPath = &q ...

  8. [PDF]我们经常使用的PDF是什么? PDF, PDF/A, PDF/Archive, OFD

    经常在用PDF,一直也没去做过了解.今天整理备忘如下: PDF 全称 Portable Document Format ,便携式文档格式. PDF格式是跨平台(包括硬件和软件平台)的文件格式,由 Ad ...

  9. java修改pdf内容流_java – 在PDFBox中,如何更改PDRectangle对象的原点(0,0)?

    你可以稍微改变坐标系,但最有可能的事情不会变得更加优雅. 首先-- 首先让我们澄清一些误解: 你假设 In PDFBox, PDRectangle objects' default origin (0 ...

最新文章

  1. python编的游戏可以直接玩吗_怎么用python开发游戏?
  2. 如果刘华强是个码农...
  3. 百亿数据量下,掌握这些Redis技巧你就能Hold全场
  4. before和after怎么区分_如何区分before和after~有时候觉得两者可以通用
  5. 微信WebView关闭后本地cookie无法清除问题
  6. 实例变量和局部变量区别
  7. 谷歌CEO支持欧盟禁止人脸识别!微软总裁:能用“手术刀”就别用“切肉刀”...
  8. Q126:PBRT-V3,VolPathIntegrator(体渲染)流程概述
  9. php redis 扩展安装
  10. STM32G070用HAL库与AT24C08通讯
  11. 三明计算机动漫与游戏制作,福建中小学电脑制作-福建中等职业教育与终身教育网.DOC...
  12. 进入pe系统 原系统启动服务器,pe和启动系统安装系统教程
  13. [渝粤教育] 西南科技大学 仓储与配送管理 在线考试复习资料
  14. Photoshop CS6软件
  15. sys-config使用
  16. 遇到Word文件不能编辑该怎么解决
  17. 刷微信步数,运动排名
  18. 魔兽世界9.5人口最多服务器,魔兽世界最新全球服务器人口普查,国服早已不是世界第一人口大服...
  19. 支持使用vlc在chrome等各种浏览器打开rtmp rtsp 谷歌浏览器Chrome播放rtsp视频流解决方案
  20. npm的插件如何直接在html中使用,webpack中html-webpack-plugin插件的使用(生成多个html页面,引入不一样的js文件)...

热门文章

  1. Kafka幂等性与事务
  2. 国密算法SM3-java实现
  3. mysql设计资源目录售卖_MySQL目录设计一些策略_mysql
  4. 截屏当前界面_电脑屏幕怎么截取,常见的几种电脑截屏方法
  5. 工作篇-佛山三水恒大-2020.11.13
  6. 图解算法学习笔记(六):广度优先搜索
  7. 5.Loops and List Comprehensions
  8. java poi 3.13_Java 读取Excl文件 (poi-3.13)
  9. 大一计算机绩点3算什么水平,绩点只有3?我可以解释一下
  10. mysql录数据总是错误_MySQL数据库出错