使用iTextSharp读取/修改PDF元数据,而不向用户显示PDF属性上的任何数据
本文关键字:PDF 属性 用户 显示 数据 任何 读取 iTextSharp 修改 元数据 使用 | 更新日期: 2023-09-27 18:24:35
我正在尝试使用iTextSharp读取/修改PDF元数据。而不向用户显示任何信息。我浏览了以下代码:
iTextSharp.text.Document document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 20f, 20f, 20f, 20f);
using (MemoryStream memStream = new MemoryStream())
{
using (PdfWriter wri = PdfWriter.GetInstance(document, memStream))
{
document.Open(); document.AddSubject("Test"); document.Close();
}
}
如果有任何解决方案的建议,我将不胜感激。
您正在使用的代码片段是关于将元数据添加到从头创建的PDF文档中。您要求从现有PDF文档中读取元数据。请查看iText网站上的文档,更具体地说;条目如何使用自定义属性从PDF中添加/删除/检索信息?
当然,这个问题的答案中使用的代码是用Java编写的,但将其移植到C#相当容易。下面是另一个片段:
public byte[] ManipulatePdf(byte[] src) {
PdfReader reader = new PdfReader(src);
using (MemoryStream ms = new MemoryStream()) {
using (PdfStamper stamper = new PdfStamper(reader, ms)) {
Dictionary<String, String> info = reader.Info;
info["Title"] = "Hello World stamped";
info["Subject"] = "Hello World with changed metadata";
info["Keywords"] = "iText in Action, PdfStamper";
info["Creator"] = "Silly standalone example";
info["Author"] = "Also Bruno Lowagie";
stamper.MoreInfo = info;
}
return ms.ToArray();
}
}
您可以通过PdfReader
从现有PDF中检索元数据。您得到一个Dictionary
,其中的键与ISO-32000-1中的信息字典的键相对应。如果要更改元数据,可以使用PdfStamper
进行更改。
此功能将读取和调整信息字典(这是您在代码片段中提到的内容)。PDF还可以包含XMP元数据。
XMP元数据可以这样读取:
public string ReadXmpMetadata(byte[] src) {
PdfReader reader = new PdfReader(src);
byte[] b = reader.Metadata;
return Encoding.UTF8.GetString(b, 0, b.Length);
}
您可以这样更改XMP元数据:
public byte[] ManipulatePdf(byte[] src) {
PdfReader reader = new PdfReader(src);
using (MemoryStream ms = new MemoryStream()) {
using (PdfStamper stamper = new PdfStamper(reader, ms)) {
Dictionary<String, String> info = reader.Info;
using (MemoryStream msXmp = new MemoryStream()) {
XmpWriter xmp = new XmpWriter(msXmp, info);
xmp.Close();
stamper.XmpMetadata = msXmp.ToArray();
}
}
return ms.ToArray();
}
}
我假设您知道Info字典和PDF中的XMP元数据流之间的区别。