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

SharePoint 2013下用C#批量修改PDF元数据的解决方案咨询

解决方案:SharePoint 2013批量清除PDF元数据(Author/ModifiedBy)

问题分析

原代码的核心问题是:SPFile.OpenBinaryStream()返回的是只读流,无法直接写入修改后的内容;且仅调用file.Update()不会触发文件内容的更新,必须通过SaveBinary方法传入修改后的字节流。

修正后的C#代码示例

using System.IO;
using PdfSharp.Pdf;
using Microsoft.SharePoint;

public static void RemovePdfMetadata(IGrouping<string, SPFile> groupedFiles)
{
    foreach (SPFile file in groupedFiles)
    {
        // 跳过非PDF文件
        if (!file.Name.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            continue;

        using (Stream originalStream = file.OpenBinaryStream())
        using (PdfDocument document = PdfReader.Open(originalStream, PdfDocumentOpenMode.Modify))
        {
            // 清除指定元数据
            document.Info.Author = string.Empty;
            document.Info.ModifiedBy = string.Empty;
            // 若需清除其他相关元数据可添加,比如Creator
            // document.Info.Creator = string.Empty;
            
            // 将修改后的文档写入内存流
            using (MemoryStream modifiedStream = new MemoryStream())
            {
                document.Save(modifiedStream);
                modifiedStream.Position = 0; // 重置流指针到起始位置

                // 覆盖SharePoint原文件
                file.SaveBinary(modifiedStream);
            }
        }

        // 同步更新SharePoint列表项的属性(避免列表视图显示旧数据)
        SPListItem item = file.Item;
        item["Author"] = null;
        item["Editor"] = null;
        // 用UpdateOverwriteVersion避免创建新版本,需保留版本历史则改用item.Update()
        item.UpdateOverwriteVersion();
    }
}

关键说明

  • 流处理逻辑:通过MemoryStream暂存修改后的PDF内容,再调用SPFile.SaveBinary()写入SharePoint,这是修改SPFile内容的标准方式。
  • 元数据同步:除了清除PDF文档内部的元数据,必须同步更新SharePoint列表项的Author和Editor字段,否则列表视图仍会显示旧的作者/修改者信息。
  • 批量操作优化:处理10000个文件时,建议分批次执行(比如每50-100个为一批),避免内存占用过高;若文档库有事件接收器,建议临时禁用以提升处理速度。
  • 权限要求:执行代码的账号需拥有目标文档库的编辑权限,确保能覆盖文件和修改列表项属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:40:29