
市販のサンプル集を用いて、PHPを独学中の者です。プログラミング言語を学ぶのは今回が初めてです。
基本構文やフォームについて等を学び、現在「PDFファイルを使用する」という章を学習中なのですが、サンプル通り入力してもエラーが表示されてしまいます。
・一つ目
<?php
$pdf=pdf_new();
$fname="/file/testdir/test.pdf";
pdf_open_file($pdf, $fname);
pdf_begin_page($pdf,595, 842);
//A4:595-842
//A5:421-595
$font = pdf_findfont($pdf, "Century", "winansi", 1);
pdf_setfont($pdf, $font, 20);
pdf_show_xy($pdf, "TEST---".date("Y/m/d H:i:s"), 0, 800);
pdf_end_page($pdf);
pdf_close($pdf);
?>
これは、
Fatal error: Uncaught exception 'PDFlibException' with message 'Function must not be called in 'object' scope' in
C:\xampp\htdocs\_test\pdf_gen.php:5 Stack trace: #0 C:\xampp\htdocs\_test\pdf_gen.php(5): pdf_begin_
page() #1 {main} thrown in C:\xampp\htdocs\_test\pdf_gen.php on line 5
というエラーが出ます。
・2つ目
<?php
$pdf = pdf_new();
pdf_open_file($pdf, "");
pdf_begin_page($pdf, 595, 842);
$font= pdf_findfont($pdf, "Times New Roman", "winansi", 1);
pdf_setfont($pdf, $font, 20);
pdf_set_text_pos ($pdf, 50, 800);
for ($i=1;$i<=5;$i++) {
pdf_continue_text($pdf,$i);
}
pdf_end_page($pdf);
$buf=pdf_get_buffer($pdf);
header("content-type: application/pdf");
header("content-length: ".strlen($buf));
echo $buf;
?>
これに対しては
Fatal error: Uncaught exception 'PDFlibException' with message 'Metrics data for font 'Century' not found' in C:\xampp
\htdocs\_test\disp_pdf.php:7 Stack trace: #0 C:\xampp\htdocs\_test\disp_pdf.php(7): pdf_findfont() #1 {main} thrown in
C:\xampp\htdocs\_test\disp_pdf.php on line 7
というエラーです。
もうひとつ別のスクリプトを記述した場合には、一つ目とほぼ同じエラーになります。
最初は、3つとも動かないということはPDFlibのインストール自体の問題かと思ったのですが、書かれた通りに設定したはずですし、何より一つ目と二つ目ではエラーの中身が異なることから、別々の問題なのだろうと考えています。
素人である私の推測に過ぎませんが、一つ目に関しては
エラー自体は5行目だが、本当は3行目、
「$fname="/file/testdir/test.pdf";」の部分が問題なのかと考えています。
テキストに突然これが出てきたからそのまま入力してみましたが、"/file/testdir/test.pdf"のファイルは事前に用意しておかなければならなかったのでしょうか?
もしそうなら、どこにどのように作れば良いのでしょうか?
テキストの「表示例」のURL欄を見る限り、C:\file\testdir・・となっているのですが、C:の下にいきなり「file」というディレクトリを作れということなのですか?
2つ目については、単に「Century」というフォントの問題なのだろうと思い、php_findfontを調べたときの使用例で使われているのことの多かった「Times New Roman」などに変更してみたのですが、同様のエラーが表示されてしまいます。
これもやはり事前に何か(Centuryというフォントに関する何か)を用意しておかなければならないのでしょうか?
以上、2点について教えてください。よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1です。
こんにちわ。
前回私が書いた2行は無視してください。
その部分は解決したと見て問題ないようです。
で、今回のエラーは、お察しの通りFontが見つかりませんってことです。
'Century'という英字フォントをが見つからないと怒られています。(質問にあるとおりですね)
フォントの指定なのですが、参考URLをご覧ください。
すごくよくまとまっていて、わかりやすいです。
findfontも古い関数で、PDFlib5で廃止されているとマニュアルに乗っていました。
質問者さんの環境ならload_fontをつかった方がよいです。
さらに、load_fontでは(というかPDFlibのローカルフォントとしては?)指定できるフォントは限られていて、
CenturyもTimes New Romanも指定できないようです。
(なのでエラーが出ている可能性が高いです)
さらに、それらはすべて英字フォントなので、日本語が表示できません。
もし日本語出力が1文字でもあるようなら、
URLのサイトの
<<日本語を使用する際の注意点>>
をよくよんでください。
たぶん、ここからは自分が説明するよりも、URLをご覧いただいた方がわかりやすいので、丸投げします。
URLにあることでまた何かわからなければここで補足してください。
あと、URLにある「フォントを埋め込む」というのは、PDFにフォントファイルをくっつけて出力するので、非常にファイルが重くなります。メガを超えることも。ですので、あまりお勧めはしません。
参考URL:http://www.infotek.co.jp/product/pdflib/pdflib_t …
No.1
- 回答日時:
ちょっと気になったことがあるんですが、
お使いのPDFlibのバージョンとPHPのバージョンはおいくつですか?
エラーの出ている箇所(pdf_begin_page)
この関数ってかなり古い関数なのですよ。
今はたぶんほとんどのところで使われていません。
もしかすると、バージョン違いによるエラーかもしれませんので、
そちらを補足お願いします。
それから
<?php
$pdf=pdf_new();
$fname="/file/testdir/test.pdf";
を
<?php
var_dump(pdf_new());
exit;
そして、画面に何が出力されるかをチェックしてみてください。
あまりないとは思いますが、もし
bool(false)
が帰ってきたら、このpdf_newの時点で失敗しています。
なんだか文字列がたくさんでてくるようなら、次の行も同じように
var_dumpしてデバッグしてみてください。
近いどこかでfalseがかえっているはずです。
この回答への補足
ご回答、ありがとうございます。
また、補足が大変遅くなり、申し訳ありませんでした。
(回答通知の設定をしたつもりが、メールが来てませんでした。いずれにせよ、私の注意不足なのは間違いありません。失礼しました)
PDFlibのバージョンはPDFlib6.0.2です。(サンプル集に付随されたCD-ROMからインストールしました)
PHPのバージョンはPHP5.2.8です。(xampp最新版から、MySQLなどとセットでインストールしました)
ご指摘くださった箇所なのですが、
$pdf=pdf_new();
$fname="/file/testdir/test.pdf";
の2行の代わりに(その2行は削除して)
var_dump(pdf_new());
exit;
を入力するということなのでしょうか?
ところで、私が冒頭に書いた質問2つのうち、一つ目は解決したと思われます。
$fname="/file/testdir/test.pdf";
は、付録CDのファイルを示してたわけで、
一方、私がPHPを動かすときには
C:\xampp\htdocs\_testの下にファイルをつくっていたわけで。
なので、その箇所を単純に
$fname="test.pdf"と書き直したら、「そのエラーは」出なくなりました。
が、やはり今度は2つ目の質問と同じエラー
Uncaught exception 'PDFlibException' with message 'Metrics data for font 'Century' not found' in C:\xampp\htdocs\_test\pdf_gen.php:10 Stack trace: #0 C:\xampp\htdocs\_test\pdf_gen.php(10): pdf_findfont() #1 {main} thrown in C:\xampp\htdocs\_test\pdf_gen.php on line 10
が表示されてしまいます。
もしおわかりでしたら、この部分のエラーの解決方法を教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル2019でPDFファイル名に枝番号をつけたい。 アクティブワークシートを印刷した後の処理とし 4 2023/06/06 21:00
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- PDF AutoCAD図面をPDF fileに変換した際、画像情報やブロック名はわかるのでしょうか。 1 2022/06/03 09:42
- Excel(エクセル) PDFファイルに日付を名前にして保存したい。 エクセル2019でワークシートに請求書のフォームを作り 2 2023/05/27 11:13
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
- PDF PDFに精通した方に質問。JPEGファイル群を一つのPDFファイルにするときの容量変化について 6 2023/07/23 19:06
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PDFのフォームで計算結果が0な...
-
applescript で pdfを扱いた...
-
昇龍道巴士
-
複数のjpgファイルの濃度を一斉...
-
box 1b of the IRS Form 1099-D...
-
ベルニクス製の電源の相当品を...
-
栄養失調率の計算はどうするの?
-
圧縮ソフト 7-Zipについて...
-
PDF Xchange viewer で編集する...
-
添付画像のように、Excel データタフ...
-
PDFファイルの表示方法の固定化...
-
ワードをPDFに変換する際、表ツ...
-
PDFファイル
-
iphoneから[Documents」を取り...
-
PFDでスキャンした画像の向...
-
PDFの文書をWordにしたら表示崩...
-
直前に閲覧していたページへ簡...
-
圧縮したもの(ZIP)を更に圧縮...
-
2個のA4サイズの複数ページPDF...
-
WordからPDFに変換すると、文書...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PDFのフォームで計算結果が0な...
-
サンプル通り入力してもエラー...
-
PDF::API2 で字間が開きすぎる
-
ハイパーリンクをオートフィル...
-
Acrobatのリンクツールで他のPD...
-
渦核とは、ナンでしょうか?
-
PDFに書き込みたい!
-
1つのセルに複数のハイパーリンク
-
box 1b of the IRS Form 1099-D...
-
Windows Server 2003 R2 評価版...
-
SolidWorksで内部メモリー3Gに...
-
この課題よくわかりません わか...
-
http://abc.com配下のPDFファイ...
-
実賢は何と読みますか?
-
エクセルのシートをマクロでpdf...
-
ニプロのCM
-
ベルニクス製の電源の相当品を...
-
pdfの連結とは
-
Gショック DW6000の日時、時刻...
-
URLから、PDFファイルを一括で...
おすすめ情報