バージョン選択

フォーラム

メニュー

オンライン状況

34 人のユーザが現在オンラインです。 (17 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 34
もっと...

サイト内検索

質問 > 管理機能 > 納品書の表示で、備考欄が改行されてない。

管理機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
seasoft
投稿日時: 2013/4/6 15:31
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: 納品書の表示で、備考欄が改行されてない。
引用:

sumidaさんは書きました:
便乗しますが、

長い文字列の場合、自動で改行されるようですが、
文字列の途中で改行され、改行位置にかかった文字がなくなります。
また、ページ幅全体ではなく、左からページの3分の2あたりで改行されます。

改修してみました。
http://svn.ec-cube.net/open_trac/changeset/22778


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

ゲスト
投稿日時: 2013/4/6 14:13
対応状況: −−−
Re: 納品書の表示で、備考欄が改行されてない。
引用:
sumida 様とのやり取りの中でも話題に上がっておりますので、ご参照ください。

はい、参照させて頂きながら、ロジックを追っています。

老頭、かつ、ここ8ヶ月程、java脳でしたので、
本件は、eccubeにおいても、稀な程の多重(?)extendsなものなので、リハビリに、もうしばらく時間がかかりそうです。。。

引用:
今週末は少し時間をとれそうなので、ザックリと改修案をコミットしてみようかと思っています。

よろしくお願い致します。。。
seasoft
投稿日時: 2013/4/6 5:25
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: 納品書の表示で、備考欄が改行されてない。
Ringo 様

sumida 様とのやり取りの中でも話題に上がっておりますので、ご参照ください。

今週末は少し時間をとれそうなので、ザックリと改修案をコミットしてみようかと思っています。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

ゲスト
投稿日時: 2013/4/5 21:56
対応状況: −−−
Re: 納品書の表示で、備考欄が改行されてない。
2byteコードを扱う前提での、japanese.phpのロジックには、今のところ異常は見受けられていません。
sjismulticellにutf-8を突っ込んでも、pdfが文字化けしないのはなぜ?
sjisに変換して突っ込むと文字化けするのはなぜ?

を、ちょっと、追ってます。
sumida
投稿日時: 2013/4/2 10:59
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 納品書の表示で、備考欄が改行されてない。
確かに、備考欄で、半角カナを入れると、全角になりました。
MultiCell に直接、半角カナを渡すと、表示も半角カナになりました。
ただ、UTF-8で半角カナも3byte文字になるので、表示される長さも当然半分の部分で自動改行されました。

いまのところ、半角カナを使用する予定がないので、参考までに。

/*
		if($o<128)
		{
			// ASCII
			$l+=$cw[$c];
			$n=1;
			if($o==32)
				$sep=$i;
		}
		elseif($o>=161 && $o<=223)
		{
			// Half-width katakana
			$l+=500;
			$n=1;
			$sep=$i;
		}
		else
		{
			// Full-width character
			$l+=1000;
			$n=2;
			$sep=$i;
		}
*/
// UTF-8 code
		if (($o >= 0 && $o <=31) || $o == 127) { // 00~1F,7F
			// control code (1byte)
		} elseif ($o >= 32 && $o <= 126) { // 20~7E
			// ASCII
			$l+=$cw[$c];
			$n=1;
			if($o==32)
				$sep=$i;
		} elseif ($o >= 128 && $o <= 191) { // 80~BF
			// NonUse (Not 1st byte)
		} elseif ($o >= 192 && $o <= 223) { // C0~DF
			// 2byte code (2byte)
		} elseif ($o >= 224 && $o <= 239) { // E0~EF
			// 3byte code (3byte)
			if ($o == 239 && // EFBDA1 ~ EFBDBF , EFBE80 ~ EFBE9F
				( ( ord($s[$i+1]) == 189 && (ord($s[$i+2]) >= 161 && ord($s[$i+2]) <= 191) ) ||
				( ord($s[$i+1]) == 190 && (ord($s[$i+2]) >= 128 && ord($s[$i+2]) <= 159) ) ) ) { 
				//  Half-width katakana
				$l+=500;
				$sep=$i;
			} else {
				// Full-width character
				$l+=1000;
				$sep=$i;
			}
			$n = 3;
		} elseif ($o >= 240 && $o <= 247) { // F0~F7
			// 4byte code
		} elseif ($o >= 248 && $o <= 251) { // F8~FB
			// 5byte code
		} elseif ($o >= 252 && $o <= 253) { // FC,FD
			// 6byte code
		} else { // $o>=254 && $o <= 255 FE,FF
			// NonUse 
		}
seasoft
投稿日時: 2013/4/2 9:24
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: 納品書の表示で、備考欄が改行されてない。
最終的な出力までに SJIS を通るならば、そのタイミングの問題かなと思っています。(最後まで UTF-8 で通せるならば理想だと思いますが・・・)

半カナは、(フォーム入力の処理クラスによって) 文字レベルで、全角に変換されているといった事は無いですか?


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

sumida
投稿日時: 2013/4/2 6:53
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 納品書の表示で、備考欄が改行されてない。
ということは、SJISMultiCell で行っている「SJIS の文字分割」の部分を、
「UTF-8 の文字分割」に変更しなければならないですね。

参考までに、備考欄に半角カナをいれると、文字の大きさが全角サイズになりました。
半角の場合も
$l += 500; --> $l += 1000;
にする必要が。
seasoft
投稿日時: 2013/4/2 4:17
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: 納品書の表示で、備考欄が改行されてない。
> SJISMultiCell の中で、分割した文字列を $this->Cell で書いているので、この段階で SJIS に変換されているのでは?

はい。私もその理解です。


実際には漢字とは限らないので、マルチバイト文字列関数を使うのが良いようにも局所的には思いますが、メソッド全体を見ると、それも微妙ですね・・・

Cell 内での変換を抑制するフラグ(クラス変数?)を持たせて、SJISMultiCell をオーバライドしますかね。少々複雑になりますが、SC_Helper_FPDI#SJISMultiCellForFancyTable あたりも同じルーチンに書き換えれば、全体としては整理される予感も。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

sumida
投稿日時: 2013/4/1 16:36
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 納品書の表示で、備考欄が改行されてない。
ん〜。
japanese.php SJISMultiCell の $s を$s[$i] で追いかけてゆくと、漢字の部分は、3byteでカウントしないと、うまくいきません。

		else
		{
			// Full-width character
			$l+=1000;
//			$n=2;
			$n=3;
			$sep=$i;
		}


SJISMultiCell の中で、分割した文字列を $this->Cell で書いているので、この段階で SJIS に変換されているのでは?
seasoft
投稿日時: 2013/4/1 6:55
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: 納品書の表示で、備考欄が改行されてない。
SC_Helper_FPDI::Cell (オーバーライドメソッド) で変換され、SJIS になっていたと思います。

本当は、UTF-8 で通せするとスマートだと思いますけどね。継承しているライブラリの関係で現状 SJIS です。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

(1) 2 3 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は68,550名です
総投稿数は99,523件です

投稿数ランキング

1
seasoft
7333
2
468
2811
3
AMUAMU
2712
4
nanasess
2121
5
umebius
1834
6
yuh
1612
7
red
1429
8
h_tanaka
1062
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.