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?

Laravel & sail環境でChromiumを導入して、HTMLで作った帳票をPDFファイルを出力するまで。

Posted at

Laravel&sail環境で、綺麗なPDFファイルを作る。

PDFファイルを作る方法は色々ある。
ChromiumブラウザからPDFファイルを出力する方法だと、複雑なHTMLでもPDF化できるので便利。
m1/m2/m3のmacとかでも対応できる手順。

DockerでのChromiumをインストール

リリース版のChromiumは、aptじゃないsnapというパッケージマネージャーをインストールする必要があるらしく、Dockerで入れるには色々面倒っぽい。betaバージョンのChromiumを入れることにした。

Dockerの設定ファイルを書き出す。

./artisan sail:publish

Dockerの設定変更

/docker/8.2/Docker
    && apt-get install -y mysql-client \
    && apt-get install -y postgresql-client-$POSTGRES_VERSION \
+   && apt-get install -y software-properties-common \
+   && add-apt-repository -y ppa:saiarcot895/chromium-beta \
+   && apt-get update \
+   && apt-get install -y chromium-browser \
/docker-compose.yaml
-       image: sail-8.2/app
+       image: sail-8.2/app-with-chromium

イメージを作り直して起動する。

./vendor/bin/sail up

PHPから簡単に呼び出せるパッケージをインストール

composer require chrome-php/chrome

使ってみる

use HeadlessChromium\BrowserFactory;


// chromium-browserのパスを指定して、ブラウザファクトリを作成
$browserFactory = new BrowserFactory('/usr/bin/chromium-browser');

// ブラウザを起動
$browser = $browserFactory->createBrowser();

try {
    // 新しいタブを作成
    $page = $browser->createPage();

    // ページに移動
    $page->navigate('https://www.yahoo.co.jp/')->waitForNavigation();

    // スクリーンショットを撮影
    $tmp_path = tempnam(sys_get_temp_dir(), 'pdf');
    $page->pdf(['printBackground' => false])->saveToFile($tmp_path);

    // ブラウザを閉じる
    $browser->close();

    // PDFファイルを返す
    return response()->file($tmp_path)->deleteFileAfterSend(true);

} catch(Exception $e) {

    // ブラウザを閉じる
    $browser->close();

    // 例外をまた飛ばす
    throw $e;
}
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?