前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PDF的Base64转换Png/JpgBase64

PDF的Base64转换Png/JpgBase64

作者头像
芈亓
发布2023-06-04 16:28:29
7240
发布2023-06-04 16:28:29
举报
文章被收录于专栏:笔记2022笔记2022

如题,下面为代码块:

/** * @Param [pdfBase64Str, changeType] * @return java.lang.String **/ public static String pdfToPngOrJpg(String pdfBase64Str,String changeType){ //这个base64是pdf的base64 //想转jpg就将下面的png改为jpg String base64 = pdfBase64Str; if (StringUtils.isEmpty(base64)){ System.out.println(“”); } String jpg_base64 = null; BASE64Decoder decoder = new BASE64Decoder(); try { // Base64解码 byte[] pdf_bytes = decoder.decodeBuffer(base64); PDDocument doc = PDDocument.load(pdf_bytes); int size = doc.getNumberOfPages(); /图像合并使用的参数/ //定义宽度 int width = 0; // 保存一张图片中的RGB数据 int[] singleImgRGB; // 定义高度,后面用于叠加 int shiftHeight = 0; //保存每张图片的像素值 BufferedImage imageResult = null; // 利用PdfBox生成图像 PDDocument pdDocument = doc; PDFRenderer renderer = new PDFRenderer(pdDocument); /根据总页数, 按照50页生成一张长图片的逻辑, 进行拆分/ // 每50页转成1张图片 int pageLength = size; //有多少转多少 // 总计循环的次数 int totalCount = pdDocument.getNumberOfPages() / pageLength + 1; for (int m = 0; m < totalCount; m++) { for (int i = 0; i < pageLength; i++) { int pageIndex = i + (m * pageLength); if (pageIndex == pdDocument.getNumberOfPages()) { System.out.println(“循环次数 m = " + m); break; } // 96为图片的dpi,dpi越大,则图片越清晰,图片越大,转换耗费的时间也越多 BufferedImage image = renderer.renderImageWithDPI(pageIndex, 106, ImageType.RGB); int imageHeight = image.getHeight(); int imageWidth = image.getWidth(); if (i == 0) { //计算高度和偏移量 //使用第一张图片宽度; width = imageWidth; // 保存每页图片的像素值 // 加个判断:如果m次循环后所剩的图片总数小于pageLength,则图片高度按剩余的张数绘制,否则会出现长图片下面全是黑色的情况 if ((pdDocument.getNumberOfPages() - m * pageLength) < pageLength) { imageResult = new BufferedImage(width, imageHeight * (pdDocument.getNumberOfPages() - m * pageLength), BufferedImage.TYPE_INT_RGB); } else { imageResult = new BufferedImage(width, imageHeight * pageLength, BufferedImage.TYPE_INT_RGB); } } else { // 将高度不断累加 shiftHeight += imageHeight; } singleImgRGB = image.getRGB(0, 0, width, imageHeight, null, 0, width); imageResult.setRGB(0, shiftHeight, width, imageHeight, singleImgRGB, 0, width); } // 这个很重要,下面会有说明 shiftHeight = 0; } pdDocument.close(); ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流 ImageIO.write(imageResult, changeType, baos);//写入流中 byte[] jpg_Bytes = baos.toByteArray();//转换成字节 BASE64Encoder encoder = new BASE64Encoder(); jpg_base64 = encoder.encodeBuffer(jpg_Bytes).trim();//转换成base64串 jpg_base64 = jpg_base64.replaceAll(”\n", “”).replaceAll(“\r”, “”);//删除 \r\n baos.close(); doc.close(); return jpg_base64; } catch (IOException e) { e.printStackTrace(); } return “”; }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档