TEdgeBrowser(WebView2)のPDF保存機能を使用したい

解決


てつこ  2024-08-30 16:41:04  No: 151603  IP: [192.*.*.*]

こんにちは
Delphi 11のTEdgeBrowserに表示している内容をPDFとして保存したいと考えています

次の①~③のステップで手動保存は可能ですが、この処理を自動化できないでしょうか?
①印刷ダイアログを表示
②プリンター「PDFとして保存」を選択
③「保存」をクリック

Webview2について調べているとPDFとして保存できるメソッド"PrintToPdfAsync"が存在するとの情報を見かけたのですがVcl.EdgeやWinapi.WebView2を調べても存在しているように見えません。

何か情報などありましたらよろしくお願いします。

編集    削除
AAAAA  2024-08-30 17:35:11  No: 151604  IP: [192.*.*.*]

procedure TForm1.Button2Click(Sender: TObject);
var
    PrintSettings: ICoreWebView2PrintSettings;
begin
    EdgeBrowser1.PrintToPDF(ExtractFilePath(ParamStr(0)) + 'AAA.PDF',PrintSettings);
end;

本文には日本語 (ひらがな) を含めてください (スパム防止用)

編集    削除
てつこ  2024-09-02 10:47:27  No: 151605  IP: [192.*.*.*]

AAAAAさんありがとうございます
すみません私が本当に使用したかったのは教えていただいたPrintToPDFです

コンパイルで未定義の識別子となることからDelphi 11では対応していないと思い他の方法を模索していました

Vcl.EdgeとWinapi.WebView2には印刷に関するメソッドが見当たらないのですが、そもそも参照しているユニットが違うなどありますか?
よろしくお願いします

編集    削除
HFUKUSHI  2024-09-02 13:27:53  No: 151606  IP: [192.*.*.*]

横から失礼します。
PrintToPDFはDelphi 12で追加されたもののようです。

編集    削除
mam  URL  2024-09-02 14:56:59  No: 151607  IP: [192.*.*.*]

Delphi11でPrintToPDFを使おうとすると、多分少し大変だと思います。
PrintToPDFはWebView2のICoreWebView2_7から追加された機能ですが、
Delphi10.4~11.3まではかなり古いWebView2.tlbをベースにしたTWebView2.pasが使われていると思われるからです。
https://mam-mam.net/delphi/tedgebrowser_webview2.html
に記述させていただいているように
からmicrosoft.web.webview2.1.0.2592.51.nupkgをダウンロードして、解凍して
新しいWebView2.tlbからWebView2_TLB.pasを生成して、PrintToPDF関数を使えるようにしなければならないと思います。


そこで、DelphiXE4~Delphi11.3でPrintToPDF関数をなるべく簡単に使うにはWebView4Delphiをインストールして使用するのが良いかもと思います。
https://mam-mam.net/delphi/tedgebrowser_webview4delphi.html

WebView4Delphiだと、以下のようにPrintToPdf関数が使えます。
procedure TForm1.Button7Click(Sender: TObject);
begin
  WVBrowser1.PrintToPdf(
    ExtractFilePath(Application.ExeName)+'a.pdf'
  );
end;

但し、TEdgeBrowserとは微妙に使い方が違いますので、人によっては簡単とは言えないかもですが。

編集    削除
てつこ  2024-09-03 09:31:35  No: 151608  IP: [192.*.*.*]

ご回答いただいたみなさんありがとうございます

mamさんに教えていただいた方法でタイプライブラリを取り込んでPrintToPDFを実行することができました
理解できていない箇所も多々ありますが勉強していきたいと思います

ありがとうございました

編集    削除