iTextSharp のバージョン 4.1.2 => 5.1.3 から移動するときに、テキストから PDF を生成するときに発生するバグに遭遇しました。問題は、行の最初の文字に先頭のスペースがある場合、先頭のスペースが切り捨てられることです。これは、右寄せの列の問題です。
例: (ダッシュ = スペース)
入力:
------ヘッダー
--------------1
--------------2
0123456789
出力:
-----Header
-------------1
-------------2
0123456789 ~~~この列には先行スペースがないため、配置が不適切であることに注意してください。
問題のあるコードは、ファイル「iTextSharp/text/pdf/PdfChunck.cs」メソッド「TrimFirstSpace」に絞り込まれました。このメソッドは、バイトのストリーミング中に PdfDocument クラスから呼び出されます。問題は、このメソッドが何を達成しようとしているのかについてのコード コメントがないことです。
この作業を正しく行うには、何を変更する必要がありますか? ここで ELSE 条件をコメントアウトすると、これを修正できるようです。
public float TrimFirstSpace()
{
BaseFont ft = font.Font;
if (ft.FontType == BaseFont.FONT_TYPE_CJK && ft.GetUnicodeEquivalent(' ') != ' ')
{
if (value.Length > 1 && value.StartsWith("\u0001"))
{
value = value.Substring(1);
return font.Width('\u0001');
}
}
else
{
if (value.Length > 1 && value.StartsWith(" "))
{
value = value.Substring(1);
return font.Width(' ');
}
}
return 0;
}