You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已安装的C#程序中iTextSharp NuGet无法正常工作的问题

问题排查与解决步骤

1. 先确认传入的文件路径有效性

检查调用PDF_generate构造函数时的filePath是否为空或无效:

  • 若用户在SaveFileDialog中取消操作,可能会传入空路径,直接创建FileStream会触发异常
  • 在构造函数开头加判断:
if (string.IsNullOrWhiteSpace(filePath))
{
    MessageBox.Show("请选择有效的PDF保存路径");
    return;
}

2. 补全iTextSharp的依赖库

iTextSharp主dll之外,还依赖BouncyCastle.Crypto.dll等组件,仅打包主dll会导致运行时异常:

  • 打开项目NuGet包管理器,查看iTextSharp的依赖项
  • 在Visual Studio Installer Projects的「应用程序文件夹」中,添加所有依赖的dll文件

3. 修复构造函数的异常捕获漏洞

当前仅捕获IOException,但PdfWriter.GetInstance可能抛出其他异常,导致PDF_writer为null,后续操作崩溃:

  • 修改构造函数的异常捕获逻辑,同时校验核心对象状态:
public PDF_generate(string filePath)
{
    PDF_document = new Document(PageSize.A4);

    try
    {
        if (string.IsNullOrWhiteSpace(filePath))
        {
            MessageBox.Show("请选择有效的PDF保存路径");
            return;
        }
        PDF_writer = PdfWriter.GetInstance(PDF_document, new FileStream(filePath, FileMode.Create));
    }
    catch (Exception ex)
    {
        MessageBox.Show($"PDF写入器初始化失败: {ex.Message}");
        PDF_document?.Dispose();
        PDF_document = null;
        return;
    }

    boldFont = FontFactory.GetFont("Times New Roman", 26, Font.BOLD);
    dbConnect = new DbConnect("127.0.0.1", "coinamy_db", "root", "");
}
  • 在Connect方法中先校验核心对象:
public bool Connect()
{
    if (PDF_document == null || PDF_writer == null)
    {
        MessageBox.Show("PDF文档未完成初始化");
        return false;
    }
    try
    {
        PDF_document.Open();
        return true;
    }
    catch (Exception ex)
    {
        MessageBox.Show($"打开PDF文档失败: {ex.Message}");
        return false;
    }
}

4. 修正图片路径问题

调试时的相对路径@"..\..\Images\coinamy_logo_original.png"在安装后会失效,改为基于程序目录的绝对路径:

string imagePath = Path.Combine(Application.StartupPath, "Images", "coinamy_logo_original.png");
Image image = Image.GetInstance(imagePath);
  • 确保安装包中包含Images文件夹及对应图片,在Installer Projects中添加该文件夹到应用程序目录

5. 添加错误日志辅助排查

在关键位置写入日志文件,方便安装后定位问题:

private void WriteLog(string content)
{
    string logPath = Path.Combine(Application.StartupPath, "pdf_error.log");
    File.AppendAllText(logPath, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {content}\r\n");
}
  • 在异常捕获中调用该方法,比如:
catch (Exception ex)
{
    string errorInfo = $"错误信息: {ex.Message}\r\n堆栈跟踪: {ex.StackTrace}";
    MessageBox.Show(errorInfo);
    WriteLog(errorInfo);
}

内容的提问来源于stack exchange,提问作者vajuakos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:43:19