снимок изображения из PDF-документа
Вопрос
Я хочу сделать снимок изображения с произвольной страницы (т.е.не обязательно первый) в PDF-документе.Есть ли бесплатные инструменты для этого?Я использую Делфи.
ТИА
Стивен
Решение
Стивен
У меня была такая же проблема пару лет назад, и единственным надежным решением было купить Acrobat Professional (7) и использовать его для извлечения страницы, копирования ее в буфер обмена и создания на ее основе миниатюры.Мне было бы очень интересно узнать, существуют ли бесплатные методы для извлечения страниц из документа PDF.
procedure TFormMain.LoadPDFDoc(Filename: TFilename; var Bitmap: TBitmap);
var
PDPage : variant;
PdApp, PdDoc, PdRect: variant;
begin
try
PdApp := CreateOleObject('AcroExch.App');
PdDoc := CreateOleObject('AcroExch.PDDoc');
PdRect := CreateOleObject('AcroExch.Rect');
//Open the pdf document
PDDoc.Open(FileName);
PDPage := PDDoc.AcquirePage(0);
//Define the rectangle to fit the page
PDRect.Top := 0;
PDRect.Left := 0;
PDRect.Right := PDPage.GetSize.x;
PDRect.Bottom := PDPage.GetSize.y;
//Set the bitmap proportions
with Bitmap do
begin
Width := PDRect.Right;
Height := PDRect.Bottom;
end;
//Copy the rectangle to the ClipBoard
PDPage.CopyToClipboard(PDRect, 0, 0, 100);
if not VarIsEmpty(PDPage) then
PDPage := UnAssigned;
//Close the pdf document
PDDoc.Close;
//Paste the image from the clipboard
with Bitmap do
begin
LoadFromClipboardFormat(CF_BITMAP, ClipBoard.GetAsHandle(CF_BITMAP), 0);
PixelFormat := pf24Bit;
HandleType := bmDIB;
end;
Except on E: Exception do
ShowMessage(E.Message);
end;
end;
С уважением, Питер
Другие советы
Вы можете сделать это за 2 шага, используя pdftk и ImageMagick/Ghostscript.
Шаг 1:Создайте новый pdf-файл с интересующей вас страницей:
pdftk.exe file.pdf cat 2 output page2_only.pdf
Шаг 2:Конвертируйте новый PDF в JPG:
convert -geometry 1600x1600 -density 200x200 -quality 100 page2_only.pdf page_snapshot.jpg
конвертировать — это команда ImageMagick.
Для работы ImageMagick требуется установленный Ghostscript.Когда я тестировал это, Convert жаловался на неправильное форматирование PDF-файла, вызванное pdftk, но, похоже, это не повлияло на вывод.
Вот сравнение некоторых инструментов Delphi для управления PDF: 9 лучших инструментов управления PDF-файлами.До сих пор я сам никогда им не пользовался, поэтому не могу дать рекомендации.
А также есть PDFlib Lite который имеет открытый исходный код.
P.S.: Можете ли вы уточнить, хотите ли вы «однократное» (ручное) решение или программное?Вы упоминаете Delphi в своем вопросе, но в своем комментарии Питеру ван Вику вы, кажется, довольны ручным решением.Для ручного варианта я предлагаю, как и другие, Ghostscript (движок) с Ghostview (пользовательский интерфейс)§.Ghostscript имеет API к которому можно получить доступ через Delphi, но потенциально может быть проблематично (размер, лицензия и т. д.) развернуть его с помощью коммерческой программы.
§ Вам необходимо сначала установить Ghostscript, а не Ghostview.Откройте PDF-файл, меню «Файл» / «Конвертировать» / в качестве устройства выберите pdfwrite (или другой формат изображения, который вам нужен / предпочитаете) / выберите разрешение (72 может быть достаточно для экрана) / выберите номер страницы / ОК / выберите папку и имя файла / Сохраните и все готово.
Возможно, стоит потратить время на проверку Библиотека QuickPDF.Пользуюсь библиотекой около 5 лет.У него есть хорошая группа поддержки, которая поддержала его в период долгого и болезненного ухода со стороны первоначального издателя, а теперь ее поддерживает человек, который уже много лет является важным именем в мире PDF, Карл Де Абрю.У них есть загружаемое справочное руководство к их продукту на странице загрузки, и я думаю, у них есть что-то вроде ClonePage или что-то в этом роде.В любом случае, если вы не можете найти ответ в руководстве, обратитесь в их службу поддержки, и вы, вероятно, получите полное объяснение того, как выполнить то, что вы пытаетесь сделать.
Упс.Я только что заметил это требование «бесплатности».Их набор инструментов по справедливой цене составляет 249 долларов, и если вы будете продавать свой проект, по крайней мере, он будет бесплатным для ваших пользователей или, по крайней мере, не будет стоить отдельно.
Джек
Если вам не нужен снимок в высоком разрешении, вы можете просто открыть файл PDF с помощью компонента ActiveX Acrobat в специальной форме (полноэкранный режим, без границ), перейти на страницу и получить скриншот экрана.Вы можете немедленно закрыть эту форму, чтобы она просто вспыхнула и исчезла.
ImageMagick также можно использовать в Windows, он имеет очень простые команды, которые вы можете вызвать (скрытые, с помощью ShellExec), создать JPEG (или любой другой тип изображения).
Ghostscript из командной строки (нет ActiveX Compenent) GSWIN32C.Exe ....параметры.....(см. документацию, это очень просто)