2015-09-07 5 views
0

У меня есть приложение MVC, которое загружает PDF-файл и рендерит каждую страницу как одно изображение PNG с помощью Magick.NET. В большинстве случаев преобразование прекрасное, но в некоторых случаях я получаю пустое изображение, где должен быть текст, и другие строки текста, отображаемые правильно на одном и том же изображении. Кто-нибудь знает, что может быть причиной этого?Текст отсутствует при преобразовании 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; 
} 
+0

Является ли проблема случайной или некоторые PDF-файлы последовательно конвертируются в пустые изображения? – Micke

+0

Некоторые файлы PDF конвертируются последовательно. Сначала я подумал, что это может быть проблема с шрифтом, но в файлах PDF есть стандартные шрифты, такие как Helvetica, Arial и т. Д. – Steve

+0

Я думаю, было бы полезно, если бы вы могли поделиться одним из файлов PDF, которые последовательно конвертируются в пустые изображения, если они есть. – Micke

ответ

1

Файл PDF, который вызвал этот вопрос был предоставлен мне по электронной почте, и мне сказали, что этот файл был создан Словом и затем отредактированы с 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. 

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

+0

Сохранение файла в Word 2013 в формате PDF стало причиной проблемы. С помощью другого метода для преобразования из Word в PDF эта проблема решена. Спасибо за вашу помощь. – Steve