gpt4 book ai didi

c# - 枚举命名目的地

转载 作者:行者123 更新时间:2023-11-30 16:42:45 25 4
gpt4 key购买 nike

我正在玩 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 而失败。

仔细观察 PdfDictionaryPdfArray 类型 - 它们只有 1 个条目,没有枚举器(!),没有 LINQ 支持。

我的问题:

  • (基于意见,但我很想知道答案)为什么 iText 7 的功能比 5 少?我想把两者混合吗?
  • (请求场外资源)某处是否有适当的 C# iText 7 文档?从 Java 转换并在 SO 上过滤几十个关于它的问题是非常低效的。
  • (有点咆哮)我到底应该如何调试这些类型?谈到 PdfDictionary,它显示 1 个条目,可能尚未解析 PDF 的内容。我想知道为什么 GetAsArray 失败了,但是我没有办法调试它。
  • (实际问题)为什么上面的代码对于某些包含指定目的地(例如 this one ,但我在本地有更多)的 pdf 失败?

我做错了什么吗?

最佳答案

我不懂 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com