xml    <dependency>
      <groupId>org.apache.pdfbox</groupId>
      <artifactId>pdfbox</artifactId>
      <version>2.0.23</version>
    </dependency>
java//单页pdf
    public static String pdfToImage(String pdfBase64) throws IOException {
        ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64.getDecoder().decode(pdfBase64));
        PDDocument document = PDDocument.load(inputStream);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        PDFRenderer renderer = new PDFRenderer(document);
        for(int i = 0; i < document.getNumberOfPages(); i++) {
            BufferedImage image = renderer.renderImageWithDPI(i, 300);
            ImageIO.write(image, "png", outputStream);
        }
        byte[] imageBytes = outputStream.toByteArray();
        String imageBase64 = Base64.getEncoder().encodeToString(imageBytes);
        document.close();
        return imageBase64;
    }
java//多页pdf
    public static String[] pdfToImages(String pdfBase64) throws IOException {
        ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64.getDecoder().decode(pdfBase64));
        PDDocument document = PDDocument.load(inputStream);
        String imageBase64[] = new String[document.getNumberOfPages()];
        for(int i = 0; i < document.getNumberOfPages(); i++) {
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            PDFRenderer renderer = new PDFRenderer(document);
            BufferedImage image = renderer.renderImageWithDPI(i, 300);
            ImageIO.write(image, "png", outputStream);
            byte[] imageBytes = outputStream.toByteArray();
            imageBase64[i] = Base64.getEncoder().encodeToString(imageBytes);
        }
        document.close();
        return imageBase64;
    }
java//多线程的方式
    public static String[] pdfToImagesByMultiThreading(String pdfBase64) throws IOException, ExecutionException, InterruptedException {
        ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64.getDecoder().decode(pdfBase64));
        PDDocument document = PDDocument.load(inputStream);
        int pages = document.getNumberOfPages();
        int core=Runtime.getRuntime().availableProcessors();
        // 创建一个固定大小的线程池
        ExecutorService executorService = Executors.newFixedThreadPool(core>pages?pages:core);
        List<CompletableFuture<String>> futures = new ArrayList<>();
        for (int i = 0; i < pages; i++) {
            final int pageIndex = i;
            CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                PDFRenderer renderer = new PDFRenderer(document);
                try {
                    BufferedImage image = renderer.renderImageWithDPI(pageIndex, 300);
                    ImageIO.write(image, "jpg", outputStream);
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new BusinessException(ResultCodeEnum.ERR_0x1000.getCode(),"pdf转换出错"+e.getMessage());
                }
                byte[] imageBytes = outputStream.toByteArray();
                return Base64.getEncoder().encodeToString(imageBytes);
            }, executorService);
            futures.add(future);
        }
        // 等待所有任务完成并收集结果
        CompletableFuture<String>[] arrayFutures = futures.toArray(new CompletableFuture[0]);
        CompletableFuture.allOf(arrayFutures).join(); // 等待所有任务完成
        // 关闭线程池(在实际应用中考虑在服务停止时关闭)
        executorService.shutdown();
        document.close();
        // 等待所有任务完成并收集结果
        String[] imageBase64 = new String[pages];
        for (int i = 0; i < pages; i++) {
            imageBase64[i] = futures.get(i).get();
        }
        return imageBase64;
    }
本文作者:Weee
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!