我试图使用iTextSharp来查看一些PDF,并在打印它们之前检查它们是否不正常。部分内容是检查PDF中的图像,查看它们的dpi、透明度等等。
为此,我循环遍历页面并检索PdfObjects,这些页面被转换为PRStream。从这个PRStream检索PdfName.SUBTYPE,并检查它是否与PdfName.IMAGE匹配。
这似乎是合乎逻辑的,以检查找到的对象是否实际上是图像,但我遇到了子类型为空的问题,而在pdf中(我已经测试了我自己的几个pdf以及在线发现的pdf)中的图像不被认为是图像,因此被忽略了。
我是不是不正确地使用图书馆?
代码片段:
PdfObject pdfObject = pdfReader.GetPdfObject(i);
//get the object at the index i in the objects collection
if (pdfObject == null || !pdfObject.IsStream()) //object not found so continue
{
continue;
}
PRStream prStream = (PRStream) pdfObject; //cast object to stream
PdfObject type = prStream.Get(PdfName.SUBTYPE); //get the object type
//check if the object is the image type object
if (type != null && type.ToString().Equals(PdfName.IMAGE.ToString()))
//This if returns false when I expect true编辑:根据请求,在本例中,我用过的Pdf在第2、4、5、6和8页上有几个图像。但是,在我运行的代码中,它只对第5页上的单个图像进行了重新编码。在第4和第8页上找到了一些对象,但是这些对象的子类型为null。
发布于 2017-10-23 18:47:22
看来我使用PDFObject不正确(我很抱歉)。通过使用来自另一个问题的一些代码,我设法解决了这个问题--我认为可能是这样的,因为@mkl设法正确地使用了我的代码片段,从而提出了错误在哪里(如果不是在给定的代码段中)的问题。我复制了一个试图提取图像的人,但表面上给出了错误的代码,或者有着与我不同的意图。
谢谢大家的帮助!由于这是我的第一个堆叠溢出问题,我不知道如何结束和/或奖励我在路上帮助我的评论,对不起
https://stackoverflow.com/questions/46890046
复制相似问题