using (Document pdf = new Document(sourcePath))
{
Parallel.For(data.start_page, data.end_page + 1, x =>
{
var width = (pdf.Pages[x].GetPageRect(true).Width * percentage).ToInt();
var height = (pdf.Pages[x].GetPageRect(true).Height * percentage).ToInt();
JpegDevice jpg = new JpegDevice(width, height, new Resolution(data.resolution), data.quality);
jpg.Process(pdf.Pages[x], $“{imgSavePath}{x}.jpeg”);
});
}
使用aspose.pdf 25.2.0
上面代码运行了15天后频繁出现卡在 jpg.Process(pdf.Pages[x], $“{imgSavePath}{x}.jpeg”);
生成的图片都是0 kb,没有数据写入
1.png (9.0 KB)
在使用Aspose.PDF将PDF转换为图像时,如果遇到程序在jpg.Process(pdf.Pages[x], $"{imgSavePath}{x}.jpeg");
这一行卡住的问题,可能是由于并行处理导致的资源竞争或内存不足。以下是一些建议,可以帮助你解决这个问题:
-
限制并行度:尝试减少并行处理的数量。可以通过设置
Parallel.For
的并行度来控制同时处理的页面数量。例如,可以将并行度设置为1,逐个处理页面,看看是否能解决问题。 -
检查内存使用:长时间运行的程序可能会消耗大量内存,导致系统资源不足。确保你的系统有足够的内存来处理PDF文件的转换,尤其是当PDF文件较大时。
-
使用单线程处理:如果并行处理导致问题,可以尝试使用单线程处理来逐页转换PDF。例如,使用一个简单的
for
循环而不是Parallel.For
。 -
更新Aspose.PDF版本:确保你使用的是最新版本的Aspose.PDF库。新版本可能修复了已知的bug或性能问题。
-
捕获异常:在处理过程中添加异常捕获,以便在发生错误时能够记录详细信息,帮助你诊断问题。
以下是一个示例代码,展示如何逐页处理PDF文件:
using (Document pdf = new Document(sourcePath))
{
for (int x = data.start_page; x <= data.end_page; x++)
{
var width = (pdf.Pages[x].GetPageRect(true).Width * percentage).ToInt();
var height = (pdf.Pages[x].GetPageRect(true).Height * percentage).ToInt();
JpegDevice jpg = new JpegDevice(width, height, new Resolution(data.resolution), data.quality);
jpg.Process(pdf.Pages[x], $"{imgSavePath}{x}.jpeg");
}
}
通过这些方法,你应该能够解决程序卡住的问题。如果问题仍然存在,建议查看Aspose的文档或社区论坛,寻找其他用户可能遇到的类似问题和解决方案。