将 Word 文档中的文本转换为图片时,如果直接在主线程中进行图片生成操作,可能会导致主线程阻塞,影响程序的效率。为了提高效率,可以将图片生成的操作放到另一个线程中进行,避免阻塞主线程,同时使用线程池来管理线程,提高资源利用率。

原始代码:

List<XWPFParagraph> paragraphs = document.getParagraphs();
Integer pages = 1;
for (XWPFParagraph paragraph : paragraphs) {
    String text = paragraph.getText();
    BufferedImage image = TextToImageConverter.convertTextToImage(text);
    String imageName = FilenameUtils.getBaseName(filename) + "_" + (pages + 1) + ".png";
    File imageDir = new File(IMAGE_DIR);
    if (!imageDir.exists()) {
        imageDir.mkdirs();
    }
    File outputFile = new File(imageDir.getAbsolutePath() + File.separator + imageName);
    ImageIO.write(image, "png", outputFile);
    pages = pages + 1;
}

优化后的代码:

ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

for (XWPFParagraph paragraph : paragraphs) {
    String text = paragraph.getText();
    String imageName = FilenameUtils.getBaseName(filename) + "_" + (pages + 1) + ".png";
    File imageDir = new File(IMAGE_DIR);
    if (!imageDir.exists()) {
        imageDir.mkdirs();
    }
    File outputFile = new File(imageDir.getAbsolutePath() + File.separator + imageName);
    
    // 在线程池中执行图片生成操作
    executor.submit(() -> {
        BufferedImage image = TextToImageConverter.convertTextToImage(text);
        try {
            ImageIO.write(image, "png", outputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    });
    
    pages = pages + 1;
}

// 关闭线程池
executor.shutdown();
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

优化步骤:

  1. 使用 Executors.newFixedThreadPool() 创建一个固定大小的线程池,线程池的大小设置为 CPU 核心数,以充分利用系统资源。
  2. 使用 executor.submit() 将图片生成的操作提交到线程池中执行。
  3. 在线程池中执行图片生成操作时,使用 try-catch 块捕获异常。
  4. 关闭线程池,并等待所有任务完成。

优点:

  1. 避免主线程阻塞,提高程序效率。
  2. 使用线程池管理线程,提高资源利用率。
  3. 代码简洁易懂。

注意:

  • 确保 TextToImageConverterImageIO 等库已经正确引入。
  • Runtime.getRuntime().availableProcessors() 可以获取 CPU 核心数,根据实际情况调整线程池大小。
  • 使用线程池时,需要注意线程安全问题。

通过以上优化,可以有效提高将 Word 文档文本转换为图片的性能,使程序运行更加流畅。


原文地址: https://www.cveoy.top/t/topic/mhEq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录