将页面从PDF文档复制到TBitmap的更好方法是什么?

时间:2017-08-08 05:59:05

标签: delphi

我想将页面图像从PDF文档复制到TBitmap。我看了this answer。它没有马上工作;我必须在CopyToClipboard之后添加等待:

  ClipBoard.Clear;
  PDPage.CopyToClipboard(PDRect, 0, 0, 100);
  repeat
    Sleep(100);
  until ClipBoard.HasFormat(cf_Bitmap);
  Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);

但它远非理想。首先它很慢,其次如果你想将它用于批处理,那么剪贴板对其他应用程序来说是不受限制的。难道没有更好的方法,而且没有使用剪贴板吗?

Acrobat's API documentation中,我找到了PDPage的DrawEx方法:

var
  hBitmap: THandle;
...
  hBitmap := CreateCompatibleBitmap(Bitmap.Handle, Bitmap.Width, Bitmap.Height);
  PDPage.DrawEx(hBitmap, 0, PDRect, 0, 0, 100);

我希望它能将页面复制到我传递给函数的TImage.Picture.Bitmap。相反,页面是在桌面上绘制的,这使我认为hBitmap为0.使用调试器确认。

我该如何解决这个问题?

修改
MBo 表示创建后TBitmap已经拥有兼容的位图,因此CreateCompatibleBitmap可能是多余的。但是我还是不知道应该把什么句子传递给DrawEx。我尝试Bitmap.Handle,但结果位图是空白的。

我也试过

var
   DC: HDC;
...
   DC := GetDC(Bitmap.Handle);
   try
     PDPage.DrawEx(DC, 0, PDRect, 0, 0, 100);
   finally
     ReleaseDC(Handle, DC);
   end;

但这也是在桌面上绘制的。

0 个答案:

没有答案