Сохранить pdf в jpeg с помощью С# - программирование

Сохранить pdf в jpeg с помощью С#

Мне нужно преобразовать файл pdf в jpeg с помощью С#. И решение (библиотека) должно быть бесплатным.

Я искал много информации, но, похоже, я ничего не понял.

Я уже пробовал itextsharp и pdfbox (но это, pdf2image только для java, я думаю) без успеха.

Я попытался извлечь изображения из PDF отдельно, но у меня есть ошибка недопустимых параметров, когда я пытаюсь извлечь изображения... Кажется, у них странная кодировка.

Кто-нибудь может порекомендовать мне любую библиотеку, чтобы сохранить pdf файл в jpeg? Примеры также очень оценены.

Спасибо!


РЕШЕНИЕ: как преобразовать PDF в изображение с помощью С#

  • Перейдите к: http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
  • Загрузить библиотеку
  • Следуйте инструкциям в Интернете.
  • Добавьте свой код в свое приложение, как это (очень просто):

        //Transform pdf to jpg
        PdfToImage.PDFConvert pp = new PDFConvert();
        pp.OutputFormat = "jpeg"; //format
        pp.JPEGQuality = 100; //100% quality
        pp.ResolutionX = 300; //dpi
        pp.ResolutionY = 300;
        pp.FirstPageToConvert = 1; //pages you want
        pp.LastPageToConvert = 1;
        pp.Convert(PATH_PDF+ "report.pdf", PATH_IMAGE + "name.jpg");  
    
4b9b3361

Ответ 1

Здесь может быть полезной библиотека pdfiumviewer. Он также доступен как nuget.

  • Создайте новое приложение winforms. Добавьте к нему nuget "PdfiumViewer".
  • Это также добавит две родные dll с именем "pdfium.dll" в папки x86 и x64 в ваш проект. Установите "Копировать в каталог вывода" на "Копировать всегда".
  • Попробуйте следующий код (измените пути в соответствии с вашими настройками).

        try
        {
            using (var document = PdfiumViewer.PdfDocument.Load(@"input.pdf"))
            {
                var image = document.Render(0, 300, 300, true);
                image.Save(@"output.png", ImageFormat.Png);
            }
        }
        catch (Exception ex)
        {
            // handle exception here;
        }
    

    Изменить 2: Изменен код, чтобы показать, что индекс страницы равен 0, как указано в комментарии С .C. ниже

Изменить 1: Обновленное решение Вы пробовали pdfsharp?

Эта ссылка может быть полезной

Забастовкa >

Ответ 2

Вот как я это сделал с помощью PDFLibNet:

public void ConvertPDFtoHojas(string filename, String dirOut)
{
    PDFLibNet.PDFWrapper _pdfDoc = new PDFLibNet.PDFWrapper();
    _pdfDoc.LoadPDF(filename);

    for (int i = 0; i < _pdfDoc.PageCount; i++)
    {

        Image img = RenderPage(_pdfDoc, i);

        img.Save(Path.Combine(dirOut, string.Format("{0}{1}.jpg", i,DateTime.Now.ToString("mmss"))));

    }
    _pdfDoc.Dispose();
    return;
}
public  Image RenderPage(PDFLibNet.PDFWrapper doc, int page)
{
    doc.CurrentPage = page + 1;
    doc.CurrentX = 0;
    doc.CurrentY = 0;

    doc.RenderPage(IntPtr.Zero);

        // create an image to draw the page into
        var buffer = new Bitmap(doc.PageWidth, doc.PageHeight);
        doc.ClientBounds = new Rectangle(0, 0, doc.PageWidth, doc.PageHeight);
        using (var g = Graphics.FromImage(buffer))
        {
            var hdc = g.GetHdc();
            try
            {
                doc.DrawPageHDC(hdc);
            }
            finally
            {
                g.ReleaseHdc();
            }
        }
        return buffer;

}

Ответ 3

Ghostscript не является бесплатным.

Вот решение:

1) Добавьте этот nuget в свой проект: https://www.nuget.org/packages/PdfiumViewer.Native.x86_64.v8-xfa/

2) Добавьте ссылку "PdfiumViewer" в ваш проект.

3) Используйте следующий код:

using (var pdfDocument = PdfiumViewer.PdfDocument.Load(@"document.pdf"))
{
    var bitmapImage = pdfDocument.Render(0, 300, 300, true);
    bitmapImage.Save(@"image.jpg", ImageFormat.Jpeg);
}