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

C#实现PDF读取保存遇异常:生成PDF空白且无法保留图片

问题分析与解决方案

核心错误原因

PDF是二进制格式文件,你的代码错误地使用StreamReader(文本读取器)读取内容,再通过Encoding.UTF8.GetBytes转换回字节流。这个过程会破坏PDF中的非文本二进制数据(比如图片、压缩内容):文本读取器会尝试把二进制字节解析成字符,导致原始数据丢失或损坏,最终生成的PDF自然空白且丢失图片。

修正方案:直接处理二进制流

不需要将PDF内容转换成字符串,直接复制原始二进制流即可完整保留PDF的所有内容。

修正后的代码

Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
bool? response = openFileDialog.ShowDialog();

if (response == true)
{
    // 构建目标文件夹路径并创建
    string folderPath = "ProjectPDFs";
    string rootPath = @"X:\Vents-US Inventory";
    string targetFolder = Path.Combine(rootPath, folderPath);
    Directory.CreateDirectory(targetFolder);

    // 构建目标文件路径
    string targetFilePath = Path.Combine(targetFolder, openFileDialog.SafeFileName);

    // 直接复制原始文件流,全程保留二进制数据
    using (Stream sourceStream = openFileDialog.OpenFile())
    using (Stream targetStream = new FileStream(targetFilePath, FileMode.Create, FileAccess.Write))
    {
        sourceStream.CopyTo(targetStream);
    }
}

关键改进点

  • 移除了字符串转换步骤,直接从源文件流复制到目标文件流,完整保留PDF的所有二进制内容。
  • 简化了文件夹创建逻辑,Directory.CreateDirectory可直接接收路径字符串,无需额外创建DirectoryInfo实例。
  • 增加了用户确认对话框操作的判断(response == true),避免用户取消选择后执行无效代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:05:19