PDF System.OverflowException:“溢出错误。”

C# 25.6.1 PDF保存为word文档时候 程序崩溃 System.OverflowException:“溢出错误。” 出错文件请查看附件
testfailed.pdf (278.4 KB)

@panyang1986

您好,感谢使用 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。 - 在转换前使用 PdfDocumentExtractImagesRasterizePage 将大图缩小。
- 设置 DocSaveOptionsImageResolution / ImageScale 参数。
页面数量或对象数量异常 Aspose 在内部使用 int 计数对象,若 PDF 中对象数 > int.MaxValue(极端情况)会触发 overflow。 - 检查 PDF 是否被破坏或包含循环引用的对象。
- 使用 PdfDocumentFixErrors 方法尝试修复。
PDF 中的字体或文字流的长度超出范围 文字流的字节长度在转换时被解析为 int,超出范围会导致异常。 - 尝试使用 Document.LimitProcessingTime = false; 并重新保存。
使用了旧版(已知 bug) 25.6.1 之前的某些构建在处理特定 PDF 结构时会产生 overflow。 强烈建议升级到最新的稳定版(截至 2025‑09‑09 为 25.9.x),该问题已在后续版本中修复。

2. 快速排查步骤

  1. 查看完整异常堆栈(尤其是 Aspose 代码所在的行),这能帮助定位是图片、文字还是页面处理出错。

  2. 尝试仅转换单页,看是否仍然报错:

    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。
    • 若仍然异常,则可能是全局(如字体、结构)问题。
  3. 尝试使用 PdfConverter(旧版转换器)

    var pdf = new Document("testfailed.pdf");
    var options = new DocSaveOptions
    {
        UsePdfDocConverter = true   // 强制使用旧版转换器
    };
    pdf.Save("output.docx", options);
    

    有时旧版转换器会规避导致 overflow 的内部路径。

  4. 使用 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 中的 ImageResolutionImageScale 控制,便于避免此类异常。

下载地址: https://downloads.aspose.com/pdf/net
升级指南: https://docs.aspose.com/pdf/net/upgrade-guide/


5. 如需进一步帮助

请提供以下信息,以便我们更精准地定位:

  1. 完整的异常堆栈(包括文件名和行号)。
  2. 您的代码片段(调用 Save 时使用的 SaveOptions)。
  3. 如果方便,请提供 testfailed.pdf(或更小的复现文件),我们可以在内部复现。
  4. 使用的 .NET 运行时版本(例如 .NET 6、.NET Framework 4.8 等)。

我们会在收到上述信息后尽快为您排查。


祝您开发顺利,期待您的进一步信息!

Aspose 支持团队

相关文档

@panyang1986

我们已在内部问题跟踪系统中创建了以下新工单,并将根据Free Support Policies中提到的条款提供修复。

问题编号:PDFNET-60657

如果您需要优先支持,可以通过Paid Support Services获取服务,并直接与我们的付费支持管理团队联系。

我现在保存docx文件时将DocSaveOptions.ImageResolutionX = 150 DocSaveOptions.ImageResolutionY = 150 可以转换成功 但是word文件中的图片就比较模糊 我现在想知道 我是否可以通过现有功能检测出来我需要对这个保存动作设置ImageResolution

@panyang1986

感谢您提供额外的细节和更新。工单信息已更新,我们会从这个角度进行调查。一旦有新的进展,我们会及时告知您。请给予我们一些时间,非常抱歉给您带来不便。