iTextSharp 更改列中所有文本的字体
iTextSharp change font of all text in column
我正在创建一个 PDF,它采用 html 的字符串,然后使用 HTMLWorker.ParseToList 并将每个元素添加到列中。无论如何我都无法更改字体。
我试图在添加时将字体添加到每个元素:
el.Font = 次;
但这会引发错误。
下面是我当前的代码。我希望所有文本都显示在 Times Roman 中。
var specialConditionsText = "<p>Special Conditions</p><p>A. More</p><p>B. Section B</p><p>C. Section C</p><ul><li>Bullet 1</li><li>Bullet 2</li></ul><ol><li>Number list 1</li><li>Number List 2<ol><li>Number list sub</li></ol></li></ol><p><br></p>";
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, "14");
styles.LoadTagStyle(HtmlTags.OL, HtmlTags.INDENT, "14");
styles.LoadTagStyle(HtmlTags.LI, HtmlTags.LEADING, "18");
BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
Font times = new Font(bfTimes, 12, Font.NORMAL);
using (StringReader sr = new StringReader(specialConditionsText))
{
//Get our raw PdfContentByte object letting us draw "above" existing content
PdfContentByte cb = pdfStamper.GetOverContent(11);
//Create a new ColumnText object bound to the above PdfContentByte object
ColumnText ct = new ColumnText(cb);
//Create a single column object spanning the entire page
ct.SetSimpleColumn(60, 190, 570, 720);
//Convert our HTML to iTextSharp elements
List<IElement> elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
//Loop through each element
foreach (IElement el in elements)
{
//Add the element to the ColumnText
el.Font = times;
ct.AddElement(el);
}
ct.Go();
}
我找到的答案是:
FontFactory.RegisterDirectories();
styles.LoadTagStyle("body", "face", "times new roman");
styles.LoadTagStyle("body", "encoding", "Identity-H");
我使用的最终代码如下所示。希望对大家有帮助。
specialConditionsText = HttpUtility.HtmlDecode(specialConditionsText);
specialConditionsText = specialConditionsText.Replace("<br>", "<br />");
specialConditionsText = specialConditionsText.Replace("<p> </p>", "<br />");
FontFactory.RegisterDirectories();
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, "14");
styles.LoadTagStyle(HtmlTags.OL, HtmlTags.INDENT, "14");
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.LEADING, "13");
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONTSIZE, "11");
styles.LoadTagStyle("body", "face", "times new roman");
styles.LoadTagStyle("body", "encoding", "Identity-H");
using (StringReader sr = new StringReader(specialConditionsText))
{
//Get our raw PdfContentByte object letting us draw "above" existing content
PdfContentByte cb = pdfStamper.GetOverContent(11);
//Create a new ColumnText object bound to the above PdfContentByte object
ColumnText ct = new ColumnText(cb);
//Create a single column object spanning the entire page
ct.SetSimpleColumn(85, 192, 530, 720);
//Convert our HTML to iTextSharp elements
List<IElement> elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
//Loop through each element
foreach (IElement el in elements)
{
//Add the element to the ColumnText
ct.AddElement(el);
}
ct.Go();
}
您可以使用以下代码添加所需字体的文本。这里使用addtext函数代替addelement,然后使用phrase(甚至可以使用chunk)。
ct.AddText(new Phrase(el.ToString(), times));
您可以使用其中一种方法 (FontFactory.GetFont、BaseFont.CreateFont) 来创建所需的字体样式。
查看下面的 link 以了解有关使用 itextsharp 格式化的更多详细信息:
http://www.mikesdotnetting.com/article/89/itextsharp-page-layout-with-columns
我正在创建一个 PDF,它采用 html 的字符串,然后使用 HTMLWorker.ParseToList 并将每个元素添加到列中。无论如何我都无法更改字体。
我试图在添加时将字体添加到每个元素: el.Font = 次; 但这会引发错误。
下面是我当前的代码。我希望所有文本都显示在 Times Roman 中。
var specialConditionsText = "<p>Special Conditions</p><p>A. More</p><p>B. Section B</p><p>C. Section C</p><ul><li>Bullet 1</li><li>Bullet 2</li></ul><ol><li>Number list 1</li><li>Number List 2<ol><li>Number list sub</li></ol></li></ol><p><br></p>";
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, "14");
styles.LoadTagStyle(HtmlTags.OL, HtmlTags.INDENT, "14");
styles.LoadTagStyle(HtmlTags.LI, HtmlTags.LEADING, "18");
BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
Font times = new Font(bfTimes, 12, Font.NORMAL);
using (StringReader sr = new StringReader(specialConditionsText))
{
//Get our raw PdfContentByte object letting us draw "above" existing content
PdfContentByte cb = pdfStamper.GetOverContent(11);
//Create a new ColumnText object bound to the above PdfContentByte object
ColumnText ct = new ColumnText(cb);
//Create a single column object spanning the entire page
ct.SetSimpleColumn(60, 190, 570, 720);
//Convert our HTML to iTextSharp elements
List<IElement> elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
//Loop through each element
foreach (IElement el in elements)
{
//Add the element to the ColumnText
el.Font = times;
ct.AddElement(el);
}
ct.Go();
}
我找到的答案是:
FontFactory.RegisterDirectories();
styles.LoadTagStyle("body", "face", "times new roman");
styles.LoadTagStyle("body", "encoding", "Identity-H");
我使用的最终代码如下所示。希望对大家有帮助。
specialConditionsText = HttpUtility.HtmlDecode(specialConditionsText);
specialConditionsText = specialConditionsText.Replace("<br>", "<br />");
specialConditionsText = specialConditionsText.Replace("<p> </p>", "<br />");
FontFactory.RegisterDirectories();
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, "14");
styles.LoadTagStyle(HtmlTags.OL, HtmlTags.INDENT, "14");
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.LEADING, "13");
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONTSIZE, "11");
styles.LoadTagStyle("body", "face", "times new roman");
styles.LoadTagStyle("body", "encoding", "Identity-H");
using (StringReader sr = new StringReader(specialConditionsText))
{
//Get our raw PdfContentByte object letting us draw "above" existing content
PdfContentByte cb = pdfStamper.GetOverContent(11);
//Create a new ColumnText object bound to the above PdfContentByte object
ColumnText ct = new ColumnText(cb);
//Create a single column object spanning the entire page
ct.SetSimpleColumn(85, 192, 530, 720);
//Convert our HTML to iTextSharp elements
List<IElement> elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, styles);
//Loop through each element
foreach (IElement el in elements)
{
//Add the element to the ColumnText
ct.AddElement(el);
}
ct.Go();
}
您可以使用以下代码添加所需字体的文本。这里使用addtext函数代替addelement,然后使用phrase(甚至可以使用chunk)。
ct.AddText(new Phrase(el.ToString(), times));
您可以使用其中一种方法 (FontFactory.GetFont、BaseFont.CreateFont) 来创建所需的字体样式。
查看下面的 link 以了解有关使用 itextsharp 格式化的更多详细信息: http://www.mikesdotnetting.com/article/89/itextsharp-page-layout-with-columns