質問編集履歴

6

修正

2022/04/05 15:58

投稿

avantgarden
avantgarden

スコア121

test CHANGED
File without changes
test CHANGED
@@ -132,6 +132,7 @@
132
132
 
133
133
  ### wkhtmltopdf自体をコマンドラインで実行
134
134
  結論:全角記号が出力されました。
135
+ 検証内容:
135
136
  ```html
136
137
  <!doctype html>
137
138
  <html lang="ja">
@@ -165,6 +166,7 @@
165
166
  ### PHPをコマンドラインから実行
166
167
 
167
168
  結論:こちらでも全角記号が出力されました。
169
+ 検証内容:
168
170
  ```php
169
171
  <?php
170
172
  require '../vendor/autoload.php';

5

見出し修正

2022/04/05 15:57

投稿

avantgarden
avantgarden

スコア121

test CHANGED
File without changes
test CHANGED
@@ -126,11 +126,11 @@
126
126
  -rwx------ 1 root root 1834 Apr 26 2019 Readme_IPAexfont00401.txt
127
127
  ```
128
128
 
129
- 2022.04.06 追記
129
+ # 2022.04.06 追記
130
130
  まだ解決には至ってないのですが、
131
131
  追加の検証結果が出ましたので、追記させていただきます。
132
132
 
133
- ## wkhtmltopdf自体をコマンドラインで実行
133
+ ### wkhtmltopdf自体をコマンドラインで実行
134
134
  結論:全角記号が出力されました。
135
135
  ```html
136
136
  <!doctype html>
@@ -162,7 +162,7 @@
162
162
  `$ wkhtmltopdf test.html test.pdf`
163
163
  を実行し、生成されたtest.pdfを確認すると、全角記号が出力されていました。
164
164
 
165
- ## PHPをコマンドラインから実行
165
+ ### PHPをコマンドラインから実行
166
166
 
167
167
  結論:こちらでも全角記号が出力されました。
168
168
  ```php

4

検証結果を追記

2022/04/05 15:56

投稿

avantgarden
avantgarden

スコア121

test CHANGED
File without changes
test CHANGED
@@ -126,4 +126,102 @@
126
126
  -rwx------ 1 root root 1834 Apr 26 2019 Readme_IPAexfont00401.txt
127
127
  ```
128
128
 
129
-
129
+ 2022.04.06 追記
130
+ まだ解決には至ってないのですが、
131
+ 追加の検証結果が出ましたので、追記させていただきます。
132
+
133
+ ## wkhtmltopdf自体をコマンドラインで実行
134
+ 結論:全角記号が出力されました。
135
+ ```html
136
+ <!doctype html>
137
+ <html lang="ja">
138
+ <head>
139
+ <meta name="robots" content="noindex, nofollow">
140
+ <meta charset="UTF-8">
141
+ <title>test</title>
142
+ <style>
143
+ @charset "UTF-8";
144
+ body {
145
+ font-family: "IPAexGothic";
146
+ }
147
+ </style>
148
+ </head>
149
+ <body>
150
+
151
+
152
+
153
+
154
+
155
+
156
+ _
157
+
158
+ </body>
159
+ </html>
160
+ ```
161
+ 上記のHTMLファイルを(test.html)を用意して、
162
+ `$ wkhtmltopdf test.html test.pdf`
163
+ を実行し、生成されたtest.pdfを確認すると、全角記号が出力されていました。
164
+
165
+ ## PHPをコマンドラインから実行
166
+
167
+ 結論:こちらでも全角記号が出力されました。
168
+ ```php
169
+ <?php
170
+ require '../vendor/autoload.php';
171
+ use mikehaertl\wkhtmlto\Pdf;
172
+
173
+ $html = <<<EOF
174
+ <!doctype html>
175
+ <html lang="ja">
176
+ <head>
177
+ <meta name="robots" content="noindex, nofollow">
178
+ <meta charset="UTF-8">
179
+ <title>test</title>
180
+ <style>
181
+ @charset "UTF-8";
182
+ body {
183
+ font-family: "IPAexGothic";
184
+ }
185
+ </style>
186
+ </head>
187
+ <body>
188
+
189
+
190
+
191
+
192
+
193
+
194
+ _
195
+
196
+ </body>
197
+ </html>
198
+ EOF;
199
+
200
+ $pdf = new Pdf([
201
+ 'binary' => '/usr/local/bin/wkhtmltopdf',
202
+ 'encoding' => 'utf-8',
203
+ 'commandOptions' => array(
204
+ 'procEnv' => array(
205
+ 'LANG' => 'ja_jp.utf-8',
206
+ ),
207
+ ),
208
+ ]);
209
+
210
+ $pdf->addPage($html);
211
+
212
+ $fileName = uniqid('test', false) . '.pdf';
213
+ $savePath = SAVE_DIR . $fileName;
214
+ $isSuccess = $pdf->saveAs($savePath);
215
+ ```
216
+ 最初に記載したcreate_pdf.phpからjsonを返す部分のみを省いたもの(create_pdf_test.php)を用意し、
217
+ `$ php create_pdf_test.php`
218
+ を実行し、保存ディレクトリに生成されたPDFファイルを確認すると、全角記号が出力されていました。
219
+
220
+ なので、画面上のボタンをクリックしAjaxで処理させた場合(Webサーバーから実行?)させた場合のみ、生成されたPDFに全角記号が出ないということは分かりました。
221
+
222
+ とはいえ、それに対してどう対応すべきものか分からず、引き続き何かヒントでもいただければと思います…
223
+
224
+
225
+
226
+
227
+

3

情報追加

2022/03/31 02:32

投稿

avantgarden
avantgarden

スコア121

test CHANGED
File without changes
test CHANGED
@@ -19,6 +19,7 @@
19
19
  ボタンクリックでPDFをダウンロードする仕様なので、画面側のコードも記載しておきます。※実際はボタンのデータ属性のidを処理側へ送信して、処理側ではデータを取得して変数を埋め込んだ帳票のHTMLをPDFにしていますが、その辺りは省いています。
20
20
 
21
21
  下記のコードで、実際にこちらでは全角記号が出ない状態です。
22
+ PHPのバージョンは7.4です。
22
23
 
23
24
  ```download.html
24
25
  <button id="pdfBtn">

2

コード情報追加

2022/03/31 02:31

投稿

avantgarden
avantgarden

スコア121

test CHANGED
File without changes
test CHANGED
@@ -15,4 +15,114 @@
15
15
  参考記事にも記載はあるのですが、
16
16
  ライブラリはphpwkhtmltopdfを使用しています。
17
17
 
18
+ 【追記2】実際のコードを追記いたします。
19
+ ボタンクリックでPDFをダウンロードする仕様なので、画面側のコードも記載しておきます。※実際はボタンのデータ属性のidを処理側へ送信して、処理側ではデータを取得して変数を埋め込んだ帳票のHTMLをPDFにしていますが、その辺りは省いています。
18
20
 
21
+ 下記のコードで、実際にこちらでは全角記号が出ない状態です。
22
+
23
+ ```download.html
24
+ <button id="pdfBtn">
25
+ <script>
26
+ $(function() {
27
+ $("#pdfBtn").click(function(e) {
28
+ e.preventDefault();
29
+ $.ajax({
30
+ url: 'create_pdf.php',
31
+ datatype: "json"
32
+ }).done(function(res) {
33
+ res = JSON.parse(res);
34
+ console.log(res);
35
+ if (res.isSuccess) {
36
+ var a = document.createElement('a');
37
+ a.setAttribute('href',res.url);
38
+ a.setAttribute('download', res.filename);
39
+ a.setAttribute('style','display:block;position:absolute;top:-999px;');
40
+ document.querySelector('body').appendChild(a);
41
+ a.click();
42
+ a.parentNode.removeChild(a);
43
+ } else {
44
+ alert('ダウンロードに失敗しました。')
45
+ }
46
+ }).fail(function() {
47
+ alert("通信エラーが発生しました。\n再度実行してください。");
48
+ });
49
+ })
50
+ });
51
+ </script>
52
+ ```
53
+
54
+ ```create_pdf.php
55
+ <?php
56
+ require '../vendor/autoload.php';
57
+ use mikehaertl\wkhtmlto\Pdf;
58
+
59
+ $html = <<<EOF
60
+ <!doctype html>
61
+ <html lang="ja">
62
+ <head>
63
+ <meta name="robots" content="noindex, nofollow">
64
+ <meta charset="UTF-8">
65
+ <title>test</title>
66
+ <style>
67
+ @charset "UTF-8";
68
+ body {
69
+ font-family: "IPAexGothic";
70
+ }
71
+ </style>
72
+ </head>
73
+ <body>
74
+
75
+
76
+
77
+
78
+
79
+
80
+ _
81
+
82
+ </body>
83
+ </html>
84
+ EOF;
85
+
86
+ $pdf = new Pdf([
87
+ 'binary' => '/usr/local/bin/wkhtmltopdf',
88
+ 'encoding' => 'utf-8',
89
+ 'commandOptions' => array(
90
+ 'procEnv' => array(
91
+ 'LANG' => 'ja_jp.utf-8',
92
+ ),
93
+ ),
94
+ ]);
95
+
96
+ $pdf->addPage($html);
97
+
98
+ $fileName = uniqid('test', false) . '.pdf';
99
+ $savePath = SAVE_DIR . $fileName;
100
+ $isSuccess = $pdf->saveAs($savePath);
101
+ if ($isSuccess) {
102
+ if (file_exists($savePath)) {
103
+ $url = URL . '/' . SAVE_DIR . '/' . $fileName;
104
+ $return = ['isSuccess' => true, 'url' => $url, 'filename' => $fileName];
105
+ }
106
+ } else {
107
+ $return = ['isSuccess' => false];
108
+ }
109
+
110
+ echo json_encode($return);
111
+ ```
112
+
113
+ この状態でPDFをダウンロードして開くと、全角記号は出力されず中身が真っ白の状態になります。実際組んでいるのは帳票のPDFなのですが、全角記号の箇所(¥, (, ), ~など)のみ出力されない状態になります。
114
+
115
+ なお、サーバー側のフォントに関しても記載しておきます。
116
+
117
+ ```CentOS8_Stream
118
+ # pwd
119
+ /usr/share/fonts/IPAexfont00401
120
+ # ll
121
+ total 13644
122
+ -rwx------ 1 root root 6099900 Apr 26 2019 ipaexg.ttf
123
+ -rwx------ 1 root root 7835672 Apr 26 2019 ipaexm.ttf
124
+ -rw-r--r-- 1 root root 20564 Apr 26 2019 IPA_Font_License_Agreement_v1.0.txt
125
+ -rwx------ 1 root root 1834 Apr 26 2019 Readme_IPAexfont00401.txt
126
+ ```
127
+
128
+

1

情報追記

2022/03/30 10:03

投稿

avantgarden
avantgarden

スコア121

test CHANGED
File without changes
test CHANGED
@@ -11,4 +11,8 @@
11
11
 
12
12
  ざっくりな質問になりますが、ご教示ください。
13
13
 
14
+ 【追記】
15
+ 参考記事にも記載はあるのですが、
16
+ ライブラリはphpwkhtmltopdfを使用しています。
14
17
 
18
+