Pdf generation iTextSharp SetListSymbol不工作
我正在尝试用iTextSharp生成的PDF设置样式 每当我试图将符号设置为列表项时,Pdf generation iTextSharp SetListSymbol不工作,pdf-generation,itextsharp,Pdf Generation,Itextsharp,我正在尝试用iTextSharp生成的PDF设置样式 每当我试图将符号设置为列表项时,SetListSymbol似乎对我不起作用 下面是我使用的代码: var elements = HTMLWorker.ParseToList(overviewReader,null); foreach (var element in elements) { //element var list = element as List; if (list != null) {
SetListSymbol
似乎对我不起作用
下面是我使用的代码:
var elements = HTMLWorker.ParseToList(overviewReader,null);
foreach (var element in elements)
{
//element
var list = element as List;
if (list != null)
{
//list.Symbol.GetImage();
list.SetListSymbol("\u25A0");
list.IndentationLeft = 20f;
doc.Add(list);
}
else
{
doc.Add(element);
}
}
iText和iTextSharp中的
HTMLWorker
通过iTextSharp.text.html.simpleparser.StyleSheet
支持一些非常有限的“样式表”。这些样式表松散地基于HTML/CSS属性,但只是最基本的(想想HTML3.2)
您要做的三件主要事情是(1)加载字体,(2)创建指向该字体的样式表
,(3)将样式表
绑定到HTMLWorker
。我将从我的系统中部分地提取一些代码
iTextSharp不会自动在整个系统中搜索字体,因此您需要手动注册它们。(实际上,有一种方法可以调用并告诉iTextSharp猜测加载字体,但这要快得多。)
步骤1,加载字体,在本例中为Curlz
//Path to our font
string OurFont = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "CURLZ___.TTF");
//Register the font with iTextSharp
iTextSharp.text.FontFactory.Register(OurFont);
第2步,创建一个样式表
,并将其指向我们的字体。我还将设置一些其他属性来展示它们
//Create a new stylesheet
iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
//Set the default body font to our registered font's internal name
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.FACE, "Curlz MT");
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.COLOR, "FF0000");
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.SIZE, "50");
步骤3,将样式表
绑定到我们的HTMLWorker
//Use our StyleSheet from above when parsing
var elements = HTMLWorker.ParseToList(overviewReader, ST);
下面是一个以iTextSharp 5.2.0为目标的C#WinForms应用程序,它展示了上述所有功能
using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;
namespace WindowsFormsApplication2 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
//Path to our font
string FontArial = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "CURLZ___.TTF");
//Register the font with iTextSharp
iTextSharp.text.FontFactory.Register(FontArial);
//Create a new stylesheet
iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
//Set the default body font to our registered font's internal name
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.FACE, "Curlz MT");
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.COLOR, "FF0000");
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.SIZE, "50");
//Sample HTML
var html = @"<ul><li>Test</li></ul>";
//File to output
var outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf");
//Basic PDF creation, nothing special here
using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
using (Document doc = new Document(PageSize.LETTER)) {
using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) {
doc.Open();
//Bind a reader to our HTML
using (StringReader overviewReader = new StringReader(html)) {
//Use our StyleSheet from above when parsing
var elements = HTMLWorker.ParseToList(overviewReader, ST);
//Loop through each element
foreach (var element in elements) {
//See if the element is a list item
var list = element as List;
if (list != null) {
//Set some properties
list.SetListSymbol("\u25A0");
list.IndentationLeft = 20f;
}
//Add the element to the document
doc.Add(element);
}
}
doc.Close();
}
}
}
this.Close();
}
}
}
使用系统;
使用System.IO;
使用System.Windows.Forms;
使用iTextSharp.text;
使用iTextSharp.text.html.simpleparser;
使用iTextSharp.text.pdf;
命名空间Windows窗体应用程序2{
公共部分类Form1:Form{
公共表格1(){
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e){
//我们字体的路径
string FontArial=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts),“CURLZ_u__;uf”);
//使用iTextSharp注册字体
iTextSharp.text.FontFactory.Register(FontArial);
//创建一个新的样式表
iTextSharp.text.html.simpleparser.StyleSheet ST=new iTextSharp.text.html.simpleparser.StyleSheet();
//将默认正文字体设置为注册字体的内部名称
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI,iTextSharp.text.html.HtmlTags.FACE,“Curlz MT”);
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI,iTextSharp.text.html.HtmlTags.COLOR,“FF0000”);
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI,iTextSharp.text.html.HtmlTags.SIZE,“50”);
//示例HTML
var html=@“- 测试
”;
//要输出的文件
var outputFile=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),“Test.pdf”);
//基本的PDF创建,这里没有什么特别的
使用(FileStream fs=newfilestream(outputFile,FileMode.Create,FileAccess.Write,FileShare.None)){
使用(文档文档=新文档(页面大小.字母)){
使用(PdfWriter writer=PdfWriter.GetInstance(doc,fs)){
doc.Open();
//将阅读器绑定到我们的HTML
使用(StringReader概览阅读器=新的StringReader(html)){
//解析时使用上面的样式表
var elements=HTMLWorker.parsetList(概览阅读器,ST);
//循环遍历每个元素
foreach(元素中的var元素){
//查看元素是否为列表项
var list=元素作为列表;
如果(列表!=null){
//设置一些属性
list.SetListSymbol(“\u25A0”);
list.IndentationLeft=20f;
}
//将元素添加到文档中
单据新增(要素);
}
}
doc.Close();
}
}
}
这个。关闭();
}
}
}
List objects=HTMLWorker.parsetList(新的StringReader(格式),null)
作为补充说明,HTMLWorker已经停止使用,取而代之的是可以发布它不能使用的HTML。我刚刚用
- 测试
试过了,效果如预期。另外,请记住,您使用的任何字体都必须支持该符号。@ChrisHaas我认为您的建议是可能的,但是我正在努力找到一种很好的方法来设置字体以列出项目,您能给我指出一个方向吗?
foreach (IElement element in objects)
{
List list = new List();
list.SetListSymbol("\u2022");
list.IndentationLeft = 20f;
list.Add(element);
if (list.Chunks.Count == 0)
{
doc1.Add(element);
}
else
{
doc1.Add(list);
}
}