-1

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;
    }
4

1 に答える 1

1

新しいコードの変更により、この問題が解決されます。if 文は重要です。


chunk = overflow;
chunk.TrimFirstSpace();

新しい

bool newlineSplit = chunk.IsNewlineSplit();
chunk = overflow;
if (!newlineSplit)
    chunk.TrimFirstSpace();

http://sourceforge.net/p/itextsharp/code/518/tree/trunk/src/core/iTextSharp/text/pdf/PdfDocument.cs#l415

于 2013-02-21T15:47:57.723 に答える