2
我在玩iText 7
,我在獲取指定目的地列表時遇到問題。枚舉命名目的地
與以往的版本5是很容易與助手:
using (var reader = new PdfReader(_file))
{
var items = SimpleNamedDestination.GetNamedDestination(reader, false).Select(o => o.Key).ToList();
...
}
在7我再也找不到幫手,不得不使用這個畸形(從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,此代碼由於null
返回GetAsArray
行而導致NullReferenceException
失敗。
仔細查看PdfDictionary
和PdfArray
類型 - 它們只有1個條目,沒有枚舉(!),沒有LINQ支持。
我的問題:
- (意見爲主,但我很好奇聽到的答案)爲什麼iText的7具有較少的功能比5?我是否想混合兩者?
- (請求非現場資源)有沒有適當的C#iText 7文檔?從java轉換和過濾關於它的幾十個問題是非常低效的。
- (有點咆哮)我該如何調試這些類型的地獄?談到
PdfDictionary
,它顯示1個條目,可能還沒有解析PDF的內容。我想知道爲什麼GetAsArray
失敗,但是我無法調試它。 - (實際問題)爲什麼上面的代碼對於某些包含指定目標的pdf失敗(例如this one,但我在本地有更多)?
我做錯了什麼?
@Sinatr感謝您加入C#語法。非常感激! –