iTextSharp修剪前导空间并导致列不对齐

时间:2013-02-20 13:47:47

标签: itextsharp

从版本4.1.2 =>移动时iTextSharp的5.1.3我遇到了从文本生成PDF时发生的错误。问题是当一行的第一个字符有一个前导空格时,那个前导空格会被截断。这是右对齐列的问题。

示例:(破折号=空格)

输入

  

------部首
  -------------- 1个
  -------------- 2
  0123456789

输出

  

- - - - 部首
  ------------- 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;
    }

1 个答案:

答案 0 :(得分:1)

较新的代码更改可解决此问题。 if语句很重要。

<强> OLD

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