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

问题描述 投票:0回答:2

我有一个使用

TWebBrowser
来显示 HTML 报告的应用程序。我使用名为
TCanvas
PrintCanvas
来打印页眉、页脚和图像。现在我想将
TWebBrowser
中的内容添加到画布中,以便也打印 HTML 报告。我尝试将
TWebBrowser
内容复制到位图,然后将位图添加到我的
PrintCanvas
。这有效,但仅显示
TWebBrowser
的显示部分。

有没有办法将整个 HTML 报告复制到

TCanvas
这将允许我使用现有的打印代码。如果有更好的方法,我可以使用
TWebBrowser
以外的方法。

我尝试过的另一件事是使用 TWebBrowser 的

ExecWB
方法来执行
OLECMDID_PRINT
命令,该命令会打开浏览器的打印对话框。这可行,但不允许我打印
PrintCanvas
上已有的其他信息,例如页眉、页脚和图像。

delphi twebbrowser tcanvas
2个回答
2
投票

有多种方法可以做到这一点,但它们都需要不同的组件。

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

CEF 具有离屏渲染模式 (OSR),可在原始位图缓冲区中绘制 Web 内容。

几个 CEF4Delphi 演示展示了如何使用该模式,例如 SimpleOSRBrowser、TabbedOSRBrowser 或 KioskOSRBrowser。您可以使用任何演示作为您的应用程序的模板。

这些演示从 TChromiumCore.OnPaint 事件中的“buffer”参数中复制原始位图数据和 Web 内容。正如您在此处所看到的,SimpleOSRBrowser 将扫描线从缓冲区参数复制到自定义位图。

或者,您也可以使用 CEF 浏览器而不使用离屏渲染模式。如果您构建 MiniBrowser 演示,您可以尝试右上角菜单按钮中的“截取屏幕截图”选项。此选项使用“Page.captureScreenshot”DevTools 方法来截取屏幕截图并将其保存为 PNG 图像此处

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


0
投票

Иногда (и не так уж редко) бывает необходимо конвертировать DELPHI-файлы в HTML-формат。 Например,для публикации Delphi-исходников。 Вот здесь (см. ниже), как раз один из таких инструментов. https://roamer55.ru/my_download/progs/os_win/spPasToHtml/spPasToHtml.htm

© www.soinside.com 2019 - 2024. All rights reserved.