如何使用 iTextSharp 增加段落内的间距?

How can I increase the spacing within a paragraph with iTextSharp?

this 开始,我认为我可以通过执行以下操作之一来增加段落间距:

par.SetLeading(15, 2.5f); // doesn't do anything
par.SetLeading(0, 2);     // doesn't do anything

在上下文中:

Chunk boldpart = new Chunk("Important: ", helvetica9BoldRed);
Chunk ini = new Chunk("Form must be filled out in ", helvetica9Red);

Anchor anchor = new Anchor("Adobe Reader", LinkFont);
anchor.Reference = "http://www.adobe.com";

Chunk middlePart = new Chunk(" or Acrobat Professional 8.1 or above. To save completed forms, Acrobat Professional is required. For technical and accessibility assistance, contact the ", helvetica9Red);

Anchor anchorCCO = new Anchor("Campus Controller's Office", LinkFont);
anchor.Reference = "mailto:dplatypus@ucsc.edu";

PdfPTable tbl = new PdfPTable(1);
tbl.WidthPercentage = 55;
tbl.HorizontalAlignment = Element.ALIGN_LEFT;
var par = new Paragraph();
//par.SetLeading(15, 2.5f); // doesn't do anything
par.SetLeading(0, 2);       // doesn't do anything

par.Add(boldpart);
par.Add(ini);
par.Add(anchor);
par.Add(middlePart);
par.Add(anchorCCO);
PdfPCell chunky = new PdfPCell(par);
chunky.BorderWidth = PdfPCell.NO_BORDER;
tbl.AddCell(chunky);                          
doc.Add(tbl);

如评论所示,两者都没有做任何事情。这是我看到的:

如何增加段落内的行间距?

更新

当我尝试这样做时(响应答案):

PdfPCell chunky = new PdfPCell();
chunky.AddCell(par);

我明白了,“'iTextSharp.text.pdf.PdfPCell' 不包含 'AddCell' 的定义并且没有扩展方法 'AddCell' 接受 'iTextSharp.text.pdf.PdfPCell' 类型的第一个参数可以找到"

您的问题与 Whosebug 上已回答的许多问题重复。这些是其中的一些:

  • itext ColumnText ignores alignment
  • Right aligning text in PdfPCell
  • C# iTextSharp multi fonts in a single cell
  • ...

还有很多,但上面提到的是为免费电子书 The Best iText Questions on Whosebug 选择的那些,这本书回答了您在过去一周提出的许多问题。

当你这样做时:

PdfPCell chunky = new PdfPCell(par);

您没有将 par 视为 ParagraphPdfPCellpar 视为 PhrasePhraseParagraph 的超类)。正如许多人所记录的那样,您正在 文本模式 中创建 PdfPCell文本模式意味着所有在段落级别定义的属性都将被忽略,以支持单元格级别的属性。

换句话说:如果你为par定义了一个leading,它将被忽略。相反,将使用 chunkyleading。这是根据经验做出的设计选择:当您主要对添加文本感兴趣时,在单元格级别定义属性更有意义。

在某些情况下,您不想在单元格级别定义属性。例如:也许您有一个单元格,其内容由不同的 Paragraph 对象组成,这些对象具有不同的行距、对齐方式等...

在这种情况下,您将从文本模式切换到复合模式。你可以这样做:

PdfPCell chunky = new PdfPCell();
chunky.AddCell(par);

在单元格级别定义的行距和对齐等属性将被忽略。相反,parleadingalignment 将被考虑在内(并且 par 将被视为真正的 Paragraph,而不是 Phrase).

所有这些都在 iText in ActionThe Best iText Questions on Whosebug 和许多其他地方进行了解释。

这个有效:

var par = new Paragraph();
par.SetLeading(0, 1.2f);
par.Add(boldpart);
par.Add(ini);
par.Add(anchor);
par.Add(middlePart);
par.Add(anchorCCO);
PdfPCell chunky = new PdfPCell();
chunky.AddElement(par);
chunky.BorderWidth = PdfPCell.NO_BORDER;
tbl.AddCell(chunky);                          

根据口味增加或减少“1.2f”。