スレッド表示 | フラット表示〕 全トピック 920 件中 300 番目 次≫ ≪前

PDFlibについて

created: 2005-12-11 16:21 | modified: 2005-12-28 06:16 | reply: 4

[2806] PDFlibについて

user: roliat | created: 2005-12-11 16:21
PDFを使って帳票を出力してみようかと思ってPDFlibを導入したんですが、真っ白なページが出力されてうんともすんともいいません。
ちなみにphpinfo()を出力するとかきのようにPDFは使える用に表示されています。
PDF Support enabled
PDFlib GmbH Binary-Version 6.0.2p5
PECL Version 2.0.5
Revision $Revision: 1.55.2.18 $

調べてみると下記の関数で処理が止まってしまっているようです。
・pdf_add_outline
・pdf_set_font
・pdf_show_xy
また、メモリ上にPDFを作ろうとするとこれまた止まってしまいます。
・pdf_open_file($pdf);
何か原因が分かる方いらっしゃいませんでしょうか?
reply: 2810 返信 編集 削除

[2810] 状況

user: ごいんきょ。 | created: 2005-12-12 03:20
止まってしまうというのは、エラーを返すということでしょうか。それともフリーズのような状況(←無限ループのときみたいな)になるのでしょうか。

また、上記の関数をどのように使うと、止まってしまうのでしょうか。

まず、そこをお願いします。

ちなみに、pdf_add_outline()とpdf_set_font()は、古い関数として推奨されないので、代替の関数を利用した方が良いかもしれませんね。
Parent: 2806  reply: 2832 返信 編集 削除

[2832] サンプルソース

user: roliat | created: 2005-12-18 22:38
返信遅くなって申し訳ありません。
例えば下記のようなソースをtest.phpとして保存し、
ブラウザからアクセスしても真っ白のページが表示されます。

<?php
$pdf = pdf_new();
pdf_open_file($pdf, "test.pdf");
pdf_set_info($pdf, "Subject", "Testing");
pdf_begin_page($pdf, 595, 842);

//■
pdf_add_outline($pdf, "Page 1");

pdf_set_font($pdf, "Times-Roman", 30, "host");
pdf_set_value($pdf, "textrendering", 1);
pdf_show_xy($pdf, "Times Roman outlined", 50, 750);
pdf_moveto($pdf, 50, 740);
pdf_lineto($pdf, 330, 740);
pdf_stroke($pdf);
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
?>

■の部分を下記のように書き換えると
print("あ");
pdf_add_outline($pdf, "Page 1");
print("い");

ブラウザには「あ」のみ表示されます。
エラーは表示されませんし、フリーズでもありません。
よろしくお願いいたします。
Parent: 2810  reply: 2835 返信 編集 削除

[2835] 関数が古い&パラメータが足りない

user: ごいんきょ。 | created: 2005-12-19 23:08
エラーが表示されないのは、なぜかはわからないですが、関数のエラーだと思います。
もしかしてPHP5をつかってますか?

・pdf_add_outline()
・pdf_set_font()

はマニュアルにも書かれているとおり、古い関数で、新しいPHPでは定義されません。
代替の関数を使ってください。

> また、メモリ上にPDFを作ろうとするとこれまた止まってしまいます。
> ・pdf_open_file($pdf);

これも、二番目のパラメータが省略されているからだと思います。
PDFlib GmbH Version : 6.0.2

とのことなので、最新のPDFlibでは、不要であってもパラメータが省略できないようです。
http://ns1.php.gr.jp/pipermail/php-users/2004-October/024002.html
なぜそうなったのか、詳しいことは...すいません、よくわかりません。

pdf_open_file($pdf, 0);

とでもしておけば良いかもしれませんね。

pdflibについていた、hello.phpのソースをコピペしておきます。
確認されているかもしれませんが、一応。

これは我が家の環境でも、実証済みです。

$p = PDF_new();

/* open new PDF file; insert a file name to create the PDF on disk */
if (PDF_begin_document($p, "", "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}

/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter($p, "hypertextencoding", "winansi");

PDF_set_info($p, "Creator", "hello.php");
PDF_set_info($p, "Author", "Rainer Schaaf");
PDF_set_info($p, "Title", "Hello world (PHP)!");

PDF_begin_page_ext($p, 595, 842, "");

$font = PDF_load_font($p, "Helvetica-Bold", "winansi", "");

PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
PDF_show($p, "Hello world!");
PDF_continue_text($p, "(says PHP)");
PDF_end_page_ext($p, "");

PDF_end_document($p, "");

$buf = PDF_get_buffer($p);
$len = strlen($buf);

header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=hello.pdf");
print $buf;

PDF_delete($p);
Parent: 2832  reply: 2843 返信 編集 削除

[2843] 解決

user: roliat | created: 2005-12-28 06:16
ごいんきょ。さん、こんにちは。
おっしゃるとおりPHP5を使っています。

ご呈示いただいたソースを実行したところ、正常にPDFが出力されることが確認されました。
どうも古い資料を基にプログラムしていたようです。

おかげさまで解決いたしました!
どうもありがとうございます。
Parent: 2835  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 300 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑