如何在 Delphi 中将HTML内容复制到TCanvas?

pbgvytdp  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(177)

我有一个应用程序,它使用TWebBrowser来显示HTML报表。我使用名为PrintCanvasTCanvas来打印页眉、页脚和图像。现在,我想将TWebBrowser中的内容添加到画布中,以便也打印HTML报表。我尝试过将TWebBrowser内容复制到位图中,然后将位图添加到我的PrintCanvas中。这可以工作,但只显示TWebBrowser的显示部分。

**是否有方法可以将整个HTML报告复制到TCanvas?**这将允许我使用现有的打印代码。如果有更好的方法,我可以使用TWebBrowser以外的方法。

我尝试过的另一个方法是使用TWebBrowser的ExecWB方法来执行OLECMDID_PRINT命令,这会打开浏览器的打印对话框,这可以工作,但这不允许我打印PrintCanvas上已经存在的其他信息,如页眉、页脚和图像。

vc6uscn9

vc6uscn91#

有几种方法可以做到这一点,但所有这些方法都需要不同的组件。

**解决方案1:**既然您提到可以使用替代组件,那么我将使用CEF4Delphi

CEF有一个 offscreen rendering 模式(OSR),可以在原始位图缓冲区中绘制Web内容。
几个CEF4Delphi演示展示了如何使用这种模式,如SimpleOSRBrowser、TabbedOSRBrowser或KioskOSRBrowser。您可以使用任何演示作为应用程序的模板。
这些演示从TCromiumCore.OnPaint事件的“buffer”参数中复制原始位图数据和Web内容。正如您在这里看到的,SimpleOSRBrowser从buffer参数中复制扫描线到自定义位图。
或者,您也可以使用CEF浏览器而不使用屏幕外渲染模式。如果您构建MiniBrowser演示,您可以尝试右上角菜单按钮中的“拍摄屏幕快照”选项。此选项使用“Page.captureScreenshot”DevTools方法拍摄屏幕快照,并将其保存为PNG图像。

**解决方案2:**使用WebView4Delphi.WebView4Delphi也有一个MiniBrowser演示,它带有一个“拍摄快照...”菜单选项,该选项调用 TWVBrowser.CapturePreview 来保存PNG文件,但是如果调用TWVBrowser.CallDevToolsProtocolMethod,您也可以使用前面提到的DevTools方法。

相关问题