2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellとEdgeヘッドレスでHTMLからPDFを作る

2
Last updated at Posted at 2025-08-15

はじめに

image.png

「HTMLからPDFを生成する」方法については、wkhtmltopdf や Python、JavaScript などの外部ツールを用いる記事が多く見られます。
本記事は、Windows 10以降の標準環境で PowerShell+Microsoft Edge を使って実装した際の備忘録です。
社内環境で外部ツールを導入できない場合や、既存環境のみで簡易的にレポートをPDF化したい場合に役立ちます。

Edgeヘッドレスモードとは

ChromiumベースのMicrosoft Edgeには、GUIなしで動くモード(headless) があり、--print-to-pdf オプションを使うと開いたページをPDFとして保存できます。
Google ChromeやBraveなど他のChromium系ブラウザでも同様の機能があります。

動作確認環境

Windows 11/PowerShell 5.1

htmlからpdf変換

# 変換元HTMLと出力先PDF
$htmlPath = "C:\temp\report.html"
$pdfPath  = "C:\temp\report.pdf"

# Edgeの実行ファイルパス(環境によって変更)
$edge = "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe"

# HTML → PDF変換
& $edge --headless --disable-gpu --print-to-pdf="$pdfPath" "file:///$htmlPath"

Write-Host "PDF出力完了: $pdfPath" -ForegroundColor Green

実行の流れ

  1. PowerShellでEdgeのコマンドラインを呼び出し
  2. 指定HTMLを無表示で開く
  3. そのままPDF化して保存

file:/// 形式でローカルHTMLを指定するのがポイントです。

HTMLを生成してからPDF化

# データ
$data = 1..5 | ForEach-Object { [PSCustomObject]@{ No = $_; Square = $_ * $_ } }

# CSS
$css = @"
<style>
  body{font-family:-apple-system,Segoe UI,Meiryo,Arial; margin:24px;}
  h1{margin:0 0 8px 0}
  table{border-collapse:collapse; width:100%}
  th,td{border:1px solid #ccc; padding:6px; text-align:left}
  th{background:#f5f5f5}
  footer{margin-top:12px; color:#666; font-size:12px}
</style>
"@

# HTML生成(ConvertTo-HtmlにCSSを差し込み)
$html = $data | ConvertTo-Html -Title 'レポート' -As Table `
  -PreContent "<h1>レポート</h1><p>生成日時: $(Get-Date -Format 'yyyy-MM-dd HH:mm')</p>" `
  -PostContent "<footer>Generated by PowerShell</footer>"
$html = $html -replace '</head>', "$css`n</head>"

# 保存(スクリプト場所 or 現在ディレクトリ)
$base = if ($PSScriptRoot) { $PSScriptRoot } else { (Get-Location).Path }
$outHtml = Join-Path $base 'report.html'
Set-Content -Path $outHtml -Value $html -Encoding UTF8
Write-Host "HTML出力: $outHtml" -ForegroundColor Green

# そのままPDF化(Edgeのヘッドレス印刷。環境によりパス調整)
$edge = "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe"
if (Test-Path $edge) {
  $outPdf = [IO.Path]::ChangeExtension($outHtml, '.pdf')
  & $edge --headless --disable-gpu --print-to-pdf="$outPdf" "file:///$outHtml"
  Write-Host "PDF出力:  $outPdf" -ForegroundColor Green
}

出力されたhtml

image.png

出力されたpdf
image.png

ページサイズや余白を調整する

EdgeヘッドレスモードではCSSで印刷用スタイルを設定できます。

@page {
  size: A4;
  margin: 20mm;
}

このCSSをHTML内に書くことで、PDF出力時の用紙サイズや余白が指定可能です。

注意点

  • JavaScriptによる描画が終わる前にPDF化される場合があります → --virtual-time-budget=3000 などで待機時間を設定
  • 印刷時のヘッダー・フッター(URLや日付)を消すオプションは現状コマンドラインでは非対応(CSSや印刷設定の工夫で対応)
  • ページ分割は page-break-before / break-after などのCSSで調整

他ツールとの比較

他の方法もあるが、今回はPowerShellとEdgeヘッドレスにフォーカスしてみました。

方法 依存ツール 再現度 実行速度 導入難易度
Edgeヘッドレス Edgeのみ
wkhtmltopdf wkhtmltopdf
Pandoc+PDFエンジン Pandoc, LaTeX等 低〜中
LibreOffice CLI LibreOffice

まとめ

image.png

  • Edge標準機能とPowerShellだけでHTML→PDFが可能
  • 外部ライブラリ不要、社内環境でも導入しやすい
  • 印刷CSSを駆使すればレイアウトも調整可能

この方法は、日次レポートや自動帳票、CI/CDの成果物作成など、軽量なPDF生成パイプラインに向いています。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?