PDF в изображение с помощью GhostScript.Файл изображения не должен быть создан - PullRequest
2 голосов
/ 29 декабря 2011

Мне нужно преобразовать PDF в JPEG (или любой другой формат изображения как PNG ...) с помощью C #

У меня есть путь к PDF, и я хочу получить MemoryStream изображения.

Мне удалось сделать это с Ghostscript и GhostscriptSharp , но я вынужден создать файл, фактическое изображение, а затем прочитать этот файл, чтобы создать MemoryStream.

Могу ли я сделать это без этого шага?

Спасибо

Ответы [ 2 ]

3 голосов
/ 29 декабря 2011

Да, но вам нужно будет напрямую взаимодействовать с Ghostscript, используя DLL-библиотеку Ghostscript (я предполагаю, что Windows, так как вы упоминаете C #).

Самое простое решение, вероятно, заключается в использовании устройства отображения, которое отправляет-память растрового изображения обратно в родительское приложение, приложение GS по умолчанию затем создает окно и контекст устройства и рисует в нем растровое изображение.

Вы должны иметь возможность использовать приложение GS в качестве отправной точки, чтобы увидетькак это сделать, и вам не нужно создавать собственное устройство, что означает, что вам не нужно перекомпилировать двоичный файл Ghostscript.

2 голосов
/ 07 мая 2015

Да, вы можете создать поток памяти с помощью функции растеризации Ghostscript.Net. Вот пример, который я использовал на сайте asp.net.

 void PDFToImage(MemoryStream inputMS, int dpi)
    {
        GhostscriptRasterizer rasterizer = null;
        GhostscriptVersionInfo version = new GhostscriptVersionInfo(
                                                                new Version(0, 0, 0), @"C:\PathToDll\gsdll32.dll", 
                                                                string.Empty, GhostscriptLicense.GPL);

        using (rasterizer = new GhostscriptRasterizer())
        {
            rasterizer.Open(inputMS, version, false);

            for (int i = 1; i <= rasterizer.PageCount; i++)
            {

                using (MemoryStream ms = new MemoryStream())
                {
                    DrawImage img = rasterizer.GetPage(dpi, dpi, i);
                    img.Save(ms, ImageFormat.Jpeg);
                    ms.Close();

                    AspImage newPage = new AspImage();
                    newPage.ImageUrl = "data:image/png;base64," + Convert.ToBase64String((byte[])ms.ToArray());

                    Document1Image.Controls.Add(newPage);
                }

            }

            rasterizer.Close();
        }
    } 
...