iTextSharp:行之间的额外空间

时间:2016-01-08 16:39:44

标签: itextsharp

我在以下代码中遗漏了一些内容,并且在输出

中的行之间得到了额外的空格
        PdfContentByte ^cb = writer->DirectContent;
        ColumnText ^ct = gcnew ColumnText(cb);

        float gutter = 15;
        float colwidth = (document->Right - document->Left - gutter) / 2;

        array<float, 1>^ left = { document->Left + 133, document->Top - 35,
            document->Left + 133, document->Bottom };
        array<float, 1>^ right = { document->Left + colwidth, document->Top - 35,
            document->Left + colwidth, document->Bottom };

        for (int i = 0; i < m_strTestString->Length; i++)
        {
            Phrase ^Ps = gcnew Phrase(m_strTestString[i], font);
            Ps->SetLeading(0.0f, 0.6f);
            ct->AddText(Ps);
            ct->AddText(Chunk::NEWLINE);
        }
        ct->SetColumns(left, right);
        ct->Go();

输出如下:

Client Name:sgsfg

Product:hjghj

Estimate#:354

我不希望上述行之间有空格。

我做错了什么?任何帮助表示赞赏

如果我不添加

,请稍微澄清一下
    ct->AddText(Chunk::NEWLINE);

输出显示为:

   Client Name:sgsfgProduct:hjghjEstimate

   #:354

所以我认为我的问题不是因为ct-&gt; AddText(Chunk :: NEWLINE);

由于

2 个答案:

答案 0 :(得分:2)

您应该知道ColumnText知道两种操作模式,文本模式复合模式

文字模式中,您可以使用AddText添加内容,而iText(夏普)会根据某些ColumnText参数排列文本片段。

复合模式中,您使用AddElement添加内容,iText(夏普)根据它们带来的参数排列元素。

文本模式的优点是它支持不规则(不一定是矩形)列,但基本上只支持文本。

复合模式的优势在于它支持不同类型的元素(ParagraphListPdfPTableImage个实例)但只支持矩形列。

在您的情况下,仅使用setText次调用添加文字。因此,您处于文本模式。因此,文本根据ColumnText参数排列。与此同时(当我写下我的答案时)发现了自己,因此你必须使用

ct->SetLeading(0.0f, 0.6f);

而不是

Ps->SetLeading(0.0f, 0.6f);

答案 1 :(得分:0)

我想通了

而不是

Ps->SetLeading(0.0f, 0.6f);

我需要做

ct->SetLeading(0.0f, 0.6f);