JAVA将图片的base64转成PDF的base64字符串

Qt之打印pdf文档   mainwindow.h如下: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow ( QWidget *parent = 0 ); ~MainWindow 阅读详情
由于需求需要的是PDF的base64,所以中转了一下,比价麻烦了,代码如下:
/**
 * Description: 将图片的base64转成PDF的base64编码
 * @param  qrCodeUrl  需要转成二维码的URL字符串
 * @Author zhanglifeng
 * Create Date: 2020年3月30日 下午8:25:37
 */
public String imageBase64ToPdfBase64(String qrCodeUrl,String custOrderNbr){
    String bas64ImageStr="";//图片的base64编码
    String pdfBase64 = "";//PDF的base64编码

    try{
        //1.根据微厅返回的请求参数生成二维码 base64 编码
        bas64ImageStr = QrcodeUtils.encoderQRCodeToBase64(qrCodeUrl, "png", 10);
        bas64ImageStr = bas64ImageStr.replaceAll("\r|\n", "");

        //2.获取要存储文件的路径,即获取src资源文件编译后的路径(即classes路径)
        String url = this.getClass().getClassLoader().getResource("").getPath();
        //对路劲进行拼接添加
        String serviceImgPath = url + "serviceImg/";//服务器上存放二维码图片的路径
        String servicePdfPath = url + "servicePdf/";//服务器上存放二维码PDF的路径

        //3.判断服务器是否存在此文件夹,不存在则新建
        File file1 =new File(serviceImgPath);
        File file2 =new File(servicePdfPath);
        if(!file1.exists()  && !file1.isDirectory()) {
            file1.mkdir();
        }
        if(!file2.exists()  && !file2.isDirectory()) {
            file2.mkdir();
        }
        //4.二维码图片的文件名字和最终保存的二维码文件路径
        String fileImageName = custOrderNbr+"_phone.png";//二维码图片路径名字
        String filePdfName = custOrderNbr+"_phone.pdf";//PDF图片路径名字
        String lastImagePath = serviceImgPath+fileImageName;//最终二维码图片存放的路径
        String lastPdfPath = servicePdfPath+filePdfName;//最终二维码PDF存放的路径

        //5.首先保存二维码图片
        Base64ToImage(bas64ImageStr,lastImagePath);

        //6.然后把二维码图片转成PDF二维码文件进行储存
        ImagePdf.image2pdf(lastImagePath,lastPdfPath);

        //7.最后将PDF转成base64,PDF的base64才是最终能推送到签字版的
        File file3 =new File(lastPdfPath);
        pdfBase64 = PDFToBase64(file3);
        pdfBase64 = pdfBase64.replaceAll("\r|\n", "");

        //8.需要删除创建的临时文件
        File imagefile = new File(lastImagePath);
        if(imagefile.exists()){
            imagefile.delete();
        }
        File pdffile = new File(lastPdfPath);
        if(pdffile.exists()){
            pdffile.delete();
        }

    }catch (Exception e){
        e.printStackTrace();
    }
    return pdfBase64;
}

 

下面是直接转成图片的base64代码:

/**
 * Description: 将图片的base64字符串,直接供前台展示
 * @param  qrCodeUrl   需要转成二维码的URL
 * @Author zhanglifeng
 * Create Date: 2020年3月30日 下午8:25:37
 */
public String imageBase64ToPdfBase64(String qrCodeUrl,String custOrderNbr){
    String bas64ImageStr="";//图片的base64编码

    try{
        //1.根据微厅返回的请求参数生成二维码 base64 编码
        bas64ImageStr = QrcodeUtils.encoderQRCodeToBase64(qrCodeUrl, "png", 10);
        bas64ImageStr = bas64ImageStr.replaceAll("\r|\n", "");

    }catch (Exception e){
        e.printStackTrace();
    }
    return bas64ImageStr;
}

下面是二维码工具类:

/**
 * @Date: 2020/3/27 17:38
 * @Author: Lifeng.Zhang
 * @Description: 二维码处理工具类
 */
public class QrcodeUtils {

    /**
     * 根据参数生成二维码base64编码
     *  容错率默认M,二维码内容支持大小为10
     * @param content 存储内容
     * @param imgType 图片类型
     * @param imgSize 二维码图片大小像素
     * @param qrWidth 二维码 像素宽度  此值的60倍为图片大小  即:qrWidth*60(约等于) <=imgSize(需要微调)
     * @return String
     */
    public static String encoderQRCodeToBase64(String content, String imgType, int imgSize,int qrWidth) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            BufferedImage image = encoderQRCodeFixSize(content, imgType, imgSize, qrWidth);
            if (image == null) {
                return "";
            }
            ImageIO.write(image, imgType, baos);
            return Base64.encodeBytes(baos.toByteArray());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                baos.flush();
                baos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "";
    }

    /**
     * 生成二维码(QRCode)图片的公共方法
     * 生成后的效果需要微调 imgSize 及qrWidth来达到最佳图片效果
     * 如:imgSize=244时,qrWidth=4
     *
     * @param content 存储内容
     * @param imgType 图片类型
     * @param imgSize 二维码图片大小像素
     * @param qrWidth 二维码 像素宽度  此值的60倍为图片大小  即:qrWidth*60(约等于) <=imgSize(需要微调)
     * @return BufferedImage
     */
    public static BufferedImage encoderQRCodeFixSize(String content, String imgType, int imgSize, int qrWidth) {
        BufferedImage bufImg = null;
        try {
            Qrcode qrcodeHandler = new Qrcode();
            // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
            qrcodeHandler.setQrcodeErrorCorrect('M');
            //以字符串存
            qrcodeHandler.setQrcodeEncodeMode('B');
            // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
            qrcodeHandler.setQrcodeVersion(6);
            // 获得内容的字节数组,设置编码格式
            byte[] contentBytes = content.getBytes("UTF-8");
            // 图片尺寸
            bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
            Graphics2D gs = bufImg.createGraphics();
            // 设置背景颜色
            gs.setBackground(Color.WHITE);
            gs.clearRect(0, 0, imgSize, imgSize);

            // 设定图像颜色> BLACK
            gs.setColor(Color.BLACK);
            // 设置偏移量,不设置可能导致解析出错
            int pixoff = 7;
            // 输出内容> 二维码
            if (contentBytes.length > 0 && contentBytes.length < 2048) {
                boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
                for (int i = 0; i < codeOut.length; i++) {
                    for (int j = 0; j < codeOut.length; j++) {
                        if (codeOut[j][i]) {
                            gs.fillRect(j * qrWidth + pixoff, i * qrWidth + pixoff, qrWidth, qrWidth);
                        }
                    }
                }
            } else {
                throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
            }
            gs.dispose();
            bufImg.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bufImg;
    }

    /**
     * 根据参数生成二维码base64编码
     *
     * @param content
     * @param imgType
     * @param size
     * @return
     * @see
     */
    public static String encoderQRCodeToBase64(String content, String imgType, int size) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            BufferedImage image = encoderQRCode(content, imgType, size, 10);
            if (image == null) {
                return "";
            }
            ImageIO.write(image, imgType, baos);
            return Base64.encodeBytes(baos.toByteArray());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                baos.flush();
                baos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "";
    }

    /**
     * 生成二维码(QRCode)图片
     *
     * @param content 存储内容
     * @param imgType 图片类型
     * @param size    二维码尺寸
     */
    public static BufferedImage encoderQRCode(String content, String imgType, int size, int margin) {
        try {
            BufferedImage bufImg = encoderQRCodeCommon(content, imgType, size);
            int newWidth = bufImg.getWidth() + margin;
            int newHeight = bufImg.getHeight() + margin;
            BufferedImage newImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D gs = newImage.createGraphics();
            gs.setColor(Color.white);
            gs.fillRect(0, 0, newWidth, newHeight);
            gs.drawImage(bufImg, margin / 2, margin / 2, null);
            return newImage;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 生成二维码(QRCode)图片的公共方法
     *
     * @param content 存储内容
     * @param imgType 图片类型
     * @param size    二维码尺寸  0到40
     * @return BufferedImage
     */
    private static BufferedImage encoderQRCodeCommon(String content, String imgType, int size) {
        BufferedImage bufImg = null;
        try {
            Qrcode qrcodeHandler = new Qrcode();
            // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
            qrcodeHandler.setQrcodeErrorCorrect('L');
            //以字符串存
            qrcodeHandler.setQrcodeEncodeMode('B');
            // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
            qrcodeHandler.setQrcodeVersion(6);
            // 获得内容的字节数组,设置编码格式
            byte[] contentBytes = content.getBytes("utf-8");
            // 图片尺寸
            int imgSize = 67 + 12 * (size - 1);
            bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
            Graphics2D gs = bufImg.createGraphics();
            // 设置背景颜色
            gs.setBackground(Color.WHITE);
            gs.clearRect(0, 0, imgSize, imgSize);

            // 设定图像颜色> BLACK
            gs.setColor(Color.BLACK);
            // 设置偏移量,不设置可能导致解析出错
            int pixoff = 5;
            // 输出内容> 二维码
            if (contentBytes.length > 0 && contentBytes.length < 2000) {
                boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
                for (int i = 0; i < codeOut.length; i++) {
                    for (int j = 0; j < codeOut.length; j++) {
                        if (codeOut[j][i]) {
                            gs.fillRect(j * 4 + pixoff, i * 4 + pixoff, 4, 4);
                        }
                    }
                }
            } else {
                throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
            }
            gs.dispose();
            bufImg.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bufImg;
    }
}

 

 

Base64字符串解码成png或者pdf Base64字符串解码成png或者pdf package Demo; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.ByteArrayInputStream;imp... 阅读详情

相关推荐

【Java实战】基于 PDFBox 实现 PDF Base64 转图片

本文介绍了一个基于Apache PDFBox封装的Java工具类PdfToImageUtil,用于将Base64格式的PDF转换为图片字节流。该工具类具有以下特点:1. 支持自定义分辨率(DPI)和图片格式(如jpg/png);2. 自动处理Base64字符串中的头部标识;3. 使用try-with-resources确保资源安全释放;4. 提供单页转换功能,并可通过扩展支持多页PDF处理。文章详细展示了工具类的实现代码、使用示例和优化建议,适合集成到SpringBoot等Java框架中,解决

00后Java全栈 | 深耕智能制造 | DevOps实践者 299

PDF处理控件Aspose.PDF功能演示:使用Java将Base64字符串转换为PDF/JPG/PNG图像

Base64字符串以ASCII格式显示数据。它很流行在HTML网页或样式表中嵌入嵌入式图像和其他信息。在本文中,将学习使用Java 将Base64字符串转换为PDF或JPG和PNG之类的图像。

励志做最业余的专业博主,控件产品可以私我~ 4313

Qt导出PDF文件的两种方法

设计软件界面

m0_60352504的博客 4600

java pdf的base64 转 pdf

java pdf的base64 转 pdf

qq_42320804的博客 6603

java 把PDF转换成BASE64

java 把PDF转换成BASE64,java 把PDF转换成BASE64,java 把PDF转换BASE64,java 把PDF转换成BASE64java 把PDF转换成BASE64

程序化广告行业(2/89):从程序化广告深挖数据处理技巧

大家好!我一直希望能和大家在技术学习的道路上携手共进,这也是我写这一系列博客的初衷。上次我们一起学习了Python基础的数据处理知识,这次咱们借助一本程序化广告手册,深入挖掘数据处理的更多技巧。这本手册涵盖了程序化广告从概念到技术实现的诸多方面,而其中处处都涉及到数据处理,相信会给我们带来不少收获

yyy173611的博客 4572

java base64转图片并保存_java 后台将base64字符串保存为图片的方法

本文介绍了java 后台将base64字符串保存为图片的方法,分享给大家,具体如下:直接上代码:import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import sun.misc.BASE64Decoder;import s...

weixin_29209825的博客 941

树莓派与stm32通信超详细解答过程

笔者之前发过关于stm32与openmv通信的教程,在学习了几天opencv后,想实现树莓派4B与stm32进行通信。于是上网查询资料,最后实现了两者之间的通信,相信这对大多数电赛人都很有帮助,opencv的识别效果是远高于openmv以及K210的。在此我参考了以下资料辅助我学习,大家可以参考。基于树莓派4B与STM32的UART串口通信实验(代码开源)_树莓派4b串口波特率-优快云博客。

Halcyon0804的博客 5465

base64 显示图片和pdf

base64 显示图片和pdf,通过base64 编码在页面上显示图片和pdf,实现如下 1、图片 java 代码,将图片转成 base64 字符串 package com.tmp; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Base64; public clas.

悟世君子的博客 1万+

ESP32对接百度智能云语音识别:从硬件配置到API调用的完整指南

本文详细介绍了ESP32对接百度智能云语音识别的完整流程,从硬件配置到API调用,涵盖麦克风选择、音频处理、错误处理及性能优化等关键环节。通过实战案例展示如何实现低成本、高效率的语音交互方案,特别适合智能硬件开发者参考。

weixin_29198045的博客 375

手把手复现金蝶云星空V8.1文件上传漏洞(附完整POC与修复方案)

本文深度解析金蝶云星空V8.1文件上传漏洞,提供详细的漏洞复现步骤与完整POC,涵盖技术原理、测试环境搭建及验证流程。同时给出多维防护方案,包括官方补丁部署、临时缓解措施和长期安全加固建议,帮助企业有效防范任意文件上传风险。

weixin_30505225的博客 184

java实现图片的base64编码转换成pdf的base64位编码

java实现图片的base64编码转换成pdf的base64位编码

hou_tao_gu的博客 5197

从零开始使用matlab实现EKF-SLAM算法(含完整代码)

扩展卡尔曼滤波器同步定位与建图 (EKF-SLAM) 算法建立在 EKF 的基础上,集成了 EKF 的功能,可解决机器人技术中最具挑战性的问题之一:同时定位与建图 (SLAM)。 EKF-SLAM采用EKF方法来同时估计机器人的状态和周围环境的布局,而无需事先了解位置。 这种双重功能对于在未知环境中运行的自主系统至关重要,使它们能够在绘制区域地图时有效导航。 EKF-SLAM 算法一直是自动驾驶车辆和机器人系统开发的基石,为处理现实世界环境中固有的不确定性提供了一个强大的框架。

mjmmm的博客 6636

java 图片base64 转 pdf

思路:base64 -> multipartFile - > pdf base64 -> multipartFile /** * 将 图片base64 - > MultipartFile * @param base64 * @return */ public static MultipartFile base64MultipartFile(String base64) { try { String[] baseStr = base64.spli

weixin_42404521的博客 3764

医学图像中的小目标病灶检测难题:我的硕士研究总结与思考

医学图像中的小目标检测和分割,主要指在CT、MRI、超声等医学影像中识别和分割微小病灶或细小结构。这些小目标通常体积小、边界模糊、特征不明显,却往往是关键病灶,例如肺部小结节、脑微出血、乳腺微钙化等。

weixin_45638136的博客 2370

潜在图神经网络学习笔记(Latent Graph Neural Networks for Human Skeleton-based Action Recognition)

在本文中,我们从一个新的角度来解决这个问题,通过将非结构化的骨架数据映射到潜在空间,如图2所示,这里称为潜在特征空间或嵌入空间,其中一组项嵌入在一个流形中[ 1 ],并且在潜在空间中彼此更相似的项被放置在彼此更接近的位置。潜在空间中的位置可以被认为是由一组潜在变量定义的,这些潜在变量来源于对象的相似性。将骨架数据嵌入到流形中,消除了远近邻居之间的冗余依赖关系,以解决加权问题。得到具有多尺度聚合特征的稀疏图矩阵结构,以更好地理解骨骼关节的直接加权信息。

qq_45631885的博客 490

base64格式的图片和base64格式的pdf如何预览

后端返回一大串的字符串,需要前端自己转成图片 注意点:"data:image/png;base64," this.state = { backImg: "" } this.imgsrc="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyM

q1ngqingsky的博客 1万+

从毫K级温控到分子级洁净:光刻机环境控制系统的技术演进与专利格局

摘要 光刻机环境控制系统是半导体制造中的"隐形精密工程",通过毫K级温度控制(±0.002℃)、超高洁净度(ISO Class 1)等核心技术为纳米级光刻提供环境保障。本文系统分析了温度、湿度、洁净度、流场和压力控制五大技术方向的发展趋势,揭示了从单参数控制向多参数协同智能控制的转型路径。研究显示:1)温度控制正从PID向神经网络智能控制演进;2)EUV光刻将湿度控制推至ppbv级;3)洁净度控制扩展到分子级污染物管理。头部厂商中,ASML侧重系统集成,Nikon专注浸没流场,Canon

huanghm88的专栏 322

JAVA怎么将PDF的base64转换成jpg的base64

这句是输出图片的方法,几个参数分别是,图片对象,0,0,图片的长,高,null。1、大图片的等待时间稍长,可以给用户先预览一个base64的图片增加等待耐心,方法名为getImgBase64,这里都一并给出了 解决的隐患:上面这个方案会出现我需要一个500k的照片,压到了520k之后,再压了一次。由于符号+和符号/是不允许出现在Url中的,所以,产生了Url安全的Base64算法,所谓的Url安全的Base64算法,其实主要包含两个方面。拿着对应的编码,解码后还是能得到对应图片的,所以可以证明以上结论。

aoxiangchina的博客 1932

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java 实现 :Base64字符串 和 文件(图片,pdf 等)之间的相互转换

import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; impo...

球球的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java中将pdf转成base64_将pdf的base64编码格式转为img的base64编码格式

通过pdf的base64编码格式直接转为img的base64编码格式:public static String base64PdfToJpgBase64(String base64Pdf) {if (StrUtil.isEmpty(base64Pdf)){return null;}String jpg_base64 = null;int pdfdpi = 200;Base64Decoder dec...

weixin_33565558的博客 3247

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java 字符串转pdf_java 实现 :Base64字符串 和 文件(图片,pdf 等)之间的相互转换...

import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java...

weixin_33179966的博客 1842

Java Base64工具类,提供常用(文件、图片、PDF、URL)转换方法,欢迎留言完善...(原创博文,欢迎转载)

Java Base64工具类,提供常用(文件、图片、PDF、URL)转换方法

Java Punk 8145

base64转pdf pdf转image

maven <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.6</version> </dependency> <!-- https://mvnre...

shengyongchen的博客 3482

JAVA实现文件转Base64字符串、Base64工具类,提供常用(文件、图片、PDF、URL)转换方法

此工具包提供了常用的方法,如下: 文件(图片、pdf等)【转】Base64; Base64【转】文件(图片、pdf等); text明文【转】Base64字符串; text的Base64字符串【转】明文; 将pdf的Base64编码格式【转为】img的Base64编码格式,只限最后一页的Base64编码; 将pdf的Base64编码格式【转为】img的Base64编码格式,并将所有页合成一张图片的Base64编码;

qq_40963569的博客 1万+

base64-图片传输

哈罗大家好,又到了分享时间了。大家看标题就知道,但是我也只是作为一个新人的视角去认识这个base64,大概了解了一下,没有太深入,因为前段有很好的base64工具,java也有BASE64Decoder包,所以我就以一个如何使用的角度来总结一下。 说来惭愧,base64以前也听过但是没用使用过,这次小程序项目接触到的。小程序用有个电子签章需要用户签名,接着将签名后的图片发送给后台存储, 认识b...

破鞋何苦阑珊的博客 3万+
上一篇: java mkdir()和mkdirs()的区别
下一篇: GIT把分支代码合并到主分支
张丽峰
博客等级 码龄11年 21粉丝 29原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值