5

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

4

6 回答 6

5

您可以使用 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 才能使其工作。当我对此进行测试时,convert 抱怨由 pdftk 引起的 PDF 格式无效,但这似乎并没有影响输出。

于 2009-06-05T17:08:47.670 回答
1

这里比较一些与 Delphi 相关的 PDF 管理工具:Top 9 PDF 管理工具。到目前为止,我自己从来没有使用过,所以我无法给出推荐。

还有开源的PDFlib Lite 。

PS:您能否澄清一下您想要“一次性”(手动)解决方案还是程序化解决方案?您在问题中提到了 Delphi,但在您对 Pieter van Wyk 的评论中,您似乎对手动解决方案感到满意。对于手册,我建议和其他人一样,使用带有 Ghostview (UI) § 的 Ghostscript(引擎)。Ghostscript 有一个可供 Delphi 访问的 API ,但使用商业程序部署可能会出现问题(大小、许可证等)。

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

于 2009-10-18T22:07:08.473 回答
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;

问候,彼得

于 2009-06-05T12:55:34.363 回答
0

可能值得您花时间查看QuickPDF 库。我已经使用图书馆大约 5 年了。它有一个很好的支持团队,他们在原出版商长期而痛苦的放弃中一直支持它,现在得到了多年来在 PDF 世界中享有盛誉的人 Karl De Abrew 的支持。他们的下载页面上有他们产品的可下载参考手册,我认为他们有类似 ClonePage 之类的东西。无论如何,如果您在手册中找不到答案,请联系他们的支持,您可能会获得有关如何完成您正在尝试做的事情的完整说明。

哎呀。我刚刚注意到“免费”要求。他们的工具箱价格合理,为 249 美元,如果您的项目是您要出售的东西,至少它对您的用户是免费的,或者至少不单独定价。

杰克

于 2009-06-05T16:42:00.090 回答
0

如果您不是在寻找高分辨率快照,您可以使用 Acrobat 的 ActiveX 组件以特殊形式(全屏,无边框)打开 pdf 文件,导航到页面,然后获取屏幕截图。您可以立即关闭该表单,因此它只会闪烁并消失。

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

于 2009-06-05T21:52:58.137 回答
0

命令行中的 Ghostscript(没有可用的 ActiveX 组件) gswin32c.exe .... 参数.....(请参阅文档,这很容易)

于 2009-09-18T08:03:19.740 回答