質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1236閲覧

htmlファイルをPDFで出力した際、全角記号が出力されない

avantgarden

総合スコア121

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/03/30 09:55

編集2022/04/05 15:58

内容が古いのですが、下記記事の内容でPDF出力を実装しました。

https://www.konosumi.net/entry/2018/06/22/015223

日本語などは文字化けなく出ているのですが、全角記号が出ません。
$%&*+¥)など、色々ためしましたがどれも出ないです。

フォントに関しては、記事にもあるIPAexフォントをCentOSにインストールし、HTML側でもフォントをしています。

これはIPAexフォントに全角記号が含まれていないという理解でいいのでしょうか?

ざっくりな質問になりますが、ご教示ください。

【追記】
参考記事にも記載はあるのですが、
ライブラリはphpwkhtmltopdfを使用しています。

【追記2】実際のコードを追記いたします。
ボタンクリックでPDFをダウンロードする仕様なので、画面側のコードも記載しておきます。※実際はボタンのデータ属性のidを処理側へ送信して、処理側ではデータを取得して変数を埋め込んだ帳票のHTMLをPDFにしていますが、その辺りは省いています。

下記のコードで、実際にこちらでは全角記号が出ない状態です。
PHPのバージョンは7.4です。

download.html

1<button id="pdfBtn"> 2<script> 3$(function() { 4 $("#pdfBtn").click(function(e) { 5 e.preventDefault(); 6 $.ajax({ 7 url: 'create_pdf.php', 8 datatype: "json" 9 }).done(function(res) { 10 res = JSON.parse(res); 11 console.log(res); 12 if (res.isSuccess) { 13 var a = document.createElement('a'); 14 a.setAttribute('href',res.url); 15 a.setAttribute('download', res.filename); 16 a.setAttribute('style','display:block;position:absolute;top:-999px;'); 17 document.querySelector('body').appendChild(a); 18 a.click(); 19 a.parentNode.removeChild(a); 20 } else { 21 alert('ダウンロードに失敗しました。') 22 } 23 }).fail(function() { 24 alert("通信エラーが発生しました。\n再度実行してください。"); 25 }); 26 }) 27}); 28</script>

create_pdf.php

1<?php 2require '../vendor/autoload.php'; 3use mikehaertl\wkhtmlto\Pdf; 4 5$html = <<<EOF 6<!doctype html> 7<html lang="ja"> 8<head> 9 <meta name="robots" content="noindex, nofollow"> 10 <meta charset="UTF-8"> 11 <title>test</title> 12 <style> 13 @charset "UTF-8"; 14 body { 15 font-family: "IPAexGothic"; 16 } 17 </style> 18</head> 19<body> 20212223242526_ 2728</body> 29</html> 30EOF; 31 32$pdf = new Pdf([ 33 'binary' => '/usr/local/bin/wkhtmltopdf', 34 'encoding' => 'utf-8', 35 'commandOptions' => array( 36 'procEnv' => array( 37 'LANG' => 'ja_jp.utf-8', 38 ), 39 ), 40]); 41 42$pdf->addPage($html); 43 44$fileName = uniqid('test', false) . '.pdf'; 45$savePath = SAVE_DIR . $fileName; 46$isSuccess = $pdf->saveAs($savePath); 47if ($isSuccess) { 48 if (file_exists($savePath)) { 49 $url = URL . '/' . SAVE_DIR . '/' . $fileName; 50 $return = ['isSuccess' => true, 'url' => $url, 'filename' => $fileName]; 51 } 52} else { 53 $return = ['isSuccess' => false]; 54} 55 56echo json_encode($return);

この状態でPDFをダウンロードして開くと、全角記号は出力されず中身が真っ白の状態になります。実際組んでいるのは帳票のPDFなのですが、全角記号の箇所(¥, (, ), ~など)のみ出力されない状態になります。

なお、サーバー側のフォントに関しても記載しておきます。

CentOS8_Stream

1# pwd 2/usr/share/fonts/IPAexfont00401 3# ll 4total 13644 5-rwx------ 1 root root 6099900 Apr 26 2019 ipaexg.ttf 6-rwx------ 1 root root 7835672 Apr 26 2019 ipaexm.ttf 7-rw-r--r-- 1 root root 20564 Apr 26 2019 IPA_Font_License_Agreement_v1.0.txt 8-rwx------ 1 root root 1834 Apr 26 2019 Readme_IPAexfont00401.txt

2022.04.06 追記

まだ解決には至ってないのですが、
追加の検証結果が出ましたので、追記させていただきます。

wkhtmltopdf自体をコマンドラインで実行

結論:全角記号が出力されました。
検証内容:

html

1<!doctype html> 2<html lang="ja"> 3<head> 4 <meta name="robots" content="noindex, nofollow"> 5 <meta charset="UTF-8"> 6 <title>test</title> 7 <style> 8 @charset "UTF-8"; 9 body { 10 font-family: "IPAexGothic"; 11 } 12 </style> 13</head> 14<body> 15161718192021_ 2223</body> 24</html>

上記のHTMLファイルを(test.html)を用意して、
$ wkhtmltopdf test.html test.pdf
を実行し、生成されたtest.pdfを確認すると、全角記号が出力されていました。

PHPをコマンドラインから実行

結論:こちらでも全角記号が出力されました。
検証内容:

php

1<?php 2require '../vendor/autoload.php'; 3use mikehaertl\wkhtmlto\Pdf; 4 5$html = <<<EOF 6<!doctype html> 7<html lang="ja"> 8<head> 9 <meta name="robots" content="noindex, nofollow"> 10 <meta charset="UTF-8"> 11 <title>test</title> 12 <style> 13 @charset "UTF-8"; 14 body { 15 font-family: "IPAexGothic"; 16 } 17 </style> 18</head> 19<body> 20212223242526_ 2728</body> 29</html> 30EOF; 31 32$pdf = new Pdf([ 33 'binary' => '/usr/local/bin/wkhtmltopdf', 34 'encoding' => 'utf-8', 35 'commandOptions' => array( 36 'procEnv' => array( 37 'LANG' => 'ja_jp.utf-8', 38 ), 39 ), 40]); 41 42$pdf->addPage($html); 43 44$fileName = uniqid('test', false) . '.pdf'; 45$savePath = SAVE_DIR . $fileName; 46$isSuccess = $pdf->saveAs($savePath);

最初に記載したcreate_pdf.phpからjsonを返す部分のみを省いたもの(create_pdf_test.php)を用意し、
$ php create_pdf_test.php
を実行し、保存ディレクトリに生成されたPDFファイルを確認すると、全角記号が出力されていました。

なので、画面上のボタンをクリックしAjaxで処理させた場合(Webサーバーから実行?)させた場合のみ、生成されたPDFに全角記号が出ないということは分かりました。

とはいえ、それに対してどう対応すべきものか分からず、引き続き何かヒントでもいただければと思います…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/03/30 11:11 編集

実際のご自身のコードと結果が分かるキャプチャなどを提示してください。 ただ、記事が4年前と古いので、今のご自身の環境に当てはめられるかどうかと言うと微妙かもしれません。
avantgarden

2022/03/31 02:33

すみません。再現コードを追加いたしました。
guest

回答2

0

興味があったので調べて見ましたが、以下のソフトによると、IPAexゴシックには全角記号が含まれているように見えます。

フォント見本の表示と印刷

全角記号が出ません。$%&*+¥)など、色々ためしましたがどれも出ないです。

ということですが、ぱっと見で8160のAに「)」があるので、フォントのせいではないような気がします。(上の方だけキャプチャしたもの)
イメージ説明

m.ts10806さんの言うとおり、ご自身のコードと状況がわかるキャプチャ画像などを掲載して回答を募ってみてはいかがでしょうか?

投稿2022/03/30 14:29

FiroProchainezo

総合スコア2401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

avantgarden

2022/03/31 02:35

有難うございます。フォントに含まれているのであれば、そのフォントがきちんと使用されていないということになるのですかね…。再現コードを追記いたしましたので、ご確認いただけますと幸いです。
guest

0

自己解決

すみません。解決しました。
分かってみれば単純な話なのですが、、

shell

1# pwd 2/usr/share/fonts/IPAexfont00401 3# ll 4total 13644 5-rwx------ 1 root root 6099900 Apr 26 2019 ipaexg.ttf 6-rwx------ 1 root root 7835672 Apr 26 2019 ipaexm.ttf 7-rw-r--r-- 1 root root 20564 Apr 26 2019 IPA_Font_License_Agreement_v1.0.txt 8-rwx------ 1 root root 1834 Apr 26 2019 Readme_IPAexfont00401.tx

フォントファイルのパーミッションが原因でした。
Apacheユーザーに読み取り権限がなかったので、
# chmod 644 *ttf
で読み取り権限を付与することで解決しました。

投稿2022/04/06 11:45

avantgarden

総合スコア121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問