Как конвертировать ClippingPathInfo в изображение с помощью iText7 - PullRequest
0 голосов
/ 19 октября 2019

Используя приведенный ниже код, я пытаюсь извлечь изображение из 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...