作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在玩 iText 7
,但在获取命名目的地列表时遇到了问题。
在之前的版本 5 中,使用 helper 非常容易:
using (var reader = new PdfReader(_file))
{
var items = SimpleNamedDestination.GetNamedDestination(reader, false).Select(o => o.Key).ToList();
...
}
在 7 中我找不到 helper 了,不得不使用这个怪物(改编自 official java example 的代码):
using (var reader = new PdfDocument(new PdfReader(file)))
{
var catalog = reader.GetCatalog().GetPdfObject();
var names = catalog.GetAsDictionary(PdfName.Names);
var dests = names.GetAsDictionary(PdfName.Dests);
var name = dests.GetAsArray(PdfName.Names); // problem
var items = new List<string>();
for (int i = 0; i < name.Size(); i += 2)
items.Add(name.GetAsString(i).ToString());
...
}
此外,对于某些 PDF,由于在 GetAsArray
行返回了 null
,此代码因 NullReferenceException
而失败。
仔细观察 PdfDictionary
和 PdfArray
类型 - 它们只有 1 个条目,没有枚举器(!),没有 LINQ 支持。
我的问题:
PdfDictionary
,它显示 1 个条目,可能尚未解析 PDF 的内容。我想知道为什么 GetAsArray
失败了,但是我没有办法调试它。我做错了什么吗?
最佳答案
我不懂 C#,但在 Java 中,可以使用 getNameTree()
方法获取名称树。我假设 iText 7 的 C# 版本中存在类似的方法 GetNameTree()
:
Map<String, PdfObject> names =
pdfDoc.getCatalog().getNameTree(PdfName.Dests).getNames();
for (Map.Entry<String, PdfObject> name : names.entrySet()) {
System.out.println("Name = " + name.getKey());
System.out.println("Page = " + name.getValue().toString());
}
如果事实证明我的回答有帮助,您能用 C# 语法更新我的回答就太好了。
C#:
using (var pdf = new PdfDocument(new PdfReader(file)))
{
var names = pdf.GetCatalog().GetNameTree(PdfName.Dests).GetNames().Select(o => o.Key).ToList();
...
}
关于c# - 枚举命名目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46072450/
我是一名优秀的程序员,十分优秀!