我在以下代码中遗漏了一些内容,并且在输出
中的行之间得到了额外的空格 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);
由于
答案 0 :(得分:2)
您应该知道ColumnText
知道两种操作模式,文本模式和复合模式。
在文字模式中,您可以使用AddText
添加内容,而iText(夏普)会根据某些ColumnText
参数排列文本片段。
在复合模式中,您使用AddElement
添加内容,iText(夏普)根据它们带来的参数排列元素。
文本模式的优点是它支持不规则(不一定是矩形)列,但基本上只支持文本。
复合模式的优势在于它支持不同类型的元素(Paragraph
,List
,PdfPTable
和Image
个实例)但只支持矩形列。
在您的情况下,仅使用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);