PDF的Base64转换Png/JpgBase64

2023-06-04 16:28:29 浏览数 (2)

如题,下面为代码块:

/** * @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”, “”);//删除 rn baos.close(); doc.close(); return jpg_base64; } catch (IOException e) { e.printStackTrace(); } return “”; }

0 人点赞