web-dev-qa-db-ja.com

Dompdfおよび異なるフォントファミリの設定

PDFを生成するとき、私のfont-family属性がCSSに適用されました。 Verdanaと言う代わりに、Times New Roman。を使用するため、私のCSSは次のようになります。

.sub-header {
    font-size: 1.4rem;
    text-transform: uppercase;
    font-family: NeutraText-Book !important;
    padding-bottom: 1.5rem;
}

PDFは次のように生成されます。

$pdf = PDF::loadHTML($view);
return $pdf->stream();

必要なフォントを設定するにはどうすればよいですか?

22
John

PDFドキュメントは、Helvetica、Times-Roman、Courier、Zapf-Dingbats、およびSymbol(すべてWindows ANSIエンコーディングを使用)を内部的にサポートしています。 dompdfは、PDFに事前にロードされているか、dompdfにアクセス可能で、CSS @font-faceルールで参照されている限り、参照されているフォントを埋め込みます。タイプ設定に使用されるフォントメトリックを生成するための順序。

dompdfは、基礎となるR&OS PDF class:Type 1(.pfb)およびTrueType(.ttf))と同じフォントをサポートします。ただし、フォントメトリック(.afm/.ufm)が利用可能です。バンドルされたPHPベースのphp-font-libは、フォントのロードとサブセットのサポートを提供します。

フォントをロードするプロセスは、ニーズとサーバーアクセスによって異なります。フォントをロードするには、次の3つの方法があります。

  1. CSS @ font-faceルールを使用して、実行時にフォントをロードします。
  2. コマンドラインからdompdf/load_font.phpを使用します。
  3. 付属の管理サイトでdompdf/www/fonts.phpを参照します。

CSS @ font-faceルールを使用して、実行時にフォントをロードします

コマンドラインアクセスは必要ありません。ロードしたいフォントがオンラインで利用可能であれば、CSS経由で簡単にロードできます。

@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: normal;
  src: url(http://themes.googleusercontent.com/static/fonts/opensans/v8/cJZKeOuBrn4kERxqtaUH3aCWcynf_cDxXwCLxiixG1c.ttf) format('truetype');
}

コマンドラインからdompdf/load_font.phpを使用してください

コマンドラインにアクセスできる場合、フォントのロードは次のように簡単です。

[php] load_font.php "NeutraText-Book" /path/to/neutratext.ttf

パラメーターなしでコマンドを実行して、ヘルプテキストを表示します。ただし、すぐにパラメーターは次のとおりです。フォントの名前、通常のフォントファイル、太字フォントファイル、斜体フォントファイル、太字斜体フォントファイル

付属の管理サイトでdompdf/www/fonts.phpを閲覧します

自明( sample )。行う必要があるのは、管理者のユーザー名/パスワードの組み合わせを変更したことを確認することだけです


注:load_font.phpおよび管理サイトは、dompdf 0.7.0からデフォルトで含まれません

Dompdf wiki( nicode How-Toフォントと文字エンコーディングについて )およびその他のソースからの適応。

25
BrianS

私は同様の問題を抱えており、2日間ソリューションを探していました...新しいバージョンでは、受け入れられた答えはもう機能しません。

@ jay-bienvenuの答えは正しいです。 DomPDFの新しいバージョンにはすべてが含まれているわけではなく、ドキュメントも非常に貧弱です。

だからあなたはする必要があります:

  1. load_font.phpをダウンロードして、プロジェクトのルートディレクトリに配置します:curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php

  2. 次に、エディターでload_font.phpを開き、autoload.inc.phpへの正しいパス、たとえばrequire_once 'lib/dompdf/autoload.inc.php';

  3. コマンドラインを開き、プロジェクトのルートフォルダーに移動し、登録するフォントの名前とTFFファイルへのパス(例:php load_font.php SourceSansPro ./pathToYourFolder/lib/dompdf/SourceSansPro-Regular.ttf ./pathToYourFolder/lib/dompdf/SourceSansPro-Bold.ttf

これでフォントがインストールされました。通常はhtmlのWebフォントとして使用するように使用できます。

<html>
<head>
    <meta http-equiv="Content-Type" content="charset=utf-8" />
    <style type="text/css">
        @page {
            margin: 0;
        }
        * { padding: 0; margin: 0; }
        @font-face {
            font-family: "source_sans_proregular";           
            src: local("Source Sans Pro"), url("fonts/sourcesans/sourcesanspro-regular-webfont.ttf") format("truetype");
            font-weight: normal;
            font-style: normal;

        }        
        body{
            font-family: "source_sans_proregular", Calibri,Candara,Segoe,Segoe UI,Optima,Arial,sans-serif;            
        }
    </style>
</head>
<body>
Your code here ....
</body>
</html>

phpでPDFを作成するには:

require_once 'lib/dompdf/autoload.inc.php';

use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml($html, 'UTF-8');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4');

$dompdf->set_option('defaultMediaType', 'all');
$dompdf->set_option('isFontSubsettingEnabled', true);

// Render the HTML as PDF
$dompdf->render();

[〜#〜] edit [〜#〜]:dompdfを使用してカスタムフォントを適用する方法に関するブログ投稿を作成しました。詳細: https://www.blog.lab21.gr/using-domdpf-create-pdf-php

15
Mayra M

Dompdfの フォントと文字エンコーディングについて は、フォントユーティリティは含まれていますが、それを取得して実行する方法を教えてくれません。方法は次のとおりです。

  1. load_font.php をプロジェクトのルートディレクトリにダウンロードします。 curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php

  2. テキストエディター(vimなど)でload_font.phpを開きます。変化する require_once "autoload.inc.php";からrequire_once "vendor/autoload.php";

  3. 登録するフォントの名前とTFFファイルへのパスを使用してユーティリティを実行します。例えば: php load_font.php 'Brush Script MT' https/fonts/brush-script-mt.ttf

このコマンドの使用方法の詳細については、 load_font.php のコードをお読みください。

4
Jay Bienvenu

フォントをDomPDFにロードする必要があります。詳細については、 this pag eを確認してください。

1
cOle2

上記のBriansの回答に感謝しますが、私の場合は、「dompdf/www/fonts.php」を使用してフォントをインストールするという1つのオプションのみが機能しました。

含まれている管理サイトのdompdf/www/fonts.phpにブラウズしてフォントをインストールしました。 ( http://yoursite.com/sites/all/modules/print/lib/dompdf/www/fonts.php のようなものになります)

ページの下部に移動し、リンクをクリックします

_[Authenticate to access this section][1]
_

「dompdf_config.custom.inc.phpでパスワードを変更する必要があります」という警告が表示されます。

  1. Dompdf_config.custom.inc.phpファイルに移動し、ファイルの下部にユーザー名とパスワードを追加します。 「DOMPDF_ADMIN_USERNAME」と「DOMPDF_ADMIN_PASSWORD」を見つけることができます。これらの2行のコメントを外し、フォントをインストールするためのユーザー名とパスワードを追加します。
  2. ここで、もう一度_[Authenticate to access this section][2]_をクリックすると、ユーザー名とパスワードを要求されます。手順1で指定したユーザーのユーザー名とパスワードを入力します。

  3. ブラウザで同じfonts.phpパスを再度参照すると、ページの下部に新しいフォントのインストールセクションがあります(画像で確認できます)install new fonts、(ただし、最初にrockwell.ttfファイルとrockwell.afmファイルをfontsフォルダーに移動してから、ここにインストールしました)

  4. 目的のフォントttfファイルを選択してインストールします。インストールされ、インストールされたフォントで表示されましたが、うまくいきませんでした。そのため、新しいフォント用に.afmファイルを作成する必要がありました(ここではロックウェルフォントを使用したい)

rockwell.afmファイルを作成する手順。 1

これをdompdfの他の14種類のネイティブフォントのように行いましたが、これがどの程度受け入れられるかわかりません。しかし、それは私のために働いた。やりたかっただけです。

  • PHPファイルでdompdfのネイティブフォント名を見つけた場所にロックウェルフォントを追加しました

  • Dompdf/include/dompdf.cls.phpファイルの_public static $native_fonts_配列に「ロックウェル」を追加しました

  • 「ロックウェル」配列を追加しました
    dompdf/lib/fonts/dompdf_font_family_cache.dist.php以下のようなファイルadding rockwell array

それでおしまい。このように私のためにrockwell.afmファイルを生成しました rockwell afm file

  • 使用したいフォントファミリを使用します

    _ body {  
                    font-family: 'rockwell';
                    font-size:10;
                    }   
    _
1
Developer

特定のフォントファミリでpdfを生成するには、dompdfライブラリを使用する必要があります。

$html ='<!doctype html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';

$html.='</head><body>';
$html.="<style> 
@font-face { font-family: 'Roboto Regular'; font-weight: normal; src: url(\'fonts/Roboto-Regular.ttf\') format(\'truetype\'); } 
@font-face { font-family: 'Roboto Bold'; font-weight: bold; src: url(\'fonts/Roboto-Bold.ttf\') format(\'truetype\'); } 
body{ font-family: 'Roboto Regular', sans-serif; font-weight: normal; line-height:1.6em; font-size:17pt; }
h1,h2{ font-family: 'Roboto Bold', sans-serif; font-weight: bold; line-height:1.2em; }
</style>";

$html.='test <br>
<span style="font-family:\'Open Sans\'"> test </span> <br>          ';
$html.= '</body></html>';

$dompdf = new Dompdf\Dompdf();
$dompdf->load_html($html,'UTF-8');
$dompdf->set_paper('A4', 'portrait');
$dompdf->render();
$dompdf->stream();
0
Ramesh