
市販のサンプル集を用いて、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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pdfの連結とは
-
この論文理解できますか?
-
圧縮ソフト 7-Zipについて...
-
PDF Xchange viewer で編集する...
-
添付画像のように、Excel データタフ...
-
PDFファイル
-
ワードをPDFに変換する際、表ツ...
-
PDFの文書をWordにしたら表示崩...
-
iphoneから[Documents」を取り...
-
2個のA4サイズの複数ページPDF...
-
PFDでスキャンした画像の向...
-
PDFファイルの表示方法の固定化...
-
直前に閲覧していたページへ簡...
-
複数あるPDFファイルのページ数...
-
!!大至急!! 7-zipの「ソリ...
-
パスワード付の圧縮ソフト
-
フォルダ内にあるPDFファイルを...
-
PDF-XChangeの印刷でマークを消...
-
PDFファイルの、注釈をさわれな...
-
ExcelをPDF変換するときにハイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
この論文理解できますか?
-
PDFのフォームで計算結果が0な...
-
URLから、PDFファイルを一括で...
-
渦核とは、ナンでしょうか?
-
ベルニクス製の電源の相当品を...
-
ドイツ語の歌詞を教えてください
-
pdfの連結とは
-
Acrobatのリンクツールで他のPD...
-
pdfを編集したいです。
-
Windows Server 2003 R2 評価版...
-
Excel マクロによる特定pdfファ...
-
サンプル通り入力してもエラー...
-
複数のjpgファイルの濃度を一斉...
-
applescript で pdfを扱いた...
-
昇龍道巴士
-
PDF::API2 で字間が開きすぎる
-
PDFファイルの無料・編集ソフト
-
AUTORUNの記述
-
PDFの静止画像+文章をfaccebook...
-
この課題よくわかりません わか...
おすすめ情報