待重写

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