使用itextsharp在标题和段落之间交替

时间:2015-01-19 15:07:34

标签: c# asp.net pdf-generation itextsharp

我正在尝试使用itextsharp编写pdf文档,但我不会在两种样式之间切换:标题和段落。

我尝试过这样的事情:

Paragraph title= new Paragraph();
title.Alignment = Element.ALIGN_CENTER;
title.Font = FontFactory.GetFont("Arial", 32);
title.Add("\nTitle 1\n\n");
pdfDoc.Add(title);


Paragraph paragraph = new Paragraph();
paragraph.Alignment = Element.ALIGN_LEFT;
paragraph.Font = FontFactory.GetFont("Arial", 12);
paragraph.Add("Lorem ipsum dolor sit amet \n");
pdfDoc.Add(paragraph);


title.Add("\nTitle 2\n\n");
pdfDoc.Add(title);
paragraph.Add("Consectetur adipiscing elit \n");
pdfDoc.Add(paragraph);

但看起来我需要在添加新文本之前清除内容。是否有可能只清除文本或者我是否必须为每个paracgraph创建新变量?希望不要......

1 个答案:

答案 0 :(得分:1)

解决问题的一种方法是更改​​代码:

Font titleFont = FontFactory.GetFont("Arial", 32);
Font regularFont = FontFactory.GetFont("Arial", 36);
Paragraph title;
Paragraph text;
title = new Paragraph("Title", titleFont);
title.Alignment = Element.ALIGN_CENTER;
pdfDoc.Add(title);
text = new Paragraph("Lorem ipsum dolor sit amet", regularFont);
pdfDoc.Add(text);
title = new Paragraph("Title 2", titleFont);
title.Alignment = Element.ALIGN_CENTER;
pdfDoc.Add(title);
text = new Paragraph("Consectetur adipiscing elit", regularFont);
pdfDoc.Add(text);

如果内容在添加文本后消失,则会被视为严重错误。这意味着一次使用的对象不能再被重用。简而言之:在您的问题中,您要求iTextSharp的开发人员引入错误...

通常,会创建一个单独的类,用于定义所有使用的Font个对象。使用getTitle()getText()等自定义方法创建一个辅助类也是一个好主意,类似于PojoToElementFactory类(请注意,POJO代表Plain Old Java Object。原始代码是用Java编写的,真的是你的。

使用\n引入换行符是糟糕的想法。为什么不使用前导之前的间距和之后的间距来定义行之间的空格?