<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      寫了一個java桌面版pdf轉圖片程序

      1.引入依賴

              <!-- pdf工具 -->
              <dependency>
                  <groupId>org.apache.pdfbox</groupId>
                  <artifactId>pdfbox</artifactId>
                  <version>3.0.5</version>
              </dependency>
      
              <!-- 常用工具類 -->
              <dependency>
                  <groupId>org.apache.commons</groupId>
                  <artifactId>commons-lang3</artifactId>
                  <version>3.10</version>
              </dependency>
              

       

      2.程序核心代碼

      package org.example.pdftoimage;
      
      import org.apache.pdfbox.Loader;
      import org.apache.pdfbox.pdmodel.PDDocument;
      import org.apache.pdfbox.rendering.PDFRenderer;
      
      import javax.imageio.ImageIO;
      import javax.swing.*;
      import java.awt.image.BufferedImage;
      import java.io.File;
      import java.io.IOException;
      import java.util.ArrayList;
      import java.util.List;
      import java.util.concurrent.*;
      
      public class PDFToImageConverter {
      
          private JLabel progressLabel;
          private JProgressBar progressBar;
      
          /**
           * 是否UI程序在調用
           */
          private boolean ui = false;
      
          PDFToImageConverter() {
          }
      
          PDFToImageConverter(JLabel progressLabel, JProgressBar progressBar) {
              this.progressLabel = progressLabel;
              this.progressBar = progressBar;
              this.ui = true;
          }
      
          /**
           * 入口方法,用于處理 PDF 轉換的操作
           *
           * @param pdfPath     輸入的 PDF 文件路徑
           * @param outputDir   輸出目錄
           * @param isLongImage 是否生成單張長圖
           * @param dpi         圖像的DPI分辨率
           * @throws IOException
           * @throws InterruptedException
           * @throws ExecutionException
           */
          public void convertPDFToImage(String pdfPath, String outputDir, boolean isLongImage, int dpi) throws Exception {
              // 更新進度
              updateProgress("轉換開始", null);
      
              // 調用 PDF 轉換為圖像的方法
              List<BufferedImage> images = convertPdfToImages(pdfPath, dpi);
      
              // 根據是否是長圖的選項進行處理
              String fileName = pdfPath.substring(pdfPath.lastIndexOf(File.separator) + 1, pdfPath.lastIndexOf("."));
              processImages(images, outputDir, isLongImage, fileName);
      
              // 更新進度
              updateProgress("轉換完成", null);
          }
      
          /**
           * 處理 PDF 轉換為圖像
           *
           * @param images      要處理的圖片列表
           * @param outputDir   輸出目錄
           * @param isLongImage 是否生成單張長圖
           * @param fileName    文件名
           * @throws IOException
           */
          private void processImages(List<BufferedImage> images, String outputDir, boolean isLongImage, String fileName) throws IOException {
              // 判斷是否需要拼接成單張長圖
              if (isLongImage) {
                  BufferedImage longImage = createLongImage(images);
                  String outFileName = fileName + ".png";
                  saveImage(longImage, outputDir, outFileName);
              } else {
                  // 否則保存為多張圖
                  for (int i = 0; i < images.size(); i++) {
                      String outFileName = fileName + "_" + (i + 1) + ".png";
                      saveImage(images.get(i), outputDir, outFileName);
                  }
              }
          }
      
          /**
           * 將 PDF 轉換為圖像
           *
           * @param pdfPath PDF 文件路徑
           * @param dpi     圖像的DPI分辨率
           * @return 返回每頁的 BufferedImage 列表
           * @throws IOException          如果讀取 PDF 文件時發生錯誤
           * @throws InterruptedException 如果線程執行被中斷
           * @throws ExecutionException   如果任務執行失敗
           */
          private List<BufferedImage> convertPdfToImages(String pdfPath, int dpi) throws IOException, InterruptedException, ExecutionException {
              try (PDDocument document = Loader.loadPDF(new File(pdfPath))) {
                  PDFRenderer pdfRenderer = new PDFRenderer(document);
                  // 獲取頁面總數
                  int totalPages = document.getNumberOfPages();
      
                  // 設置進度條最大值為總頁數
                  if (ui) {
                      progressBar.setMaximum(totalPages);
                      progressBar.setValue(0);
                  }
      
                  // 每頁生成一張圖片
                  List<BufferedImage> images = new ArrayList<>();
                  for (int pageIndex = 0; pageIndex < totalPages; pageIndex++) {
                      // 渲染每一頁為圖片
                      int page = pageIndex + 1;
      
                      // 更新進度
                      updateProgress("正在轉換第" + page + "頁", page);
      
                      BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, dpi);
                      images.add(image);
                  }
                  return images;
              }
          }
      
          /**
           * 將多張圖片拼接成單張長圖
           *
           * @param images 要拼接的圖片列表
           * @return 拼接后的長圖
           */
          private BufferedImage createLongImage(List<BufferedImage> images) {
              // 更新進度
              updateProgress("正在拼圖", null);
      
              // 計算拼接后的長圖寬度和高度
              int totalWidth = images.get(0).getWidth();
              int totalHeight = images.stream().mapToInt(BufferedImage::getHeight).sum();
      
              // 創建一張新的圖像用于拼接
              BufferedImage longImage = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_INT_ARGB);
              int yOffset = 0;
      
              // 按照順序將每一張圖像拼接到新的長圖中
              for (BufferedImage image : images) {
                  longImage.getGraphics().drawImage(image, 0, yOffset, null);
                  yOffset += image.getHeight();  // 更新y偏移量
              }
      
              // 更新進度
              updateProgress("拼圖完成", null);
              return longImage;
          }
      
          /**
           * 保存圖片到指定目錄
           *
           * @param image       要保存的圖片
           * @param outputPath  輸出路徑
           * @param outFileName 輸出文件名
           * @throws IOException 如果保存圖片時發生錯誤
           */
          private void saveImage(BufferedImage image, String outputPath, String outFileName) throws IOException {
              updateProgress("正在保存圖片:" + outFileName, null);
              String targetFilePath = outputPath + File.separator + outFileName;
              ImageIO.write(image, "PNG", new File(targetFilePath));
              updateProgress("保存圖片完成:" + outFileName, null);
          }
      
          /**
           * 更新進度
           *
           * @param text     進度提示
           * @param progress 進度值
           */
          private void updateProgress(String text, Integer progress) {
              if (ui) {
                  SwingUtilities.invokeLater(() -> {
                      progressLabel.setText(text);
                      if (progress != null) {
                          progressBar.setValue(progress);
                      }
                  });
              }
          }
      
          public static void main(String[] args) throws Exception {
              PDFToImageConverter converter = new PDFToImageConverter();
              converter.convertPDFToImage("src\\main\\resources\\input.pdf", "output", false, 150);
          }
      }

       

      3.運行效果

      操作頁面

       

      4.完整代碼

      https://github.com/hdwang123/PdfToImage

      https://gitee.com/hdwang123/PdfToImage

       

      posted @ 2025-09-06 18:35  追極  閱讀(105)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本55丰满熟妇厨房伦| 亚洲无人区码一二三区别| 九九热这里只有精品在线| 蜜臀午夜一区二区在线播放| 精品一区二区三区日韩版| 性色欲情网站iwww| 亚洲成av人片无码不卡播放器 | 日本欧美一区二区三区在线播放| 天天做天天爱夜夜爽| 欧美变态另类牲交| 2020久久香蕉国产线看观看| 国产无遮挡真人免费视频| 望都县| 亚洲精品中文字幕在线观| 麻豆国产va免费精品高清在线| 国产成人精品视频不卡| 国产区成人精品视频| 中国CHINA体内裑精亚洲日本| 俄罗斯老熟妇性爽xxxx| 久久99国产精一区二区三区!| 人妻精品无码一区二区三区| 国产亚洲无线码一区二区| 国产精品国产精品无卡区| 亚洲欧美牲交| 国产一区二区精品久久呦| 成年女人片免费视频播放A| 成人午夜看黄在线尤物成人| 国产一区二区三区18禁| 成人国产乱对白在线观看 | 日本一级午夜福利免费区| 综合欧美视频一区二区三区| 国产午夜福利精品视频| 免费人成无码大片在线观看| 亚洲欧洲一区二区三区久久| 九九热视频精品在线播放| 国产成人欧美综合在线影院| 午夜射精日本三级| 免费无码观看的AV在线播放| 国产成人久久777777| 国产精品毛片一区视频播| 国产国产久热这里只有精品|