C# 25.6.1 PDF保存为word文档时候 程序崩溃 System.OverflowException:“溢出错误。” 出错文件请查看附件
testfailed.pdf (278.4 KB)
您好,感谢使用 Aspose.PDF for .NET
问题概要
- 版本:25.6.1
- 操作:
PdfDocument.Save(..., SaveFormat.DocX)
(PDF → Word) - 异常:
System.OverflowException: 溢出错误
- 附件:
testfailed.pdf
(无法直接打开查看)
下面给出几个常见导致 OverflowException
的情况以及排查/解决思路,供您参考。
1. 常见导致 OverflowException 的原因
场景 | 可能的根本原因 | 处理建议 |
---|---|---|
PDF 中包含非常大的图片或矢量对象 | 在转换为 Word 时需要把图片解码为位图,若尺寸或分辨率超出 int 能表示的范围(> 2,147,483,647)会抛出 overflow。 |
- 在转换前使用 PdfDocument 的 ExtractImages 或 RasterizePage 将大图缩小。- 设置 DocSaveOptions 的 ImageResolution / ImageScale 参数。 |
页面数量或对象数量异常 | Aspose 在内部使用 int 计数对象,若 PDF 中对象数 > int.MaxValue (极端情况)会触发 overflow。 |
- 检查 PDF 是否被破坏或包含循环引用的对象。 - 使用 PdfDocument 的 FixErrors 方法尝试修复。 |
PDF 中的字体或文字流的长度超出范围 | 文字流的字节长度在转换时被解析为 int ,超出范围会导致异常。 |
- 尝试使用 Document.LimitProcessingTime = false; 并重新保存。 |
使用了旧版(已知 bug) | 25.6.1 之前的某些构建在处理特定 PDF 结构时会产生 overflow。 | 强烈建议升级到最新的稳定版(截至 2025‑09‑09 为 25.9.x),该问题已在后续版本中修复。 |
2. 快速排查步骤
-
查看完整异常堆栈(尤其是 Aspose 代码所在的行),这能帮助定位是图片、文字还是页面处理出错。
-
尝试仅转换单页,看是否仍然报错:
using Aspose.Pdf; using Aspose.Pdf.Saving; var pdf = new Document("testfailed.pdf"); // 只取第 1 页 var singlePage = new Document(); singlePage.Pages.Add(pdf.Pages[1]); var options = new DocSaveOptions(); // 如有大图,可降低分辨率 options.ImageResolution = 150; // DPI options.ImageScale = 0.5; // 缩放 50% singlePage.Save("output.docx", options);
- 若单页可以成功,则说明是某一页的对象导致 overflow。
- 若仍然异常,则可能是全局(如字体、结构)问题。
-
尝试使用
PdfConverter
(旧版转换器):var pdf = new Document("testfailed.pdf"); var options = new DocSaveOptions { UsePdfDocConverter = true // 强制使用旧版转换器 }; pdf.Save("output.docx", options);
有时旧版转换器会规避导致 overflow 的内部路径。
-
使用
Document.FixErrors = true
(自动尝试修复损坏的 PDF):var pdf = new Document("testfailed.pdf") { FixErrors = true }; pdf.Save("output.docx", SaveFormat.Docx);
3. 代码示例(推荐做法)
using Aspose.Pdf;
using Aspose.Pdf.Saving;
class PdfToWord
{
static void Main()
{
// 1️⃣ 加载 PDF,开启错误修复
var pdfDoc = new Document("testfailed.pdf")
{
FixErrors = true
};
// 2️⃣ 配置 Word 保存选项
var saveOptions = new DocSaveOptions
{
// 可根据实际情况调低图片分辨率/缩放比例
ImageResolution = 150, // DPI
ImageScale = 0.5, // 50%
// 如需兼容旧版,可打开下面的开关
// UsePdfDocConverter = true
};
// 3️⃣ 保存为 DOCX
pdfDoc.Save("output.docx", saveOptions);
}
}
提示:如果您仍然遇到 overflow,请在
catch (OverflowException ex)
中记录ex.StackTrace
并把完整堆栈贴在回复中,这有助于我们的工程师快速定位问题。
4. 推荐升级
- 最新稳定版:Aspose.PDF for .NET 25.9.x(截至 2025‑09‑09)。
- 升级收益
- 多项 PDF → Word 转换性能与兼容性提升。
- 已修复 25.6.1 中与大尺寸图片/对象相关的 overflow bug。
- 新增
DocSaveOptions
中的ImageResolution
与ImageScale
控制,便于避免此类异常。
下载地址: https://downloads.aspose.com/pdf/net
升级指南: https://docs.aspose.com/pdf/net/upgrade-guide/
5. 如需进一步帮助
请提供以下信息,以便我们更精准地定位:
- 完整的异常堆栈(包括文件名和行号)。
- 您的代码片段(调用
Save
时使用的SaveOptions
)。 - 如果方便,请提供 testfailed.pdf(或更小的复现文件),我们可以在内部复现。
- 使用的 .NET 运行时版本(例如 .NET 6、.NET Framework 4.8 等)。
我们会在收到上述信息后尽快为您排查。
祝您开发顺利,期待您的进一步信息!
Aspose 支持团队
相关文档
我们已在内部问题跟踪系统中创建了以下新工单,并将根据Free Support Policies中提到的条款提供修复。
问题编号:PDFNET-60657
如果您需要优先支持,可以通过Paid Support Services获取服务,并直接与我们的付费支持管理团队联系。
我现在保存docx文件时将DocSaveOptions.ImageResolutionX = 150 DocSaveOptions.ImageResolutionY = 150 可以转换成功 但是word文件中的图片就比较模糊 我现在想知道 我是否可以通过现有功能检测出来我需要对这个保存动作设置ImageResolution