用 iTextSharp 修改 PDF 文件的元信息(MetaData)

要向另一个服务程序传送 PDF 文件,同时要用另一个文件来给 PDF 文件加入一些描述信息,描述都很短,这时候那个描述文件其实是多余的,完全可以把这些描述信息写到 PDF 文件自身中去。比如在查看 PDF 文件属性 PDF 标签页中可以看到的 Title/Author/Subject/Keywords/Created/Modified/Application 这些信息都可以通过 iTextSharp 来编辑。其实不止这些,你可以加入任何命名的属性,只是它们不在属性窗口中显示而已。而且这些属性存的数据好像也不受限的,当然太大了直接就是增加 PDF 文件的体积,如果是可视属性的话,在查看文件属性时显示也要变慢,所以尽量还是在 PDF 的 MetaData 中存简短的信息。


下面来看 iTextSharp 怎么来编辑 PDF 文件的元数据信息的,使用到的关键类是 PdfStamper:
 1string pdfFile = "d:\\sample.pdf";
 2
 3//把文件读入内存可立即释放文件句柄,方便信息覆盖原文件
 4PdfReader reader = new PdfReader(File.ReadAllBytes(pdfFile));
 5
 6//如果是 PDF 文件体积较大,全部载入的话太耗内存,应该持有流
 7//PdfReader reader = new PdfReader(File.OpenRead(pdfFile));
 8//那么下面在构造 PdfStamper 时应该用不同的文件路径了
 9
10//获取到本文件的 MetaData 信息
11Dictionary<string,string> info = reader.Info;
12
13info.Remove("Author");
14info.Add("Author", "Unmi");
15info.Remove("Subject");
16info.Add("Subject", "Use iTextSharp to modify pdf metadata");
17info.Remove("Keywords");
18info.Add("Keywords", "Blog: <a href="http://unmi.cc/" data-mce-href="http://unmi.cc/">http://unmi.cc</a>");
19
20//你可以加入任何的属性,如 Email,用程序可以将它读出
21info.Add("Email", "<a href="mailto:fantasia@sina.com" data-mce-href="mailto:fantasia@sina.com">fantasia@sina.com</a>");
22
23reader.Close();
24
25//覆盖掉原 PDF 文件中
26PdfStamper stamper = new PdfStamper(reader, new FileStream(pdfFile, FileMode.Create, FileAccess.Write));
27
28stamper.MoreInfo=info;&amp;nbsp;
29
30stamper.Close();

看修改之后的 PDF 文件的属性:


把简短的描述信息附加在 PDF 文件自身中了,就再也不用搞个描述文件,不然还得考虑文件与描述同步的问题。 永久链接 https://yanbin.blog/itextsharp-edit-pdf-metadata/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。