ZBLOG

如果xps文件路径下有多个文件

如果在指定的 XPS 文件路径下有多个文件,你可以修改 convertXpsToPng 方法,使其能够处理该目录下的所有 XPS 文件。以下是一个示例,展示了如何列出指定目录中的所有文件,并逐个转换每个 XPS 文件为 PNG 格式:

修改后的代码

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class FileService {

    private final FileMapper fileMapper;

    public FileService(FileMapper fileMapper) {
        this.fileMapper = fileMapper;
    }

    public void convertXpsToPng(String xpsDirPath, String outputDir) throws Exception {
        File xpsDirectory = new File(xpsDirPath);
        
        // 确保输出目录存在
        File outputDirectory = new File(outputDir);
        if (!outputDirectory.exists()) {
            outputDirectory.mkdirs(); // 创建输出目录
        }

        // 列出目录中的所有文件
        File[] files = xpsDirectory.listFiles((dir, name) -> name.toLowerCase().endsWith(".xps"));
        
        if (files != null) {
            for (File xpsFile : files) {
                convertSingleXpsToPng(xpsFile.getAbsolutePath(), outputDirectory.getAbsolutePath());
            }
        } else {
            System.out.println("未找到任何 XPS 文件。");
        }
    }

    private void convertSingleXpsToPng(String xpsFilePath, String outputDir) throws Exception {
        try (PDDocument document = PDDocument.load(new File(xpsFilePath))) { 
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            
            for (int page = 0; page < document.getNumberOfPages(); ++page) {
                BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300); // 设置 DPI 为 300
                String pngFilePath = outputDir + "/" + getBaseName(xpsFilePath) + "-page-" + (page + 1) + ".png";
                ImageIO.write(bim, "PNG", new File(pngFilePath));
                
                // 保存到数据库或其他存储,这里仅作为示例
                fileMapper.saveConvertedImagePath(pngFilePath);
            }
        }
    }

    private String getBaseName(String path) {
        String fileName = new File(path).getName();
        return fileName.substring(0, fileName.lastIndexOf('.')); // 去掉扩展名
    }
}

代码说明

  1. 列出文件:

    • 使用 listFiles 方法结合一个过滤器来查找以 .xps 结尾的文件。
    • 如果没有找到符合条件的文件,打印一条消息。
  2. 创建输出目录:

    • 在开始转换之前,检查输出目录是否存在,如果不存在,则使用 mkdirs() 方法创建它。
  3. 单独转换每个 XPS 文件:

    • 为每个找到的 .xps 文件调用 convertSingleXpsToPng 方法,该方法负责执行具体的转换操作。
  4. 生成 PNG 文件名:

    • 在保存 PNG 图像时,使用 getBaseName 方法获取原始 XPS 文件名,并将页面编号附加到它后面,以便产生唯一的 PNG 输出名称。
  5. getBaseName 方法:

    • 这个辅助方法从文件路径中提取不带扩展名的基本名称,以便用于生成输出图像文件名称。

使用示例

你可以通过调用如下方式使用这个新的方法:

FileService fileService = new FileService(fileMapper);
fileService.convertXpsToPng("path/to/xps/directory", "path/to/output/directory");

这将会把指定目录下所有的 .xps 文件逐一转换为 PNG 格式,并将它们保存到指定的输出目录。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20536

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?