снимок изображения из PDF документа - PullRequest
4 голосов
/ 05 июня 2009

Я хочу сделать снимок изображения с произвольной страницы (т.е. не обязательно первой) в документе PDF. Есть бесплатные инструменты для этого? Я использую Delphi.
ТИА
Стивен

Ответы [ 6 ]

4 голосов
/ 05 июня 2009

Вы можете сделать это в 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

convert - команда ImageMagick.

ImageMagick требует, чтобы Ghostscript был установлен, чтобы это работало. Когда я это проверял, конвертер пожаловался на неправильное форматирование PDF, вызванное pdftk, но это, похоже, не повлияло на вывод.

1 голос
/ 19 октября 2009

Вот сравнение некоторых связанных с Delphi инструментов для управления PDF: Top 9 PDF Managing Tools . До сих пор я никогда не использовал его сам, поэтому не могу дать рекомендации.

Существует также PDFlib Lite с открытым исходным кодом.

P.S .: Вы можете уточнить, хотите ли вы одноразовое (ручное) решение или программное? Вы упоминаете Delphi в своем вопросе, но в своем комментарии к Pieter van Wyk вы, кажется, довольны ручным решением. Для руководства я предлагаю, как и другие, Ghostscript (движок) с Ghostview (UI) §. Ghostscript имеет API , к которому Delphi может получить доступ, но он может быть проблематичным (размер, лицензия и т. Д.) Для развертывания с коммерческой программой.

§ Вам необходимо установить Ghostscript, а не Ghostview. Откройте ваш PDF, в меню Файл / Преобразовать / как устройство выберите pdfwrite (или другой формат изображения, который вам нужен / предпочитаете) / выберите разрешение (для экрана может быть 72) / выберите номер страницы / OK / выберите папку и имя файла / Сохранить и все готово.

0 голосов
/ 18 сентября 2009

Ghostscript из командной строки (недоступен компонент ActiveX) gswin32c.exe .... параметры ..... (см. документацию, это очень просто)

0 голосов
/ 06 июня 2009

Если вы не ищете снимок в высоком разрешении, вы можете просто открыть файл pdf с компонентом Acrobat ActiveX в специальной форме (во весь экран, без границ), перейти на страницу и получить скриншот экрана . Вы можете немедленно закрыть эту форму, чтобы она просто вспыхнула и исчезла.

ImageMagick также можно использовать в Windows, в нем есть очень простые команды, которые вы можете вызывать (скрытые, используя ShellExec), создавать JPEG (или любой другой тип изображения).

0 голосов
/ 05 июня 2009

Возможно, стоит потратить время на проверку Библиотека QuickPDF . Я использовал библиотеку около 5 лет. У него есть хорошая группа поддержки, которая поддерживала его через долгое и мучительное увольнение от первоначального издателя, и теперь его поддерживает кто-то, кто много лет был важным именем в мире PDF, Карл де Абрю. У них есть загружаемое справочное руководство по их продукту на их странице загрузки, и я думаю, что у них есть что-то вроде ClonePage или что-то в этом роде. В любом случае, если вы не можете найти ответ в руководстве, обратитесь в службу поддержки, и вы, вероятно, получите полное объяснение того, как выполнить то, что вы пытаетесь сделать.

К сожалению. Я только что заметил это «бесплатное» требование. Их набор инструментов по справедливой цене составляет 249 долларов, и если вы продадите свой проект, по крайней мере, он будет бесплатным для ваших пользователей или, по крайней мере, не будет стоить отдельно.

Jack

0 голосов
/ 05 июня 2009

Стивен

У меня была такая же проблема пару лет назад, и единственным надежным решением было купить 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;

С уважением, Питер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...