PDF文档中的快照图像

时间:2009-06-05 10:35:01

标签: delphi pdf snapshot

我想从PDF文档中的任意页面(即不一定是第一页)制作快照图像。任何免费工具吗?我正在使用Delphi TIA
史蒂芬

6 个答案:

答案 0 :(得分:4)

您可以使用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才能使其正常工作。当我测试这个时,转换抱怨由pdftk引起的PDF格式无效,但这似乎不会影响输出。

答案 1 :(得分:1)

这里比较一些与Delphi相关的管理PDF的工具:Top 9 PDF Managing Tools。 到现在为止,我自己从未使用过,所以我无法给出推荐。

还有PDFlib Lite是开源的。

P.S。:您能否澄清一下您是否需要“一次性”(手动)解决方案或程序化解决方案?你在提问中提到了Delphi,但在你对Pieter van Wyk的评论中,你似乎对手动解决方案很满意。对于手动的,我建议,与其他人一样,Ghostscript (engine) with Ghostview (UI)§。 Ghostscript有一个API that can be accessed by Delphi,但是使用商业程序进行部署可能会有问题(大小,许可证等)。

§您需要先安装Ghostscript而不是Ghostview。打开你的PDF,菜单文件/转换/作为设备选择pdfwrite(或你需要/喜欢的其他图像格式)/选择你的分辨率(72可以足够的屏幕)/选择你的页码/确定/选择文件夹和文件名/保存,你就完成了。

答案 2 :(得分: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;

问候,彼得

答案 3 :(得分:0)

值得您花些时间查看The QuickPDF Library。我用了大约5年的图书馆。它拥有一个很好的支持小组,通过原始出版商的漫长而痛苦的放弃而站在它旁边,现在得到了多年来一直是PDF世界重要名字的人Karl De Abrew的支持。他们的下载页面上有他们产品的可下载参考手册,我认为他们有像ClonePage之类的东西。无论如何,如果你在手册中找不到答案,请联系他们的支持,你可能会得到一个完整的解释,说明如何完成你想要做的事情。

糟糕。我刚注意到“免费”的要求。他们的工具箱价格相当于249美元,如果您的项目是您要销售的产品,至少它对您的用户是免费的,或者至少不是单独定价的。

杰克

答案 4 :(得分:0)

如果您没有寻找高分辨率快照,您可以使用Acrobat的ActiveX组件以特殊形式(全屏,无边框)打开pdf文件,导航到该页面,然后获取{{3 }}。您可以立即关闭该表单,这样它就会闪烁,然后消失。

ImageMagick也可以在Windows上使用,它有非常简单的命令可以调用(隐藏,使用ShellExec),创建JPEG(或任何其他图像类型)。

答案 5 :(得分:0)

命令行中的Ghostscript(没有可用的ActiveX功能) gswin32c.exe ....参数.....(见文档,很容易)