Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2004-05-17 21:39:09

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_PDFで日本語を通してみました

まみおさんが書いておられたNP_PDFがなんだか気になり wink ,日本語が通るようにしてみました。
ただし,フォントの指定をするところを全部MSGOTHICに置き換えただけ,という極めていい加減なものなので過度な期待はしないでください。

試しに使っていろいろ文句を言っていただけるといいと思います。
ちなみに文字コードには依存していません(のはず)。

なお,本家のNP_PDF,英語版のFPDF,FPDFをマルチ言語化するMBFPDFを利用しています。
NP_PDFとMBFPDFは一部修正しています。


Attachments:
zip NP_PDF_J.zip, Size: 382.15 KiB, Downloads: 1,000

オフライン

#2 2004-05-17 22:55:57

藤咲
Administrator
From: 広島
登録日: 2003-11-17
投稿: 1,210
ウェブサイト

Re: NP_PDFで日本語を通してみました

Andy さんの発言:

試しに使っていろいろ文句を言っていただけるといいと思います。
ちなみに文字コードには依存していません(のはず)。

よくわからないんですが、楽しそうなので試してみました。
しかし、

Warning: call_user_func_array(): First argumented is expected to be a valid callback, 'Array' was given in /virtual/fjsk/public_html/nucleus/libs/BLOG.php on line 1147

というエラーが出ます。とりあえず原因を調べる時間がなかったので報告まで。


藤咲
備忘録とかもろもろ
http://fjsk.tk/

オフライン

#3 2004-05-17 23:19:03

Fel
メンバー
From: Kyoto
登録日: 2003-11-06
投稿: 599
ウェブサイト

Re: NP_PDFで日本語を通してみました

うちで個別アイテムの、著者名の横につけてみました。
まだところどころ化けますが、これはいいですね。(
今後に大いに期待しちゃいます :!:

オフライン

#4 2004-05-18 08:39:47

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_PDFで日本語を通してみました

わーい、やった。
とりあえずは日本語が通ってますね。
あとは、html2pdfだ。
早くやりたい...


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#5 2004-05-18 14:31:12

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_PDFで日本語を通してみました

ちょっとだけ表示をいじくってみました。
本文をP明朝にしちゃったけど。
ちょっと調べるのが必要だったのは、文書情報のタイトルに日本語入れる所。
サンプルは
http://cgi.f39.aaacafe.ne.jp/~nkhr/n/index.php?itemid=2
↑ここのタイトル横の[PDF]リンクをクリックしてみてね。

あとは、保存ファイル名変更かなー

2つのファイルを上書きしてみてください。


Attachments:
zip NP_PDFadd.zip, Size: 5.76 KiB, Downloads: 704

nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#6 2004-05-18 17:10:51

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_PDFで日本語を通してみました

まみおさん,ありがとうございます。
僕も文字化けのところなど,いくつか調べていたのですが,
まみおさんにまとめていただいていいでしょうか。

(1)LIの処理のところ(193行目付近)
この処理の間だけ欧文フォントに変えないと文字化けします。
行頭の表示を変える方がいいのかな?

(2)リンクのところ(308行目)
    $this->Write(5,$txt,$URL);

    $this->Write(5,mb_convert_encoding($txt,_OUTPUTCHARSET, _CHARSET),$URL);
に変えてください。

それと,NP_PDFの141行目のところはどういう意味があるのか教えてください。
(エミュレータはUTF-16を現状サポートしていないので :? )

オフライン

#7 2004-05-18 23:25:03

藤咲
Administrator
From: 広島
登録日: 2003-11-17
投稿: 1,210
ウェブサイト

Re: NP_PDFで日本語を通してみました

っと、話の筋からはそれますが、これってそもそもXEか3.0RCオンリーです?
私のエラーも2.0だからか…。

細かいPluginの修正とかの時間が取れない(中の日本語をいじってたりする)ので、2.0のままなんですよね。
3.0正式版がでて、時間が取れるようになったらVerUPとあわせてNP_PDFで遊んでみようと思います。


藤咲
備忘録とかもろもろ
http://fjsk.tk/

オフライン

#8 2004-05-19 14:58:23

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_PDFで日本語を通してみました

Andy さんの発言:

それと,NP_PDFの141行目のところはどういう意味があるのか教えてください。
(エミュレータはUTF-16を現状サポートしていないので :? )

一番正式な回答は、
http://partners.adobe.com/asn/acrobat/docs/pdfmark.pdf
だと思うのですが :cry:

ps に pdf のリンク情報等を埋め込むのは pdfmark というオペレータ
で行われます。pdfmark のマニュアルは、Adobe Acrobat Distiller/
Exchange に付いていますし、Adobe のサイトで検索したら入手できる
と思いますが、それによると、/Title オプションで指定される文字列
は (日本語を使おうと思うと) Unicode でないといけないようです。
更に、Unicode である事を表わすヘッダ (0xFE 0xFF) を付ける必要が
あり、

という記事を見つけ、さらに、

PDF中の情報(しおり、ノート、書類情報、アーティクル、日付)はUnicodeで表されます。PDF 1.1では、これらの文字列はISO Latin1の上位セットであるPDFDOcEncodingで保存されます。PDFDocEncodingはUnicodeと256文字部分で互換性があります。

文字列はPDFDocEncoding又はUnicodeのどちらかで保存されます。もし、Unicodeであれば、文字列の最初の2バイトはUnicode Byte Orderマーカーである<FE, FF>でなければなりません。<FE, FF>とは8進表示で<376, 377>になります。
つまり、Unicodeの文字列を表示するためにはその文字列の最初にこのUnicode Byte Orderマーカーを挿入してこの文字はUnicodeでエンコードされていますと表示させなければならないようです。さらにそれらはエスケープシーケンス処理されていなければなりません。
つまり、PDF中に日本語文字を使用するためには、(\376\377 xxxxxxxxxxxxxxx )という記述方法が採用されなければなりません。

という別の記事を見つけました。

で、そんなfunctionがあったような?とmbfpdf.phpを覗くと、

// For Outline, Title, Sub-Title and ETC Multi-Byte Encoding
function _unicode($txt)
{
    if (function_exists('mb_detect_encoding')) {
        if (mb_detect_encoding($txt) != "ASCII") {
            $txt = chr(254).chr(255).mb_convert_encoding($txt,"UTF-16","auto");
        }
    }
    return $txt;
}

↑まさに、これですよね?

本当は、_unicode($txt)したかったのですが、どれがどのクラスを利用してオブジェクトはどうなっているのかがさっぱりだったので直接書いてしまっただけなのです :cry:

とりあえずは、文書情報のタイトルだけを_unicode($txt)していますが、本当はたぶん文書情報のAuthor(=blog名)が日本語になる時も同じ事をしないとダメですよね。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#9 2004-05-19 15:07:09

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_PDFで日本語を通してみました

なぜUTF-16なのかは私は全然わかっていません。8と16とで何が違うのかもわかっていません :oops:

日本語で一番詳しそうな記事が現存していないようなので、
http://xx.nakahara21.net/item_467.html
に貼付けておきました。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#10 2004-05-19 15:36:22

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_PDFで日本語を通してみました

なるほどなるほど,PDFの仕様でBOM付きのビッグ・エンディアンになってるんですね。
全部の関数でUTF-16をサポートしようとすると大変ですが,
mb_convert_encodingだけだったら大したことないので
近々,サポートします。

オフライン

#11 2004-05-19 20:23:50

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_PDFで日本語を通してみました

Andy さんの発言:

mb_convert_encodingだけだったら大したことないので
近々,サポートします。

ということでサポートしました。一方通行の変換です。

http://www.matsubarafamily.com/blog/mbemu.php?itemid=58

オフライン

#12 2004-05-19 22:37:58

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_PDFで日本語を通してみました

はやっ :shock:
ありがとうございます。

全くわかっていない私がそれなりに有用な情報を紹介できて嬉しいです。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#13 2004-05-20 13:12:47

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_PDFで日本語を通してみました

改変の第二弾。
行頭を揃うように。
WikiStyle使っている人はコンバートするように。
今のところulもolも同じ表示だけど。
Felさんのドキュメントはこれでだいぶマシになるかしら??

2個のファイルを上書きしてください。


Attachments:
zip NP_PDFadd2.zip, Size: 6.02 KiB, Downloads: 792

nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#14 2004-05-20 14:33:20

Fel
メンバー
From: Kyoto
登録日: 2003-11-06
投稿: 599
ウェブサイト

Re: NP_PDFで日本語を通してみました

nakahara21 さんの発言:

行頭を揃うように。
WikiStyle使っている人はコンバートするように。
今のところulもolも同じ表示だけど。
Felさんのドキュメントはこれでだいぶマシになるかしら??

おお、ちゃんと表示されてます big_smile
#ソース見てませんが、整形プラグインとの調整は個々に必要になってくるってことでしょうか?

これであとはキャッシュ名をFancierURLしちゃっている動作を変更すれば普通に使えそうですね。
正式版、心待ちにしております。

オフライン

#15 2004-05-20 15:16:28

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_PDFで日本語を通してみました

nakahara21 さんの発言:

本当は、_unicode($txt)したかったのですが、どれがどのクラスを利用してオブジェクトはどうなっているのかがさっぱりだったので直接書いてしまっただけなのです :cry:

ちなみにここは

$doc_title = $pdf->_unicode($doc_title);

と書いても大丈夫です。
クラス構造はfpdfにFPDFというクラスがあって,mbfpdfではそれを継承したMBFPDFというクラスになっています。html2pdfのPDFというクラスは,オリジナルではFPDFを継承していたのですが,MBFPDFを継承するように変えました。ここの変数$pdfはPDFクラスのインスタンスになっています。

ところで問題が一つ。グラフィックスが貼り込んであると文字がそれと重なってしまいます。
めんどくさそう :?

オフライン

#16 2004-05-21 02:46:38

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_PDFで日本語を通してみました

NP_PDF.php本体で、

    $row->body = stripslashes($row->body);
    $row->more = stripslashes($row->more);

しているのに、
html2pdf.phpで再び

            $this->Write(5,stripslashes(txtentities($e)));

とstripslashesするのに意味があるのでしょうか?
2回目の方やると、可能性とか表示とかいう漢字が文字化け。

そして、

if (get_magic_quotes_gpc())

判定は必要なのでしょうか?不要なのでしょうか?

とは言っても、誰か答えてくれるのかなー :cry:


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#17 2004-05-21 18:39:07

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_PDFで日本語を通してみました

nakahara21 さんの発言:

NP_PDF.php本体で、

    $row->body = stripslashes($row->body);
    $row->more = stripslashes($row->more);

しているのに、
html2pdf.phpで再び

            $this->Write(5,stripslashes(txtentities($e)));

とstripslashesするのに意味があるのでしょうか?

分かりません(爆)。
ただ,SJISで書き込むので文字列処理の関数は色々と副作用を起こす危険があります。そういう意味では最初にmb_convert_encodingしてしまうのではなく,PDFに書き込む関数を呼ぶところ,つまりここだったらstripentitiesした後で変換する方がいいと思います。

nakahara21 さんの発言:

そして、

if (get_magic_quotes_gpc())

判定は必要なのでしょうか?不要なのでしょうか?

ごめんなさい,この判定がどこにあるか分かりませんでした。

オフライン

#18 2004-11-21 02:08:25

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_PDFで日本語を通してみました

全然関係ない事で、FPDFの日本サイトを覗いたら、ここが紹介されてました。
http://fpdf.japansite.net/modules/newbb ... rumpost297
に。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

Board footer