List itextsharp无法完全解析HTML有序列表
我正在使用itextsharp 5.3.2。我使用VS2010创建了一个自定义操作,以从SharePoint列表项生成pdf。字符串“value”来自增强的富文本多行文本字段。在大多数情况下,下面的方法非常适合使用html内容创建PdfPCell,然后我可以将其添加到文档中的表中。我用这篇文章的答案最初写下了我的方法: 我遇到了一个奇怪的问题,html列表是有序的还是无序的。如果列表的深度超过3级,并且在每一级都有多个项,那么html列表在第一级1项之后将无法解析。但是,在正确处理有序列表并将其添加到pdf中之后,还会有更多内容 我已将方法的内容包装在一个try-catch中,但没有捕获任何异常 以下是我的增强型富文本字段的HTML源代码:List itextsharp无法完全解析HTML有序列表,list,pdf-generation,itextsharp,List,Pdf Generation,Itextsharp,我正在使用itextsharp 5.3.2。我使用VS2010创建了一个自定义操作,以从SharePoint列表项生成pdf。字符串“value”来自增强的富文本多行文本字段。在大多数情况下,下面的方法非常适合使用html内容创建PdfPCell,然后我可以将其添加到文档中的表中。我用这篇文章的答案最初写下了我的方法: 我遇到了一个奇怪的问题,html列表是有序的还是无序的。如果列表的深度超过3级,并且在每一级都有多个项,那么html列表在第一级1项之后将无法解析。但是,在正确处理有序列表并将其
<div class="ExternalClassAF9636A4B56F497BB4B962AE682E5CA1"><ol><li>test item level 1</li>
<ol><li>test subitem level 1.1</li>
<ol><li>test subitem level 1.1.1</li>
<li>test subitem level 1.1.2</li>
<li>test subitem level 1.1.3</li></ol>
<li>test subitem level 1.2 <ol><li>test subitem level 1.2.1</li>
<li>test subitem level 1.2.2</li>
<li>test subitem level 1.2.3</li></ol></li>
<li>test subitem level 1.3 <ol><li>test subitem level 1.3.1</li>
<li>test subitem level 1.3.2</li>
<li>test subitem level 1.3.3</li></ol></li></ol>
<li>test item level 2 <ol><li>test subitem level 2.1<ol><li>test subitem level 2.1.1</li>
<li>test subitem level 2.1.2</li>
<li>test subitem level 2.1.3</li></ol></li>
<li>test subitem level 2.2<ol><li>test subitem level 2.2.1</li>
<li>test subitem level 2.2.2</li>
<li>test subitem level 2.2.3</li></ol></li>
<li>test subitem level 2.3<ol><li>test subitem level 2.3.1</li>
<li>test subitem level 2.3.2</li>
<li>test subitem level 2.3.3</li></ol></li></ol></li>
<li>test item level 3 <ol><li>test subitem level 3.1<ol><li>test subitem level 3.1.1</li>
<li>test subitem level 3.1.2</li>
<li>test subitem level 3.1.3</li></ol></li>
<li>test subitem level 3.2<ol><li>test subitem level 3.2.1</li>
<li>test subitem level 3.2.2</li>
<li>test subitem level 3.2.3</li></ol></li>
<li>test subitem level 3.3<ol><li>test subitem level 3.3.1</li>
<li>test subitem level 3.3.2</li>
<li>test subitem level 3.3.3</li></ol></li></ol></li></ol></div>
<p>Some more content after the ordered list.</p>
测试项目1级
测试子项1.1级
测试子项级别1.1.1
测试子项级别1.1.2
测试子项级别1.1.3
测试子项1.2级 测试子项1.2.1级
测试子项级别1.2.2
测试子项级别1.2.3
测试子项1.3级 测试子项1.3.1级
测试子项级别1.3.2
测试子项级别1.3.3
测试项目2级 测试子项目2.1级 测试子项目2.1.1级
测试子项2.1.2级
测试子项2.1.3级
测试子项2.2级 测试子项2.2.1级
测试子项级别2.2.2
测试子项2.2.3级
测试子项2.3级 测试子项2.3.1级
测试子项2.3.2级
测试子项2.3.3级
测试项目3级 测试子项目3.1级 测试子项目3.1.1级
测试子项级别3.1.2
测试子项级别3.1.3
测试子项3.2级 测试子项3.2.1级
测试子项级别3.2.2
测试子项级别3.2.3
测试子项3.3级 测试子项3.3.1级
测试子项级别3.3.2
测试子项级别3.3.3
在有序列表之后还有一些内容
以下是我将值传递到的方法,以返回PdfPCell:
const float INDENT = 25f;
...
private static PdfPCell createHtmlCell(string value)
{
PdfPCell cell = new PdfPCell();
cell.BorderWidth = 0f;
cell.PaddingLeft = 10f;
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, INDENT.ToString());
styles.LoadTagStyle(HtmlTags.OL, HtmlTags.INDENT, INDENT.ToString());
styles.LoadTagStyle(HtmlTags.LI, HtmlTags.INDENT, INDENT.ToString());
using (StringReader sr = new StringReader(value))
{
List<IElement> html = HTMLWorker.ParseToList(sr, styles);
foreach (IElement e in html)
{
foreach (Chunk c in e.Chunks)
c.Font.Size = 11f;
if (e is Paragraph)
{
Paragraph p = (Paragraph)e;
p.FirstLineIndent = INDENT / 2;
p.SpacingAfter = 5f;
}
cell.AddElement(e);
}
}
return cell;
}
const float INDENT=25f;
...
私有静态PdfPCell createHtmlCell(字符串值)
{
PdfPCell cell=新的PdfPCell();
cell.BorderWidth=0f;
cell.PaddingLeft=10f;
样式表样式=新样式表();
styles.LoadTagStyle(HtmlTags.UL,HtmlTags.INDENT,INDENT.ToString());
LoadTagStyle(HtmlTags.OL,HtmlTags.INDENT,INDENT.ToString());
LoadTagStyle(HtmlTags.LI,HtmlTags.INDENT,INDENT.ToString());
使用(StringReader sr=新StringReader(值))
{
List html=HTMLWorker.parsetList(sr,样式);
foreach(用html表示的IELENT e)
{
foreach(块c在块e中)
c、 字体大小=11f;
如果(e)段为
{
第p段=(e)段;
p、 FirstLineIndent=INDENT/2;
p、 间隔时间=5f;
}
单元。附加元素(e);
}
}
返回单元;
}
以下是我的pdf结果:
谢谢您的帮助。我建议您首先清理HTML。您的1.1 OL在父LI关闭后开始,而不是之前。这可能会弄乱iTextSharp的HTML解析器。谢谢Chris。我也曾怀疑过。不幸的是,这是SharePoint生成的HTML。所以我的问题可能不是“为什么itextsharp失败了?”而是“为什么Microsoft SharePoint给了我格式不正确的HTML?”我现在手头没有IDE,但是你能先尝试用itextsharp解析有效的HTML,看看这是否如预期的那样有效吗?如果仍然不起作用,可以在这里更新你的帖子。如果有效代码有效,那么我将关闭此线程并作为特定的SharePoint问题重新发布。不幸的是,我对SharePoint了解不多,无法帮助您解决Hello thewire,我对嵌套
- 和
- 也有同样的问题。在嵌套视图中打印不正确。它仅将所有标记打印为父级。你找到解决办法了吗?请帮帮我。谢谢