Отсутствует текст при преобразовании PDF в PNG с помощью Magick.NET

У меня есть приложение MVC, которое загружает файл PDF и отображает каждую страницу как одно изображение PNG с помощью Magick.NET. В большинстве случаев преобразование проходит нормально, но в некоторых случаях я получаю пустое изображение вместо текста, а другие строки текста правильно отображаются на том же изображении. Кто-нибудь знает, что может быть причиной этого?

Ниже приведен код, который я использую.

public FileResult PNGPreview(Guid id, Int32 index)
{
    MagickReadSettings settings = new MagickReadSettings();
    // Settings the density to 300 dpi will create an image with a better quality
    settings.FrameIndex = index;
    settings.FrameCount = 1;
    settings.Density = new PointD(300, 300);
    settings.UseMonochrome = true;
    using (MagickImageCollection images = new MagickImageCollection())
    {
        // Add all the pages of the pdf file to the collection
        images.Read(CreateDocument(id), settings);

        using (MemoryStream stream = new MemoryStream())
        {

            images[0].Write(stream, MagickFormat.Png24);
            stream.Close();
            byte[] result = stream.ToArray();
            return File(result, "image/png");
        }
    }
}

private byte[] CreateDocument(Guid id)
{
    PdfReader reader = new PdfReader(Server.MapPath(String.Format("~/documenttemplates/{0}.pdf", id)));
    byte[] result = null;
    using (MemoryStream ms = new MemoryStream())
    {
        PdfStamper stamper = new PdfStamper(reader, ms, '\0', false);
        stamper.Close();
        reader.Close();
        result = ms.ToArray();
    }

    return result;
}

person Steve    schedule 07.09.2015    source источник
comment
Является ли проблема случайной или некоторые PDF-файлы постоянно преобразуются в пустые изображения?   -  person Micke    schedule 07.09.2015
comment
Некоторые файлы PDF последовательно конвертируются. Сначала я подумал, что это может быть проблема со шрифтом, но в PDF-файлах есть стандартные шрифты, такие как Helvetica, Arial и т. д.   -  person Steve    schedule 07.09.2015
comment
Я думаю, было бы полезно, если бы вы могли поделиться одним из PDF-файлов, которые постоянно конвертируются в пустые изображения, если таковые имеются.   -  person Micke    schedule 07.09.2015
comment
Magick.NET использует Ghostscript для чтения файлов PDF. Это может быть ошибка в Ghostscript. Вы используете последнюю версию?   -  person dlemstra    schedule 07.09.2015
comment
Я использую GhostScript 9.16, которая является текущей версией.   -  person Steve    schedule 07.09.2015
comment
Можете ли вы добавить ссылку на ваш файл PDF? Не стесняйтесь обращаться ко мне (я написал Magick.NET) на CodePlex, если вы не хотите публично делиться своим файлом PDF.   -  person dlemstra    schedule 07.09.2015
comment
@dlemstra Я отправил вам электронное письмо через CodePlex. Спасибо.   -  person Steve    schedule 07.09.2015


Ответы (1)


Файл PDF, вызвавший эту проблему, был отправлен мне по электронной почте, и мне сказали, что этот файл был создан с помощью Word, а затем отредактирован с помощью Foxit Pro.

Magick.NET использует Ghostscript для преобразования файла PDF в изображение. Выполняется команда, аналогичная приведенной ниже.

"c:\Program Files (x86)\gs\gs9.16\bin\gswin32c.exe" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE
-dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=pnggray"
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72"  "-sOutputFile=Test.%d.png" "-fTest.pdf"

И это скажет нам, что созданный файл поврежден.

**** Error reading a content stream. The page may be incomplete.
**** File did not complete the page properly and may be damaged.
**** Error reading a content stream. The page may be incomplete.
**** File did not complete the page properly and may be damaged.

**** This file had errors that were repaired or ignored.
**** The file was produced by:
**** >>>> Microsoft? Word 2013 <<<<
**** Please notify the author of the software that produced this
**** file that it does not conform to Adobe's published PDF
**** specification.

Это можно решить, создав входной файл с помощью другой программы.

person dlemstra    schedule 07.09.2015
comment
Сохранение файла в Word 2013 в PDF было причиной проблемы. Использование другого метода преобразования Word в PDF решило эту проблему. Спасибо за вашу помощь. - person Steve; 07.09.2015