Подтвердить что ты не робот

Создайте миниатюру PDF (с открытым исходным кодом/бесплатно)

Глядя на другие сообщения, для этого не удалось найти адекватное решение, которое для моих нужд. Попытка просто получить первую страницу PDF-документа в виде миниатюры. Это должно быть запущено как серверное приложение, поэтому не хотелось бы выписывать PDF-документ в файл, чтобы затем вызвать третье приложение, которое считывает PDF для создания образа на диске.

doc = new PDFdocument("some.pdf");
page = doc.page(1);
Image image = page.image;

Спасибо.

4b9b3361

Ответ 1

Мэтью Эфраим выпустил оболочку с открытым исходным кодом для Ghostscript, которая звучит так, как будто она делает то, что вы хотите, и находится на С#.

Ссылка на исходный код: https://github.com/mephraim/ghostscriptsharp

Ссылка на публикацию блога: http://www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/

Вы можете сделать простой вызов метода GeneratePageThumb для создания миниатюры (или использовать GeneratePageThumbs с номером начальной и конечной страницы для создания эскизов для нескольких отдельных страниц, причем каждая страница представляет собой отдельный выходной файл), формат файла по умолчанию - jpeg, но вы можете изменить его и многие другие параметры, используя альтернативный вызов метода GenerateOutput и указать такие параметры, как формат файла, размер страницы и т.д.

Ответ 2

Я думаю, что пакет кода Windows API для платформы Microsoft.NET мог бы сделать трюк самым простым. То, что это может сделать, - создать тот же самый миниатюру, который делает Проводник Windows (и это первая страница), и вы можете выбрать несколько размеров, они идут до 1024x1024, поэтому этого должно быть достаточно. Это довольно просто, просто создайте ShellObject.FromParsingName(путь к файлу) и найдите подкласс под ним.

Проблема может быть в том, что ваш сервер. Это работает в Windows 7, Windows Vista и, я думаю, Windows Server 2008. Кроме того, проводник Windows должен показывать эскизы на этом компьютере. Самый простой способ обеспечить установку Adobe Reader. Если все это не проблема, я думаю, что это самый элегантный способ.

Ответ 3

http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx

Это работает очень хорошо. Единственными зависимостями являются GhostScript gsdll32.dll(вам нужно скачать GhostScript отдельно, чтобы получить это, но нет необходимости устанавливать GhostScript в вашей рабочей среде) и PDFSharp.dll, который включен в проект.

Ответ 4

Загрузите PDFLibNet и используйте следующий код

public void ConvertPDFtoJPG(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;

}