Используя приведенный ниже код, я пытаюсь извлечь изображение из PDF. Эти изображения имеют только текстовую информацию в формате PDF. В приведенном ниже коде в приемнике событий тип события всегда равен двум значениям. 1.CLIP_PATH_CHANGED и 2.RENDER_PATH Но я ожидал, что тип "RENDER_IMAGE" преобразуется в изображение. Пожалуйста, дайте мне советы, как это сделать.
Метод:
public static void ExtractImages(string src, string outPath)
{
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
IEventListener listener = new MyImageRenderListener(outPath);
PdfCanvasProcessor parser = new PdfCanvasProcessor(listener);
for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
{
parser.ProcessPageContent(pdfDoc.GetPage(i));
}
pdfDoc.Close();
}
Прослушиватель событий:
public class MyImageRenderListener : IEventListener
{
protected string path;
protected string extension;
public MyImageRenderListener(string path)
{
this.path = path;
}
public void EventOccurred(IEventData data, EventType type)
{
Console.WriteLine(type.ToString());
switch (type)
{
case EventType.CLIP_PATH_CHANGED:
//ClippingPathInfo clippingPathInfo = (ClippingPathInfo)data;
break;
case EventType.RENDER_IMAGE:
try
{
string filename;
ImageRenderInfo renderInfo = (ImageRenderInfo)data;
PdfImageXObject image = renderInfo.GetImage();
if (image == null)
{
return;
}
// You can access various value from dictionary here:
PdfString decodeParamsPdfStr = image.GetPdfObject().GetAsString(PdfName.DecodeParms);
string decodeParams = decodeParamsPdfStr != null ? decodeParamsPdfStr.ToUnicodeString() : null;
byte[] imageByte = image.GetImageBytes(true);
extension = image.IdentifyImageFileExtension();
// You can use raw image bytes directly, or write image to disk
filename = string.Format(path, image.GetPdfObject().GetIndirectReference().GetObjNumber(), extension);
Console.WriteLine(filename);
// image conversion and saving code ...
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
break;
default:
break;
}
}
public ICollection<EventType> GetSupportedEvents()
{
return null;
}
}