0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Electronの標準PDFモジュールに関するTip

Last updated at Posted at 2021-03-20

概要

2020年春のElectron ver9より、標準で組み込まれる形で、Chromeと同じ「PDFium」プラグインを使ったPDF操作(表示、印刷等)ができるようになりました。リリース直後は印刷しようとしたらアプリごと落ちる等、「これで実装したとアピールするのはちょっと……😵」という感じでしたが、現在は安定して使えています。

問題

さて使ってみたはいいものの、Electronには戻るボタンが無いという問題に直面するかと思います。
例えばaタグ等で直接PDFファイルへ飛ばすと、普通のブラウザと同じようにウィンドウ内全体にPDFiumによるPDFが表示される……のはいいんですが、元のページに戻れません。ChromiumもPDFiumも悪くなく、Electron固有の事情による相性問題となるため、状況がすぐに改善されるとは考えづらく、自前で解決する必要があります。
さて、色々検討しましたが一番簡単な対処法は

  1. ブラウザのページ遷移イベント(色々調べましたが"will-navigate"が妥当?)にメインプロセスからフック
  2. 遷移先がPDFファイルならブラウザのページ遷移イベントを停止
  3. 別画面を生成してそちらで表示 or PDFファイルに関連付けられているソフトに丸投げする

という形になるかと思います。「他所のソフトに丸投げするんだったら、Electronに実装された意味ないじゃん😞」というツッコミポイントはありますが、これが現実です。
以下、上記プログラムを組み込んだBrowserWindow生成周りのコードになります。

//メインプロセス
const window = メイン用BrowserWindow生成ルーチン

const showPdf = (event: Electron.Event, path: string): void => {
    if (path.endsWith('.pdf') === false) { return }
    event.preventDefault()

    //PDF用ウィンドウを表示する
    const window = PDF用BrowserWindow生成ルーチン
    window.loadURL(path)

    // PDFに紐づけられたソフトを起動したい場合はこちら
    // shell.openPath(path)
}
window.webContents.on('will-navigate', showPdf)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?