如何使用 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
视为 Paragraph
。 PdfPCell
将 par
视为 Phrase
(Phrase
是 Paragraph
的超类)。正如许多人所记录的那样,您正在 文本模式 中创建 PdfPCell
。 文本模式意味着所有在段落级别定义的属性都将被忽略,以支持单元格级别的属性。
换句话说:如果你为par
定义了一个leading
,它将被忽略。相反,将使用 chunky
的 leading
。这是根据经验做出的设计选择:当您主要对添加文本感兴趣时,在单元格级别定义属性更有意义。
在某些情况下,您不想在单元格级别定义属性。例如:也许您有一个单元格,其内容由不同的 Paragraph
对象组成,这些对象具有不同的行距、对齐方式等...
在这种情况下,您将从文本模式切换到复合模式。你可以这样做:
PdfPCell chunky = new PdfPCell();
chunky.AddCell(par);
在单元格级别定义的行距和对齐等属性将被忽略。相反,par
的 leading
和 alignment
将被考虑在内(并且 par
将被视为真正的 Paragraph
,而不是 Phrase
).
所有这些都在 iText in Action、The 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”。
从 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
视为 Paragraph
。 PdfPCell
将 par
视为 Phrase
(Phrase
是 Paragraph
的超类)。正如许多人所记录的那样,您正在 文本模式 中创建 PdfPCell
。 文本模式意味着所有在段落级别定义的属性都将被忽略,以支持单元格级别的属性。
换句话说:如果你为par
定义了一个leading
,它将被忽略。相反,将使用 chunky
的 leading
。这是根据经验做出的设计选择:当您主要对添加文本感兴趣时,在单元格级别定义属性更有意义。
在某些情况下,您不想在单元格级别定义属性。例如:也许您有一个单元格,其内容由不同的 Paragraph
对象组成,这些对象具有不同的行距、对齐方式等...
在这种情况下,您将从文本模式切换到复合模式。你可以这样做:
PdfPCell chunky = new PdfPCell();
chunky.AddCell(par);
在单元格级别定义的行距和对齐等属性将被忽略。相反,par
的 leading
和 alignment
将被考虑在内(并且 par
将被视为真正的 Paragraph
,而不是 Phrase
).
所有这些都在 iText in Action、The 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”。