Вопрос

Я хочу сделать снимок изображения с произвольной страницы (т.е.не обязательно первый) в 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 ....параметры.....(см. документацию, это очень просто)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top