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

如何使用PDFSharp为列表中每个不同属性值生成并保存独立PDF文档

解决方法

你只需要做两处核心调整即可实现需求:

  1. 简化分组属性值的获取逻辑:不需要把匿名类Key转成字符串再做批量替换,直接通过Key访问对应属性就能拿到纯净的原始值,避免字符串处理带来的额外异常风险。
  2. 动态生成PDF保存路径:将属性值拼接到保存文件名中,保证每个分组对应唯一的文件名,避免后续文件覆盖前面生成的文件。

修正后的完整代码示例

// 原有分组逻辑保持不变
var listName = collectionName
    .GroupBy(p => new { p.propertyName })
    .ToList();

// 编码注册属于全局初始化操作,挪到循环外仅执行一次即可,避免重复调用浪费性能
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

// 遍历每一个分组
foreach (var trip in listName)
{
    // 直接取属性值,无需做字符串替换操作
    string pnString = trip.Key.propertyName.Trim();
    
    // 为当前分组创建独立的PDF文档
    PdfDocument doc = new PdfDocument();
    PdfPage page = doc.AddPage();
    XGraphics gfx = XGraphics.FromPdfPage(page);
    // 此处补充你的字体、画刷等初始化代码
    
    gfx.DrawString(pnString, new XFont("Arial", 40, XFontStyle.Bold), myGreen, new XPoint(5, 250));
    // 此处补充其他PDF内容绘制逻辑

    // 处理属性值中的非法文件名字符,避免保存报错
    var invalidFileNameChars = Path.GetInvalidFileNameChars();
    string safeFileName = new string(pnString.Select(c => invalidFileNameChars.Contains(c) ? '_' : c).ToArray());
    // 动态拼接保存路径,保证每个文件名称唯一
    string fullSavePath = Path.Combine(@"C:\My\File\Path", $"{safeFileName}.pdf");
    
    doc.Save(fullSavePath);
    // 释放文档资源,避免内存占用过高
    doc.Dispose();
}

额外注意事项

  • 注意修正遍历对象,你原有代码中遍历的paidTrip需要替换为分组后得到的listName
  • 如果属性值可能重复,你可以在文件名中额外拼接时间戳、序号等信息进一步保证文件名唯一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:03