Skip to content
Back to Blog
how-to-convert

HTMLをPDFに変換する方法(CSSスタイルを維持したまま)

2026-05-17 9 min read

HTMLからPDFへの変換がうまくいかない理由

言うことを聞かないPDFエクスポートに苦労したことのある人なら、その痛みはよく分かるはずです。HTMLファイルを変換すると、レイアウトは崩れ、フォントは消え、ブラウザのプレビューとは似ても似つかないページが出来上がってしまう。問題はコンセプトではなく、実行方法にあります。PDFレンダラーがCSSをどう解釈するかは千差万別で、ほとんどの汎用コンバーターは、こちらが強制しない限り、スタイルシートを単純に削除したり無視したりします。 根本的な対立は、HTMLのフローベースのモデルとPDFのページベースのモデルの間にあります。Webコンテンツはビューポートに合わせて伸縮します。一方、PDFのページは寸法が固定されています。スクロールも、動的なリフローもありません。この2つの世界を橋渡しするには、CSSのページルールを理解し、埋め込みフォントを適切に処理し、flexboxやgridのようなモダンなレイアウトを尊重するレンダラーが必要です。多くのツールは、単にそれに対応していないのです。 よくある失敗は、がっかりするほど予測可能です。コンバーターがオフラインで実行されるためGoogle Fontsが読み込まれない、レンダラーがインクを節約するために背景を削除する「印刷モード」をデフォルトにするため背景色が消える、複数カラムのレイアウトが1つの残念なスタックに崩壊するなど。これらの落とし穴を知っておくことが、戦いの半分を制することになります。このガイドでは、CocoConvertの[HTMLからPDFへの変換ツール](/convert/html-to-pdf)を使う場合でも、独自のワークフローを構築する場合でも、これらの問題を回避する方法を解説します。

「CSSスタイルを維持する」とは、具体的にどういうことか

解決策に飛び込む前に、「CSSを維持する」というのが一体何を意味するのかを正確に定義しましょう。PDFの文脈におけるスタイリングは単一のものではなく、4つの異なるカテゴリーに分かれており、すべての変換方法ですべてが生き残るわけではありません。 **ビジュアルスタイリング**は最も壊れやすい部分です。これには色、枠線、ボックスシャドウ、背景画像が含まれます。印刷用レンダラーは、インクを節約するためにデフォルトで背景を抑制することがよくあります。例えば、Chrome自体の印刷ダイアログでも、「詳細設定」に潜り込んで「背景のグラフィック」をチェックしないと、背景は単純に消えてしまいます。 **タイポグラフィ**(フォントファミリー、ウェイト、サイズ、行の高さ)は、フォントが利用可能かどうかにかかっています。フォントがリモートURLで参照されている場合、外部リソースを取得しないコンバーターはシステムのデフォルトフォントにフォールバックします。あなたの美しいInterやLatoの書体は、瞬時に退屈なTimes New Romanに変わってしまいます。フォントを確実に維持する唯一の方法は、それらを埋め込むことです。 **レイアウト**は、事態が本当に複雑になるところです。flexbox、CSS Grid、absolute positioningのようなモダンなCSS機能は、Chromiumベースのレンダラーではうまく処理されます。しかし、wkhtmltopdf(2013年頃のWebKitエンジンを使用)のような古いエンジンは、予測可能でイライラするやり方でモダンなレイアウトをめちゃくちゃにしてしまいます。 **ページ固有のCSS**(`@page`ルール、`page-break-before`、`break-inside: avoid`など)は、実はブラウザよりもPDF変換での方がサポートが優れています。このCSSはページメディアのために特別に存在します。`@media print`ブロックを使用することで、PDF版にのみ適用されるスタイルを作成でき、ウェブサイトの外観を損なうことなく、きめ細かな制御が可能になります。 スタイリングの問題がどのカテゴリーに属するかを知ることで、どのツールやテクニックがそれを修正する可能性が高いかがわかります。

CocoConvertを使ってHTMLをPDFに変換する

CocoConvertの[HTMLからPDFへの変換ツール](/convert/html-to-pdf)は、モダンなChromiumベースのレンダリングエンジンで動作します。これは、flexbox、Grid、CSS変数、`calc()`値を含む現代的なCSSを高い忠実度で処理することを意味します。完璧な結果を得る方法は次のとおりです。 **ステップ1:HTMLファイルを準備する。** スタイルが外部スタイルシートにある場合、2つの選択肢があります。Juiceのようなライブラリでインライン化するか、スタイルシートのパスが相対パスであり、アップロードに含まれていることを確認します。CocoConvertは一度に1つのHTMLファイルを処理し、リモートURLは取得しません。Google FontsやCDNでホストされているスタイルシートは読み込まれません。 **ステップ2:フォントを埋め込む。** カスタムタイポグラフィにはこれは必須です。フォントファイルをbase64に変換し、`@font-face`を使用して`<style>`ブロックに直接埋め込みます。はい、これによりファイルサイズは増加しますが、フォントが正しくレンダリングされることを保証する唯一の方法です。標準と太字のウェイトを持つ一般的な本文フォントの場合、これによりHTMLファイルに80〜150 KBが追加されることがあります。 **ステップ3:アップロードしてページオプションを設定する。** アップロード後、CocoConvertはページサイズ(A4、レター、リーガル、またはカスタム寸法)、向き、マージンのオプションを提示します。全辺15mmのマージンを持つA4が堅実なデフォルトです。幅の広いダッシュボードやテーブルを変換する場合は、横向きに切り替えてください。 **ステップ4:背景グラフィックを有効にする。** これが最もよくある間違いです。CocoConvertのオプションパネルで、「背景を印刷」をオンに切り替える必要があります。そうしないと、`background-color`や`background-image`を持つ要素はすべて白地でレンダリングされます。 **ステップ5:ダウンロードして確認する。** ブラウザでPDFをちらっと見るだけでなく、Adobe Acrobat Readerのような適切なビューアで開き、ファイル > プロパティ > フォントに移動してフォントが正しく埋め込まれていることを確認します。リスト内のすべてのフォントの横に「埋め込みサブセット」と表示されているはずです。

限界への対処:CocoConvertではできないこと

CocoConvertが何ではないかについて、正直に話しましょう。これは強力な汎用コンバーターですが、その範囲外の特定のタスクもあります。これらの制限を前もって知っておくことで、行き止まりのトラブルシューティングからあなたを救うことができます。 **JavaScriptでレンダリングされたコンテンツ。** ページがReactやVueのようなフレームワークで構築されている場合、ソースのHTMLファイルをアップロードしても機能しません。コンバーターが見るのは静的なHTMLであり、JavaScriptによって構築された最終的なページではありません。JSを多用するページの場合、最善策は、まずブラウザから完全にレンダリングされたHTMLを保存し(右クリック > 名前を付けて保存 > ウェブページ、完全)、そのファイルをアップロードすることです。あるいは、Puppeteerのようなヘッドレスブラウザツールが必要になります。 **インタラクティブな要素。** フォーム、ドロップダウン、ホバー状態はPDFではインタラクティブではありません。変換は、要素のデフォルト状態の静的なスナップショットをキャプチャします。ページがレンダリングされたときにアコーディオンが閉じられていれば、PDFでも閉じられています。これを回避する方法はありません。それがPDFの性質です。 **非常に大きなファイル。** CocoConvertには、無料プランで50MB、有料プランで200MBのファイル制限があります。これは寛大に聞こえますが、多数のbase64エンコードされた画像を含むHTMLファイルは、驚くほど早くこれらの制限に達することがあります。1つの高解像度PNGだけで、ファイルサイズに3〜5MBが簡単に追加される可能性があります。 **複雑なSVGアニメーション。** 静的なSVGは美しくレンダリングされます。しかし、SVG内のCSSやSMILアニメーションは、その初期フレームで凍結されます。 CocoConvertは、単純なファイルベースの変換のために作られています。完成したHTMLドキュメントがあり、信頼性の高いPDFが必要な場合、それは適切なツールです。JavaScriptの実行を必要とする複雑なサーバーサイドのパイプラインには、PlaywrightやPuppeteerのようなプログラム的なツールを検討する必要があります。

PDF出力をクリーンにするCSSテクニック

最初からPDF出力を念頭に置いてCSSを書くことで、多くの苦痛から解放されます。問題が起きてから修正するのは、常により困難です。 **`@media print`をPDF固有の上書きに使用する。** これがあなたの秘密兵器です。PDF専用のルールを`@media print`ブロックで囲むことで、ナビゲーションバーのような要素を非表示にしたり、印刷では汚く見えるボックスシャドウを削除したり、ページでの読みやすさのためにフォントサイズを調整したりできます。例えば: ```css @media print { nav, .sidebar { display: none; } body { font-size: 11pt; } .card { box-shadow: none; border: 1px solid #ddd; } } ``` **改ページを明示的に制御する。** どこでページを区切るかをレンダラーに決めさせないでください。主要なセクションの前に新しいPDFページを強制するには`break-before: page`を使い、テーブルや図のような要素が2ページにまたがって不格好に分割されるのを防ぐには`break-inside: avoid`を適用します。これはプロフェッショナルな見た目のレポートには絶対に不可欠です。 **`@page`で寸法を明示的に設定する。** ターゲットのページサイズがわかっている場合は、CSSでそれを宣言します。これにより、スタイルとコンバーターの設定の不一致を防ぎ、予期しないテキストのクリッピングを引き起こすのを避けることができます。 ```css @page { size: A4 portrait; margin: 15mm 20mm; } ``` **印刷レイアウトではビューポート単位を避ける。** `vw`や`vh`のような単位は、固定されたPDFページには無意味です。ページ全体に広がる必要がある要素には、代わりに`mm`、`pt`、またはパーセンテージを使用してください。 **まずChromeの組み込み印刷プレビューでテストする。** 何かをアップロードする前に、Ctrl+P(またはCmd+P)を押して「PDFとして保存」を選択します。これにより、CocoConvertを動かしているのと同じChromiumエンジンを使用したインスタントプレビューが得られます。これは、繰り返しのアップロードに時間を無駄にすることなく、CSSを反復的に改善する最速の方法です。

Webページ全体(URL)の変換 vs HTMLファイルの変換

ローカルのHTMLファイルを変換するアプローチは、ライブのWebページURLを変換するアプローチとは根本的に異なります。仕事に適したツールを選ぶ必要があります。 **ローカルHTMLファイルの変換**は、CocoConvertの[HTMLからPDFへの変換ツール](/convert/html-to-pdf)が得意とするところです。この方法では、自己完結型のドキュメントが必要です。すべてのCSSはインライン化されるか`<style>`ブロック内にある必要があり、すべての画像はbase64エンコードされるか、ZIPファイル内の相対パスで参照される必要があり、フォントは埋め込まれている必要があります。これを封印されたパッケージを郵送するようなものだと考えてください。レンダラーが必要とするすべてが最初から中に入っている必要があります。これにより、プロセスは非常に信頼性が高くなります。 **ライブのWebページをURLで変換する**のは、まったく別の話です。これには、実際のブラウザセッションを立ち上げ、URLに移動し、JavaScriptが実行されてWebフォントがダウンロードされるのを待ち、そしてPDFに印刷できるツールが必要です。Puppeteer、Playwright、またはBrowserless.ioのようなサービスは、このために設計されています。トレードオフは、山のような複雑さです。認証、クッキーのポップアップ、遅延読み込みされるコンテンツ、予測不可能なネットワーク速度に対処しなければなりません。 ほとんどの一般的なタスク(テンプレートからのPDF請求書の生成、レポートのエクスポート、スタイル付きドキュメントのアーカイブなど)では、ファイルベースのアプローチの方がシンプルではるかに予測可能です。入力を完全に制御できるため、出力も一貫しています。 ライブのユーザーデータからPDFを生成するシステムを構築している場合、ベストプラクティスはハイブリッドアプローチです。サーバーでHTMLテンプレートにユーザーのデータを入力し、その完全にレンダリングされたHTML文字列を変換APIに渡します。CocoConvertのAPIは、POSTリクエストでHTMLを直接受け入れることで、このワークフローをサポートしています。

出力の検証:PDF品質チェックリスト

PDFが画面上で正しく見えたからといって、準備完了とは限りません。そのファイルをクライアントに送信したり公開したりする前に、この迅速かつ重要なチェックリストを実行してください。 **フォントは埋め込まれているか?** Adobe Acrobat ReaderでPDFを開き、ファイル > プロパティ > フォントに移動します。使用したすべてのフォントが「埋め込みサブセット」と共にリストされているはずです。フォントが埋め込まれていない場合、そのフォントがインストールされていないマシンではシステムのデフォルトフォントに置き換えられ、デザインが台無しになります。 **色は正確か?** WebのCSSはRGBカラースペースを使用します。画面表示用のほとんどのPDFはRGBで問題ありません。しかし、PDFが商業印刷用である場合、CMYKカラースペースが必要になることがあり、これは最初のHTMLからPDFへのプロセスの後に行われる別の変換ステップです。 **テキストは選択可能で検索可能か?** テキストの行をクリックしてドラッグし、選択してみてください。できれば、テキストは本物のベクターテキストであり、検索性やアクセシビリティに優れています。選択できない場合、コンバーターがページをフラットな画像にラスタライズした可能性があります。これはコピー&ペースト、スクリーンリーダー、テキスト検索にとって大惨事です。 **ページ数と改ページは正しいか?** すべてのページを素早くスクロールします。ページの下部に見出しだけが残されていませんか?テーブルやチャートが不自然な場所で分割されていませんか?図がキャプションから分離されていませんか? **ファイルサイズは妥当か?** テキスト中心の10ページのPDFは、1MBを大幅に下回るはずです。もし15MBなら、何かがおかしいです。原因は通常、非圧縮の画像か、ページ全体が誤ってラスタライズされたことです。 **ハイパーリンクは機能するか?** ドキュメント内のリンクをクリックしてみてください。優れたコンバーターは、`<a href>`タグを最終的なPDFでクリック可能なリンクとして保持します。CocoConvertはデフォルトでこれを行いますが、常に確認する価値はあります。 これらの6つのチェックに3分を費やすことで、変換問題の95%を、誰かに迷惑をかける前に発見できます。これはプロの成果物とアマチュアの結果を分ける、最後の仕上げです。

Ready to convert?

Try it now — fast, secure, and private.

Convert Now →