Itext 如何将PDFObject/PDFDictionary转换为PDFArray

Itext 如何将PDFObject/PDFDictionary转换为PDFArray,itext,Itext,我正在尝试使用iTextSharp库解析标记PDF的标记结构。 当一个标记包含多个子标记时,我们可以使用以下代码访问这些子标记: PdfDictionary docElement = kids.GetAsDict(0); PdfArray kids_doc = docElement.GetAsArray(PdfName.K); var docElement = kids.GetAsDict(0); PdfObject pdfObj = docElement.Ge

我正在尝试使用iTextSharp库解析标记PDF的标记结构。 当一个标记包含多个子标记时,我们可以使用以下代码访问这些子标记:

PdfDictionary docElement = kids.GetAsDict(0);                
PdfArray kids_doc = docElement.GetAsArray(PdfName.K);
var docElement = kids.GetAsDict(0);
PdfObject pdfObj = docElement.Get(PdfName.K);                    
PdfArray arr = (PdfArray)pdfObj; 
但是当一个标记只包含一个子元素时,我无法使用上面的代码,因为它返回null而不是PDFArray对象。 因此,我尝试使用以下代码将PDFObject类型转换为PDFArray:

PdfDictionary docElement = kids.GetAsDict(0);                
PdfArray kids_doc = docElement.GetAsArray(PdfName.K);
var docElement = kids.GetAsDict(0);
PdfObject pdfObj = docElement.Get(PdfName.K);                    
PdfArray arr = (PdfArray)pdfObj; 
但它抛出异常,因为无法将PDFIndirectReference转换为PDFArray。
有人能帮我把输出作为:标签的子对象吗?如果它在PDFArray对象中>=1

我用另一种方法解决了我面临的问题:我没有将PDFObject/PDFDictionary转换为PDFArray,而是创建了新的PDFArray对象,然后删除了PDFName.K的现有键,并将以前创建的数组添加为PDFName.K。我给出的解决方案如下:

PdfArray arr = new PdfArray();
PdfObject pdfObj = docElement.Get(PdfName.K);  
arr.Add(pdfObj);                                        
for (int i = 1; i < kidsCount; i++)
{                        
    arr.Add(kids[i]);
}
docElement.Remove(PdfName.K);
docElement.Put(PdfName.K,arr);

PDF中的字典和数组是两个不同的对象。字典是一组键和值;数组由一系列值组成。如果你遇到PDF格式的词典,你应该把它当作一本词典。您不应该尝试将其转换为数组,因为这没有意义。感谢Bruno的建议。但是有没有一种方法可以将PDFObject类型转换为PDFArray,而不会得到我在最后一段中提到的异常。如下所示:PdfArray arr=PdfArray pdfobj;你自己知道这个问题的答案。如果您使用PdfArray kids\u doc=docElement.GetAsArrayPdfName.K;与PdfName.K对应的值不是数组,不会引发异常,但kids\u doc将为null。显然,如果您将一个非PdfArray的对象强制转换为PdfArray对象,您将并且应该得到一个异常。简而言之:不要将不是PdfArray的对象强制转换为PdfArray对象。感谢Bruno的快速响应。