PDF 文档中的快照图像

ste*_*nvh 5 pdf delphi snapshot

我想从 PDF 文档中的任意页面(即不一定是第一页)制作快照图像。有这方面的免费工具吗?我正在使用德尔福。
蒂亚·
史蒂文

Fra*_*vel 5

您可以使用 pdftk 和 ImageMagick/Ghostscript 分两步完成此操作

第 1 步:使用您感兴趣的页面创建一个新的 pdf 文件:

pdftk.exe file.pdf cat 2 output page2_only.pdf
Run Code Online (Sandbox Code Playgroud)

步骤2:将新的pdf转换为jpg:

convert -geometry 1600x1600 -density 200x200 -quality 100 page2_only.pdf page_snapshot.jpg
Run Code Online (Sandbox Code Playgroud)

转换是一个 ImageMagick 命令。

ImageMagick 需要安装 Ghostscript 才能正常工作。当我对此进行测试时,convert 抱怨由 pdftk 导致的 PDF 格式无效,但这似乎并没有影响输出。


Pie*_*Wyk 0

史蒂文

几年前我遇到了同样的问题,唯一可靠的解决方案是购买 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;
Run Code Online (Sandbox Code Playgroud)

问候, 彼得