C# 如何使用iTextSharp在pdf中绝对定位段落?

C# 如何使用iTextSharp在pdf中绝对定位段落?,c#,asp.net,itext,C#,Asp.net,Itext,我使用ASP.NET、C#和iTextSharp从头开始动态创建pdf 我正在用这个 Phrase ph = new Phrase(text); Paragraph p = new Paragraph(ph); p.Alignment = Element.ALIGN_JUSTIFIED; p.SpacingBefore = spaceBefore; p.FirstLineIndent = 170; p.IndentationLeft = 30; p.IndentationRight = 50;

我使用ASP.NET、C#和iTextSharp从头开始动态创建pdf

我正在用这个

Phrase ph = new Phrase(text);
Paragraph p = new Paragraph(ph);
p.Alignment = Element.ALIGN_JUSTIFIED;
p.SpacingBefore = spaceBefore;
p.FirstLineIndent = 170;
p.IndentationLeft = 30;
p.IndentationRight = 50;
doc.Add(p)
ColumnText ct = new ColumnText(cb);
ct.AddText(p);
ct.SetSimpleColumn(100, 100, 500, 500);
ct.Go();
如你所知,我以前曾想过使用段落.space。但我需要在pdf中定位三个段落,我从用户那里获得了这些段落的文本。所以现在根据上一段的行数,下一段会随着我不想要的高度而变化

然后我想用这个

Phrase ph = new Phrase(text);
Paragraph p = new Paragraph(ph);
p.Alignment = Element.ALIGN_JUSTIFIED;
p.SpacingBefore = spaceBefore;
p.FirstLineIndent = 170;
p.IndentationLeft = 30;
p.IndentationRight = 50;
doc.Add(p)
ColumnText ct = new ColumnText(cb);
ct.AddText(p);
ct.SetSimpleColumn(100, 100, 500, 500);
ct.Go();
但在这种情况下,我希望第一行和第二行的起点不同,就像这样

p.FirstLineIndent = 170;
p.IndentationLeft = 30;
p.IndentationRight = 50;
编辑: 当我尝试这样做时,属性不会影响这些段落,只是所有行都从同一点开始


有可能吗?我发现答案很简单。我们可以设置columntext属性

columntext.SetIndent(100, false);
它将只在第一行中添加空格。然后对于行距,我使用了这个

columntext.Leading = 31;

因此,如果使用columntext作为段落的绝对位置,则段落属性将不起作用。但是我们可以使用columntext属性。

我发现答案很简单。我们可以设置columntext属性

columntext.SetIndent(100, false);
它将只在第一行中添加空格。然后对于行距,我使用了这个

columntext.Leading = 31;

因此,如果使用columntext作为段落的绝对位置,则段落属性将不起作用。但是我们可以使用columntext属性。

如果您尝试使用该属性,会发生什么情况?请思考左上角和右下角。。根据你所做的,如果我理解正确,你是在改写段落位置吗?你需要相应地调整,如果我理解正确,我会说调整第一个参数。。因此,你可能需要选择最后一个起始位置,然后在上面加上5或10,例如..对不起,你能告诉我如何获得最后一个起始位置吗?你能把它放在一个属性中吗。。?或者你是在硬编码,比如10,10,10,10,然后20,10,10,10对不起,如果我理解正确的话?你想让我设置段落每一行的起始位置,同时在columntext中使用它。你能告诉我我是否正确理解你吗?当你尝试这样做时会发生什么?想想左上角,右下角。。根据你所做的,如果我理解正确,你是在改写段落位置吗?你需要相应地调整,如果我理解正确,我会说调整第一个参数。。因此,你可能需要选择最后一个起始位置,然后在上面加上5或10,例如..对不起,你能告诉我如何获得最后一个起始位置吗?你能把它放在一个属性中吗。。?或者你是在硬编码,比如10,10,10,10,然后20,10,10,10对不起,如果我理解正确的话?你想让我设置段落每一行的起始位置,同时在columntext中使用它。你能告诉我我是否正确理解你吗?
columntext.SetIndent(100, false);