バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
sumida
投稿日時: 2013/3/27 11:43
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
納品書の表示で、備考欄が改行されてない。
V2.12.3をテスト中です。
「帳票の作成」ダイアログで、備考欄に文字列を入れましたが、
表示した時、改行されず、連続した文字列になります。
私の環境だけでしょうか?

ソースでは、各行の間に改行コード(バックスラッシュ+n)を付加し、MultiCellにて表示させているようです。
ゲスト
投稿日時: 2013/3/27 13:15
対応状況: −−−
Re: 納品書の表示で、備考欄が改行されてない。
trim()が、¥を置き換えている様です。
2.12.3で入ったtrim()を取れば、改行しました。

trim()の意図は、調査し始めてみます。
AMUAMU
投稿日時: 2013/3/27 13:15
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: 納品書の表示で、備考欄が改行されてない。
確かに改行しないで1行で出力されてしまうようですね

取り急ぎ下記で不具合としてチケット化しました
http://svn.ec-cube.net/open_trac/ticket/2209


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

sumida
投稿日時: 2013/3/27 13:29
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 納品書の表示で、備考欄が改行されてない。
SC_Utils_Ex::rtrimを無くしてみました。

確かに、半角の文字を入れると、改行されました。
が、全角の文字を入れると、改行されませんでした。
ゲスト
投稿日時: 2013/3/27 16:17
対応状況: −−−
Re: 納品書の表示で、備考欄が改行されてない。
trim()は、末尾以降の無用な空白を削除、、、のためでした。

現状では、
trim()無しの場合、多バイト文字では、改行が、半角SP(?)になる模様。

PDF_Japanese::SJISMultiCell()
つまりは、japanese.php function SJISMultiCell()
を、追っかける必要が有りそうなので、取り急ぎは、下記のコードにて、改善される事を確認しました。

#軽く追っかけただけですが、下記のコードに落ち着く予感、大、、、
#もう、昔には戻れない、戻りたくない。。。


    function setEtcData() {
        $this->Cell(0, 10, '', 0, 1, 'C', 0, '');
        $this->SetFont('Gothic', 'B', 9);
        $this->MultiCell(0, 6, '< 備考 >', 'T', 2, 'L', 0, '');
        $this->SetFont('SJIS', '', 8);
        //$text = SC_Utils_Ex::rtrim($this->arrData['etc1'] . "\n" . $this->arrData['etc2'] . "\n" . $this->arrData['etc3']);
        //$this->MultiCell(0, 4, $text, '', 2, 'L', 0, '');
        $this->MultiCell(0, 4, SC_Utils_Ex::rtrim($this->arrData['etc1']), '', 2, 'L', 0, '');
        $this->MultiCell(0, 4, SC_Utils_Ex::rtrim($this->arrData['etc2']), '', 2, 'L', 0, '');
        $this->MultiCell(0, 4, SC_Utils_Ex::rtrim($this->arrData['etc3']), '', 2, 'L', 0, '');
    }

sumida
投稿日時: 2013/3/27 18:55
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 納品書の表示で、備考欄が改行されてない。
便乗しますが、

長い文字列の場合、自動で改行されるようですが、
文字列の途中で改行され、改行位置にかかった文字がなくなります。
また、ページ幅全体ではなく、左からページの3分の2あたりで改行されます。
ゲスト
投稿日時: 2013/3/27 20:23
対応状況: −−−
Re: 納品書の表示で、備考欄が改行されてない。
ご報告、ありがとうございます。
ご指摘の現象は、時間が取れ次第、確認したいと思います。

japanese.phpは、単バイト圏の、Developerが、善意にて、配布されている物ですから、japanese.phpに限らず、多バイト中での折り返しによる文字(コード)の不連続による多バイト文字の欠落は、よくある現象の一つと思われます。

こうした点は、多バイト圏の「われわれ」で、VZ Editorのマクロの様なjapanese.phpの難解なコードであっても、解析し、修正案を、Developerへフィードバックする必要があると思います。

それまでは、、、EC-CUBEとしては、
・改行を期待しない。
・「自動改行前」のバリデーション。
を、実装する方向が、現実的かと思い、調査を継続したいと思います、、、
が、中々、時間が取れず、、、orz...です。。。
sumida
投稿日時: 2013/3/27 22:03
対応状況: 保留
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 納品書の表示で、備考欄が改行されてない。
お手数かけました。
運用での制限部分がはっきりしていますので、
そこを加味したいと思います。
sumida
投稿日時: 2013/3/28 21:54
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 納品書の表示で、備考欄が改行されてない。
思いつきですが、

関数MultiCellについて、

(1) 引数のテキストをmb_splitにより、行単位に分割する。
(2) 行をmb_substrにより、一行あたりの表示可能文字数に分割する。
(3) 分割した文字列を関数Cellにより表示する。

というようにすれば良いような気もしますが。

3/29追記
data/module/fpdi/japanese.php 関数 SJISMultiCellにて、

$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;

の記述があり、たぶん、1行あたりの文字数を計算していると思います。
ここで、*1000の意味が?です。
$wは、表示範囲でのポイント数であり、
$this->FontSizeは、文字のポイント数であると思います。
したがって、*1000をする必要があるのでしょうか。

function SJISMultiCell($w, $h, $txt, $border=0, $align='L', $fill=false)
{
	// Output text with automatic or explicit line breaks
	$cw=&$this->CurrentFont['cw'];
	if($w==0)
		$w=$this->w-$this->rMargin-$this->x;
//	$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
	$wmax=floor(($w-2*$this->cMargin)/$this->FontSize);
	$s=str_replace("\r",'',$txt);
	$b=0;
	if($border)
	{
		if($border==1)
		{
			$border='LTRB';
			$b='LRT';
			$b2='LR';
		}
		else
		{
			$b2='';
			if(is_int(strpos($border,'L')))
				$b2.='L';
			if(is_int(strpos($border,'R')))
				$b2.='R';
			$b=is_int(strpos($border,'T')) ? $b2.'T' : $b2;
		}
	}

// changed
        $txt_lines = mb_split('\n', $s);
        foreach ($txt_lines as $txt_line) {
            $txt_line_length = mb_strlen($txt_line);
            if ($txt_line_length != 0) {
                $txt_count = ceil($txt_line_length/$wmax); // 行数
                for ($i=0; $i<$txt_count; $i++) {
                    $txt_target = mb_substr($txt_line, $i * $wmax, $wmax);
                    if ($i == 0) { // 開始行
                        $this->Cell($w,$h,$txt_target,$b,2,$align,$fill);
                    } elseif ($i == ($txt_count - 1)) { // 終了行
                        if($border && is_int(strpos($border,'B')))
                            $b.='B';
                        $this->Cell($w,$h,$txt_target,$b,2,$align,$fill);
                    } else {
                        $this->Cell($w,$h,$txt_target,$b2,2,$align,$fill);
                    }
                }
            } else { // 空行
                if($border && is_int(strpos($border,'B')))
                    $b.='B';
                $this->Cell($w,$h,$txt_line,$b,2,$align,$fill);
            }
        }

// changed
	$this->x=$this->lMargin;
}
sumida
投稿日時: 2013/3/30 8:12
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 納品書の表示で、備考欄が改行されてない。
半角と全角混在では、どちらも1文字扱いなので、短くなりました。

以下、削除
別件のため、スレッドを立てました。

http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=12413&post_id=57152&order=0&viewmode=flat&pid=0&forum=9#forumpost57152
(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

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

統計情報

総メンバー数は67,411名です
総投稿数は98,779件です

投稿数ランキング

1
seasoft
7333
2
AMUAMU
2712
3
468
2692
4
nanasess
2115
5
umebius
1788
6
yuh
1612
7
red
1427
8
h_tanaka
1051
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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