お世話になっております。
長文を文字オブジェクトに表示する際に自動折り返しを行いたく、8.PDF出力時の自動折り返しを「する」に設定しているのですが、文字オブジェクトの幅を超過した位置で折り返しされてしまいます(本来45文字程で折り返す幅のところが18文字程続いてしまいます)。
どのように設定を行えばオブジェクトの幅で折り返しを行うようにできますでしょうか。
以下、文字オブジェクトのプロパティと現象を図示したものです。
高さ: 26
幅: 186
フォント: MS ゴシック, 12pt
自動折り返し: する
その他プロパティは初期値のままです。
表示したいもの
┌───────────────┐
│あいうえおかきくけこさしすせそ│
│たちつてとなにぬねのはひふへほ│
│まみむめもやゆよらりるれろわを│
└───────────────┘
今回起きているもの
┌───────────────┐
│あいうえおかきくけこさしすせそ│たちつてと
│なにぬねのはひふへほまみむめも│やゆよらり
│るれろわを │
└───────────────┘
宜しくお願い致します。
お問い合わせありがとうございます。
また、ご迷惑をおかけしておりましたら、申し訳ございません。
近日中にいただいた条件で、まず、再現性を確認させていただきます。
もし、デザイナーで作成したprepd(デザインファイル)で、その条件の文字列がファイル内に埋め込まれているものがございましたら、prepdファイルをメールでお送りいただけますか?
それが一番的確で速いかと思います。
私はそのファイルをエンジンで読み込んで、そのまま、PDF出力してみます。
適切なプロパティがあるかもしれません。PDFは相当過去ですが自動折り返しのやり取りがあった記憶がございますので、過去ログやメールも検索してみます。
その後、致命的な不具合と判明した場合、どういう形であれ、対応させていただきます。
よろしくお願いいたします。
メールにてデザインファイルを送付させていただきました。
ご確認のほどよろしくお願いします。
ご迷惑をおかけして申し訳ございません。
原因がわかりました。
半角文字だけで入力してただければ、今の状態でも問題なく改行されると思います。
または、漢字だけで入力してただければ、今の状態でも問題なく改行されると思います。
要するに、.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
より、最新版をダウンロードしてお試しください。
よろしくお願いいたします。
最新版をダウンロードしたところ解消いたしました。
ありがとうございました。
こちら参照を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
ご迷惑をおかけして申し訳ございません。
Linux版につきましては、前回のような.net framework -> .NET6 のメソッドの動作の相違といった単純な要因ではなく、
Linuxでは、System.Drawing が使用できないため
使っているグラフィックスライブラリも別物でになっております。
System.Drawing が使用できないため ImageSharp というライブラリを使用しております。
そのためPDF出力のロジックが全く異なります。
申し訳ございませんが、少しお時間をいただきます。
よろしくお願いいたします。
申し訳ございません。嘘を書いてしまいました。
今回の不具合も前回と同様、ひらがなの時のIndexOf の振舞の違いによるもので、
Linux版のビルドをし直していないことだけが原因でございました。
申し訳ございません。
ひとまず、Linux版をビルドしなおして、以下にアップさせていただきました。
http://www.pao.ac/~products_download/han_nan/Pao.Reports.Linux.zip
Pao.Reports.Linux.dll を入れ替え後、一度、参照から外して、参照追加し直した後、プロジェクトをクリーンしてからビルドしてください。
キャッシュに残っていることがあるようです。
正式リリースが後日行います。
よろしくお願いいたします。
- YY-BOARD -