C# 为什么在iTextSharp中更新我的pdf元数据总是附加';受试者';到'的末尾;关键词';?

C# 为什么在iTextSharp中更新我的pdf元数据总是附加';受试者';到'的末尾;关键词';?,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我正在对一堆PDF文件中的元数据进行批量更新,出于某种原因,主题总是被附加到关键字元数据的末尾。即使我删除了“关键字”更新,当我更新数据时,它仍然会被更新 这是预期的吗?以前有人见过这个吗 private void ProcessWithITextSharp(string sourceFile, string destFile) { iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader( sourceF

我正在对一堆PDF文件中的元数据进行批量更新,出于某种原因,主题总是被附加到关键字元数据的末尾。即使我删除了“关键字”更新,当我更新数据时,它仍然会被更新

这是预期的吗?以前有人见过这个吗

private void ProcessWithITextSharp(string sourceFile, string destFile) {

iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader( sourceFile );
FileStream fs = new FileStream( destFile, FileMode.Create, FileAccess.Write, FileShare.None );
PdfStamper stamper = new PdfStamper( reader, fs );

Dictionary<string, string> info = reader.Info;

// title
UpdateValueInInfoDictionary( info, "Title", "My Ridiculous Title" );
UpdateValueInInfoDictionary( info, "Subject", "A Ridiculous Story" );
UpdateValueInInfoDictionary( info, "Author", "Mr. Ridiculous " );
UpdateValueInInfoDictionary( info, "Keywords", "A ridiculous story with a ridiculous title." );

stamper.MoreInfo = info;
stamper.Close();
fs.Close();
private void ProcessWithITextSharp(string sourceFile,string destFile){
iTextSharp.text.pdf.PdfReader=新的iTextSharp.text.pdf.PdfReader(源文件);
FileStream fs=newfilestream(destFile,FileMode.Create,FileAccess.Write,FileShare.None);
PdfStamper压模=新的PdfStamper(读卡器,fs);
字典信息=reader.info;
//头衔
UpdateValueInInfoDictionary(信息,“标题”,“我可笑的标题”);
UpdateValueInInfoDictionary(信息,“主题”,“荒谬的故事”);
UpdateValueInInfoDictionary(信息,“作者”、“荒谬先生”);
UpdateValueInInfoDictionary(信息,“关键词”,“一个标题荒谬的荒谬故事”);
stamper.MoreInfo=info;
压模关闭();
fs.Close();
}


我今天做了类似的事情,遇到了同样的问题。(让我发疯)如果保存文件并重新打开它,您会注意到PdfReader的元数据属性在保存之前仍然具有许多原始值。我通过在stamper之后填充这三行来解决这个问题。MoreInfo=info

MemoryStream ms = new MemoryStream();
XmpWriter xw = new XmpWriter(ms,info);
stamper.XmpMetadata = ms.GetBuffer();
在顶部:

using System.IO;
using iTextSharp.text.xml.xmp;

希望这有助于下一个找到它的人:)

你能发布
UpdateValueInInfoDictionary()