Создайте миниатюру PDF (с открытым исходным кодом/бесплатно)
Глядя на другие сообщения, для этого не удалось найти адекватное решение, которое для моих нужд. Попытка просто получить первую страницу PDF-документа в виде миниатюры. Это должно быть запущено как серверное приложение, поэтому не хотелось бы выписывать PDF-документ в файл, чтобы затем вызвать третье приложение, которое считывает PDF для создания образа на диске.
doc = new PDFdocument("some.pdf");
page = doc.page(1);
Image image = page.image;
Спасибо.
Ответы
Ответ 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;
}
Ответ 5
Раньше я делал подобные вещи с imagemagick (Convert) давно.
Для этого есть .Net Wrapper, возможно, стоит проверить:
http://imagemagick.codeplex.com/releases/view/30302