public static String savePdfToImgPdf(String baseData) throws Exception { if (StringUtils.isEmpty(baseData)) { return null; } String pngDataStr = null; //转byte BASE64Decoder decoder = new BASE64Decoder(); BASE64Encoder encoder = new BASE64Encoder(); byte[] pdfbt = decoder.decodeBuffer(baseData); Document document = new Document(); document.setByteArray(pdfbt, 0, pdfbt.length, null); float scale = 1.25f;//缩放比例 float rotation = 0f;//旋转角度 BufferedImage[] imageArray = new BufferedImage[document.getNumberOfPages()]; for (int i = 0; i < document.getNumberOfPages(); i++) { BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX, rotation, scale); imageArray[i] = image; image.flush(); } RenderedImage rendImage = mergeImage(false, imageArray); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { ImageIO.write(rendImage, "png", baos); byte[] pngbt = baos.toByteArray(); pngDataStr = encoder.encodeBuffer(pngbt).replaceAll("[\\s*\t\n\r]", ""); } catch (Exception e) { LOGGER.error("ImageIO write exception", e); } finally { if (baos != null) { baos.close(); } } return pngDataStr; } public static BufferedImage mergeImage(boolean isHorizontal, BufferedImage... imgs) throws IOException { // 生成新图片 BufferedImage DestImage; // 计算新图片的长和高 int allw = 0, allh = 0, allwMax = 0, allhMax = 0; for (BufferedImage img : imgs) { allw += img.getWidth(); allh += img.getHeight(); if (img.getWidth() > allwMax) { allwMax = img.getWidth(); } if (img.getHeight() > allhMax) { allhMax = img.getHeight(); } } // 创建新图片 if (isHorizontal) { DestImage = new BufferedImage(allw, allhMax, BufferedImage.TYPE_INT_RGB); } else { DestImage = new BufferedImage(allwMax, allh, BufferedImage.TYPE_INT_RGB); } // 合并所有子图片到新图片 int wx = 0, wy = 0; for (int i = 0; i < imgs.length; i++) { BufferedImage img = imgs[i]; int w1 = img.getWidth(); int h1 = img.getHeight(); // 从图片中读取RGB int[] ImageArrayOne = new int[w1 * h1]; ImageArrayOne = img.getRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 逐行扫描图像中各个像素的RGB到数组中 if (isHorizontal) { // 水平方向合并 DestImage.setRGB(wx, 0, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGB } else { // 垂直方向合并 DestImage.setRGB(0, wy, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGB } wx += w1; wy += h1; } return DestImage; }
待重写
猜你喜欢
转载自www.cnblogs.com/koushr/p/5873403.html
今日推荐
周排行