[戻る]
記事閲覧
投稿キー (右画像の数字を入力) 投稿キー
おなまえ
Eメール
タイトル
コメント
参照先
暗証キー (英数字で8文字以内)
文字色
文字の折り返しが上手くいかない 投稿者:tanaka 投稿日:2023/03/13(Mon) 15:40 No.2822

お世話になっております。

長文を文字オブジェクトに表示する際に自動折り返しを行いたく、8.PDF出力時の自動折り返しを「する」に設定しているのですが、文字オブジェクトの幅を超過した位置で折り返しされてしまいます(本来45文字程で折り返す幅のところが18文字程続いてしまいます)。
どのように設定を行えばオブジェクトの幅で折り返しを行うようにできますでしょうか。

以下、文字オブジェクトのプロパティと現象を図示したものです。
高さ: 26
幅: 186
フォント: MS ゴシック, 12pt
自動折り返し: する
その他プロパティは初期値のままです。

表示したいもの
┌───────────────┐
│あいうえおかきくけこさしすせそ│
│たちつてとなにぬねのはひふへほ│
│まみむめもやゆよらりるれろわを│
└───────────────┘

今回起きているもの
┌───────────────┐
│あいうえおかきくけこさしすせそ│たちつてと
│なにぬねのはひふへほまみむめも│やゆよらり
│るれろわを          │
└───────────────┘

宜しくお願い致します。

Re: 文字の折り返しが上手くいかない 投稿者:Pao@Office 投稿日:2023/03/13(Mon) 17:07 No.2823

お問い合わせありがとうございます。
また、ご迷惑をおかけしておりましたら、申し訳ございません。

近日中にいただいた条件で、まず、再現性を確認させていただきます。
もし、デザイナーで作成したprepd(デザインファイル)で、その条件の文字列がファイル内に埋め込まれているものがございましたら、prepdファイルをメールでお送りいただけますか?
それが一番的確で速いかと思います。
私はそのファイルをエンジンで読み込んで、そのまま、PDF出力してみます。
適切なプロパティがあるかもしれません。PDFは相当過去ですが自動折り返しのやり取りがあった記憶がございますので、過去ログやメールも検索してみます。
その後、致命的な不具合と判明した場合、どういう形であれ、対応させていただきます。
よろしくお願いいたします。

Re: 文字の折り返しが上手くいかない 投稿者:tanaka 投稿日:2023/03/13(Mon) 17:26 No.2824

メールにてデザインファイルを送付させていただきました。
ご確認のほどよろしくお願いします。

Re: 文字の折り返しが上手くいかない 投稿者:Pao@Office 投稿日:2023/03/15(Wed) 16:58 No.2825

ご迷惑をおかけして申し訳ございません。

原因がわかりました。
半角文字だけで入力してただければ、今の状態でも問題なく改行されると思います。
または、漢字だけで入力してただければ、今の状態でも問題なく改行されると思います。

要するに、.NET 6 では、「ひらがな」の半角判定に問題がありました。
これまで、次のように半角判定を行っておりました。

  public static bool isHankaku(string stTarget)
  {
    String strHankakuKana = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ゙゚。、";

    System.Text.Encoding hEncoding = System.Text.Encoding.GetEncoding("UTF-8");
    Int64 num = hEncoding.GetByteCount(stTarget);
    // 1byte文字の場合
    if (num == stTarget.Length)
    {
      return true;
    }
    // 半角カナの場合(※「゙」のみ何故かIndexOfにヒットしない)
    else if (strHankakuKana.IndexOf(stTarget) >= 0 || stTarget == "゙")
    {
      return true;
    }
    else
    {
      return false;
    }
  }

これで、.net framework は、問題ない判定が行えておりました。
ところが、.NET 5 / .NET 6 / .NET 7 においては、
strHankakuKana.IndexOf(stTarget) >= 0 の箇所で、
stTargetが"あ"の時に、strHankakuKana.IndexOf("あ")が、"ア"にヒットしてしまい、位置0を返す。
stTargetが"い"の時に、strHankakuKana.IndexOf("い")が、"イ"にヒットしてしまい、位置1を返す。
という不具合?仕様?が発生していることが判明しました。

従って、ひとまず、次のようにその箇所を変更いたしました。

    // 半角カナの場合(※「゙」のみ何故かIndexOfにヒットしない)
    else if (strHankakuKana.IndexOf(stTarget) >= 0 || stTarget == "゙")
    {
      if(strHankakuKana[strHankakuKana.IndexOf(stTarget)] == stTarget[0])
      {
        return true;

      }
      else
      {
        return false;
      }
    }
    else
    {
      return false;
    }


最新版 ver 9.2.1 として、インストーラを入れ替えておりますので、
http://www.pao.ac/reports.net/#download
より、最新版をダウンロードしてお試しください。

よろしくお願いいたします。

Re: 文字の折り返しが上手くいかない 投稿者:tanaka 投稿日:2023/03/15(Wed) 17:56 No.2826

最新版をダウンロードしたところ解消いたしました。
ありがとうございました。

Re: 文字の折り返しが上手くいかない 投稿者:tanaka 投稿日:2023/03/28(Tue) 17:56 No.2831

こちら参照をPao.Reports.Linux.dllにしたところ再発いたしました。Linux版も修正をお願いいたします。

参照したファイルは以下のパスのものです(Pao.Reports.dllと同一階層にPao.Reports.Linux.dllがなかったため)。
C:\Program Files (x86)\Pao@Office\Reports.net\Sample\.NET 6\09. .NET6 WEBアプリ -Azure,AWS,GCP,オンプレ\CS\PaoWebApp\Reports.net.Assembly\Pao.Reports.Linux.dll

Re: 文字の折り返しが上手くいかない 投稿者:Pao@Office 投稿日:2023/03/29(Wed) 14:02 No.2832

ご迷惑をおかけして申し訳ございません。

Linux版につきましては、前回のような.net framework -> .NET6 のメソッドの動作の相違といった単純な要因ではなく、
Linuxでは、System.Drawing が使用できないため
使っているグラフィックスライブラリも別物でになっております。
System.Drawing が使用できないため ImageSharp というライブラリを使用しております。
そのためPDF出力のロジックが全く異なります。
申し訳ございませんが、少しお時間をいただきます。

よろしくお願いいたします。

Re: 文字の折り返しが上手くいかない 投稿者:Pao@Office 投稿日:2023/03/29(Wed) 15:59 No.2833

申し訳ございません。嘘を書いてしまいました。
今回の不具合も前回と同様、ひらがなの時のIndexOf の振舞の違いによるもので、
Linux版のビルドをし直していないことだけが原因でございました。
申し訳ございません。
ひとまず、Linux版をビルドしなおして、以下にアップさせていただきました。
http://www.pao.ac/~products_download/han_nan/Pao.Reports.Linux.zip

Pao.Reports.Linux.dll を入れ替え後、一度、参照から外して、参照追加し直した後、プロジェクトをクリーンしてからビルドしてください。
キャッシュに残っていることがあるようです。

正式リリースが後日行います。
よろしくお願いいたします。

Re: 文字の折り返しが上手くいかない 投稿者:tanaka 投稿日:2023/03/29(Wed) 17:10 No.2834

ご対応ありがとうございます。

- YY-BOARD -