如果在指定的 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('.')); // 去掉扩展名
}
}
代码说明
列出文件:
- 使用
listFiles
方法结合一个过滤器来查找以.xps
结尾的文件。 - 如果没有找到符合条件的文件,打印一条消息。
- 使用
创建输出目录:
- 在开始转换之前,检查输出目录是否存在,如果不存在,则使用
mkdirs()
方法创建它。
- 在开始转换之前,检查输出目录是否存在,如果不存在,则使用
单独转换每个 XPS 文件:
- 为每个找到的
.xps
文件调用convertSingleXpsToPng
方法,该方法负责执行具体的转换操作。
- 为每个找到的
生成 PNG 文件名:
- 在保存 PNG 图像时,使用
getBaseName
方法获取原始 XPS 文件名,并将页面编号附加到它后面,以便产生唯一的 PNG 输出名称。
- 在保存 PNG 图像时,使用
getBaseName 方法:
- 这个辅助方法从文件路径中提取不带扩展名的基本名称,以便用于生成输出图像文件名称。
使用示例
你可以通过调用如下方式使用这个新的方法:
FileService fileService = new FileService(fileMapper);
fileService.convertXpsToPng("path/to/xps/directory", "path/to/output/directory");
这将会把指定目录下所有的 .xps
文件逐一转换为 PNG 格式,并将它们保存到指定的输出目录。
内容由零声教学AI助手提供,问题来源于学员提问