2009-06-05 36 views

回答

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; 

的问候,彼得

+0

感谢彼得,迄今为止的最佳答案! (呃作为* only *回答到目前为止:-))。 我的系统上有Acrobat,所以我可以测试代码。工作正常。 (但是Acrobat可能不在目标系统上)。 我们会看看有人提出了一个更便宜的选择。同时,再次感谢。 HANWE – stevenvh 2009-06-05 14:56:07

+1

看起来很傻,并且浪费了很多时间通过剪贴板传递图像。没有办法将它直接复制到位图? – 2017-08-08 08:17:49

0

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

糟糕。我只注意到“免费”的要求。他们的工具箱售价为249美元,如果你的项目是你要销售的东西,至少它对你的用户是免费的,或者至少不是单独定价的。

杰克

+0

QuickPDF图书馆8年价值1500美元,这是6倍,至少对我来说太多了。 (这是每年25%的通货膨胀率。) – 2017-08-08 08:21:51

4

您可以使用PDFTK和ImageMagick的/ Ghostscript的2个步骤执行此

第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无效格式化,但这似乎没有影响输出。

0

如果您不想查找高分辨率快照,可以使用Acrobat的ActiveX组件以特殊形式(全屏,无边框)打开PDF文件,导航至页面,然后获取screenshot of the screen。你可以立即关闭该表单,这样它就会闪烁,然后消失。

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

0

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

1

这里的一些德尔福相关的工具比较管理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可以足够屏幕)/选择你的页码/确定/选择文件夹和文件名/保存,你就完成了。