ホームページ >バックエンド開発 >PHPの問題 >PHPを使用してHTMLをPDFファイルに変換する方法

PHPを使用してHTMLをPDFファイルに変換する方法

藏色散人
藏色散人オリジナル
2020-07-06 09:18:284772ブラウズ

php を使用して html を pdf ファイルに変換する方法: 最初に pdf をダウンロードしてインストールし、次に効果をテストし、次に「shell_exec」関数を使用して php でそれを呼び出し、最後にページングの問題を解決します。

PHPを使用してHTMLをPDFファイルに変換する方法

#いくつかの HTML ページから PDF ファイルを生成する必要がある顧客がいたので、PHP を使用して HTML ページを PDF に変換するクラスをいくつか探しました。ファイル。 html2pdf、pdflib、FPDF を試しましたが、どれも私の要件を満たしていませんでした。

pdflib、FPDF これら 2 つの方法では、PDF を生成するためのプログラムを作成する必要があります。つまり、HTML ページを PDF に直接変換することはサポートされていません。html2pdf は HTML ページを PDF ファイルに変換できますが、通常の単純な変換しかできません。 HTML コード: HTML コンテンツをバックグラウンド ニュース エディターでタイプセットする必要がある場合、それは間違いなく機能しません。

長い間悩んだ末、BaiduとGoogleで検索した結果、非常に簡単な方法を見つけたので、ここで紹介します。

それは: wkhtmltopdf、wkhtmltopdf は、ブラウザーで表示できる Web ページを PDF に直接変換できます。まず、これは php クラスではなく、変換する HTML ページであることを説明させてください。 htmlページをpdfに変換するソフトですが、単なるデスクトップソフトではなく、cmdのバッチ処理を直接実行します。そしてphpにはshell_exec()関数があります。以下は、php を使用して PDF ファイルを生成する方法を段階的に紹介します。

1. pdf をダウンロードしてインストールします
ダウンロード アドレス: http://code.google.com/p/wkhtmltopdf/downloads/list
さまざまなプラットフォーム用のインストール パッケージが英語で提供されています。良くないので、Google翻訳してください。以下は Windows プラットフォームでの使用例です。wkhtmltopdf-0.9.9-installer.exe バージョンをダウンロードし、win7 32 ビット 64 ビットおよび Windows 2003 にインストールしてテストしましたが、問題はありませんでした。ダウンロード後は直接インストールしてください。以下で使用するインストールパスに注意してください。
インストール後、「Path」:;C:Program Files (x86)wkhtmltopdf という名前のシステム環境変数の後に、インストールしたディレクトリを追加する必要があります。インストール後、コンピュータを再起動します。

2 番目に、使用効果をテストします。
cmd に直接入力します: wkhtmltopdf http://www.shwzzz.cn/ F:website1.pdf
最初の入力: 実行中のソフトウェア名 (これは変更なし) 2 番目は URL、3 番目は生成されたパスとファイル名です。 Enter キーを押した後、生成の進行状況バーのプロンプトが表示されますか? 成功しました。生成ディレクトリに移動して、新しく生成された PDF ファイルがあるかどうかを確認してください。

3. php での呼び出し
php での呼び出しは非常に簡単で、shell_exec 関数を使用するだけですが、shell_exec 関数が使用できない場合は、php.ini で無効になっているかどうかを確認してください。
例: 0029fc9aaf008d5bd4a18e7e711fb0f9

3、ページングの問題を解決します
wkhtmltopdf は非常に便利です. しかし、不満な点もいくつかあります。 HTML ページが非常に長く、指定した場所でページネーションする必要がある場合はどうすればよいですか? wkhtmltopdf の開発者は、開発時にこれを考慮していませんでした。
たとえば、次の HTML ページ:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<title>pdf</title>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
</head>  
<style type="text/css">  
*{ margin:0px; padding:0px;}  
div{ width:800px; height:1362px;margin:auto;}  
</style>  
<body>  
<div style=" background:#030"></div>  
<div style=" background:#033"></div>  
<div style=" background:#369"></div>  
<div style=" background:#F60"></div>  
<div style=" background:#F3C"></div>  
<div style=" background:#F0F"></div>  
<div style=" background:#0FF"></div>  
<div style=" background:#FF0"></div>  
<div style=" background:#00F"></div>  
<div style=" background:#0F0"></div>  
<div style=" background:#033"></div>  
<div style=" background:#369"></div>  
<div style=" background:#F60"></div>  
<div style=" background:#030"></div>  
<div style=" background:#033"></div>  
<div style=" background:#369"></div>  
<div style=" background:#F60"></div>  
<div style=" background:#F3C"></div>  
<div style=" background:#F0F"></div>  
<div style=" background:#0FF"></div>  
<div style=" background:#FF0"></div>  
<div style=" background:#00F"></div>  
<div style=" background:#0F0"></div>  
</body>  
</html>

PDF に生成するとき、数え切れないほどのデバッグの後、各ブロックを 1 ページにしたいのですが、 , PDFの1ページは約1362pxですが、奥に行くほど数値が狂い、PDFの1ページが何ピクセルになるのかはまだ分かりません。

しかし、wkhtmltopdf には、p スタイルの後に page-break-inside:avoid; を追加するという優れた方法があり、これで問題ありません。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<title>pdf</title>  
<link href="css/style.css" rel="stylesheet" type="text/css" />  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
</head>  
<style type="text/css">  
*{ margin:0px; padding:0px;}  
div{ width:800px; min-height:1362px;margin:auto;page-break-inside:avoid;}  
</style>  
<body>  
<div style=" background:#030"></div>  
<div style=" background:#033"></div>  
<div style=" background:#369"></div>  
<div style=" background:#F60"></div>  
<div style=" background:#F3C"></div>  
<div style=" background:#F0F"></div>  
<div style=" background:#0FF"></div>  
<div style=" background:#FF0"></div>  
<div style=" background:#00F"></div>  
<div style=" background:#0F0"></div>  
<div style=" background:#033"></div>  
<div style=" background:#369"></div>  
<div style=" background:#F60"></div>  
<div style=" background:#030"></div>  
<div style=" background:#033"></div>  
<div style=" background:#369"></div>  
<div style=" background:#F60"></div>  
<div style=" background:#F3C"></div>  
<div style=" background:#F0F"></div>  
<div style=" background:#0FF"></div>  
<div style=" background:#FF0"></div>  
<div style=" background:#00F"></div>  
<div style=" background:#0F0"></div>  
</body>  
</html>

http://code.google.com/p/wkhtmltopdf/これは、wkhtmltopdf の問題に関するコミュニケーション プラットフォームですが、英語です。

多くの関連知識については、PHP 中国語 Web サイト をご覧ください。

以上がPHPを使用してHTMLをPDFファイルに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。