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

如何访问ObservableCollection?项目需收集选中元素导出至PDF

从ObservableCollection收集选中元素并导出到PDF的解决方案

嘿,我来帮你搞定这个需求!咱们把它拆成收集选中元素和导出到PDF两个核心环节,结合你提供的FinalElements实体类一步步实现。

第一步:完善实体类,收集选中元素

首先,你的FinalElements类目前缺少标记选中状态的属性,我先帮你补上,同时完善INotifyPropertyChanged的完整实现(你之前的代码里少了事件定义哦):

public class FinalElements : INotifyPropertyChanged
{
    private int chapAr;
    public int ChapAr 
    { 
        get { return chapAr; } 
        set 
        { 
            chapAr = value; 
            OnPropertyChanged(nameof(ChapAr));
            OnPropertyChanged(nameof(Article));
        } 
    }

    private string article;
    public string Article 
    { 
        get { return article; } 
        set 
        { 
            article = value; 
            OnPropertyChanged(nameof(Article));
        } 
    }

    // 新增选中状态属性,用于标记元素是否被选中
    private bool isSelected;
    public bool IsSelected
    {
        get { return isSelected; }
        set
        {
            isSelected = value;
            OnPropertyChanged(nameof(IsSelected));
        }
    }

    // 实现INotifyPropertyChanged的必要事件
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

假设你的ObservableCollection实例是这样定义的:

public ObservableCollection<FinalElements> ElementsCollection { get; set; } = new ObservableCollection<FinalElements>();

现在用LINQ就能轻松筛选出所有被选中的元素:

var selectedElements = ElementsCollection.Where(element => element.IsSelected).ToList();

第二步:把选中元素导出到PDF

接下来咱们用iTextSharp(.NET生态里常用的PDF处理库)来生成PDF。如果是.NET Core/.NET 5+的项目,推荐用iTextSharp.LGPLv2.Core这个NuGet包,和iTextSharp API基本一致。

先安装依赖

通过NuGet包管理器安装:

Install-Package iTextSharp // 针对.NET Framework
// 或者
Install-Package iTextSharp.LGPLv2.Core // 针对.NET Core/.NET 5+

导出PDF的代码示例

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.Linq;

public void ExportSelectedToPdf(List<FinalElements> selectedItems, string savePath)
{
    // 创建PDF文档对象,设置页面大小为A4
    var document = new Document(PageSize.A4, 20, 20, 20, 20);
    try
    {
        // 初始化PDF写入器,指定输出路径
        PdfWriter.GetInstance(document, new FileStream(savePath, FileMode.Create));
        document.Open();

        // 添加PDF标题
        document.Add(new Paragraph("选中元素汇总", FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 16)));
        document.Add(new Paragraph("\n"));

        // 遍历选中的元素,逐个添加到PDF中
        foreach (var item in selectedItems)
        {
            document.Add(new Paragraph($"章节编号: {item.ChapAr}", FontFactory.GetFont(FontFactory.HELVETICA, 12)));
            document.Add(new Paragraph($"内容: {item.Article}", FontFactory.GetFont(FontFactory.HELVETICA, 12)));
            // 添加分隔线
            document.Add(new Chunk(new iTextSharp.text.pdf.draw.LineSeparator(1f, 100f, BaseColor.BLACK, Element.ALIGN_LEFT, 1)));
            document.Add(new Paragraph("\n"));
        }
    }
    catch (IOException ex)
    {
        // 处理文件写入异常,比如路径不存在、权限不足等
        System.Diagnostics.Debug.WriteLine($"PDF写入错误: {ex.Message}");
    }
    catch (DocumentException ex)
    {
        // 处理PDF文档生成异常
        System.Diagnostics.Debug.WriteLine($"PDF文档错误: {ex.Message}");
    }
    finally
    {
        // 确保文档关闭
        if (document.IsOpen())
            document.Close();
    }
}

调用示例

// 获取选中元素
var selected = ElementsCollection.Where(e => e.IsSelected).ToList();
// 导出到指定路径
ExportSelectedToPdf(selected, @"D:\Exported\SelectedElements.pdf");

额外提示

  • 如果是WPF项目,记得把UI控件(比如DataGrid的选中列、CheckBox)和IsSelected属性做双向绑定,这样UI上的选中状态才能同步到实体类中。
  • 如果你需要更复杂的PDF格式(比如表格、图片),可以扩展iTextSharp的代码,比如用PdfPTable来创建表格展示数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:51:04