2016-10-11 42 views
0

这是我看到的标题:iTextSharp的头HTML只显示一行

enter image description here

这是我的实际标题:

enter image description here

这是我的代码:

public override void OnStartPage(PdfWriter writer, Document document) 
    { 
     base.OnStartPage(writer, document); 
     ColumnText ct = new ColumnText(writer.DirectContent); 
     XMLWorkerHelper.GetInstance().ParseXHtml(new ColumnTextElementHandler(ct), new StringReader((string)System.Web.HttpContext.Current.Session["encabezado"])); 
     int? columnas = ct.LinesWritten; 
     int? columnas2 = ct.LinesWritten; 

     ct.SetSimpleColumn(document.Left, document.Top, document.Right, document.GetTop(-20), 10, Element.ALIGN_MIDDLE); 
     ct.Go(); 
    } 

回答

1

当您将矩形定义为在ColumnText对象,你不提供足够的空间:

document.Left, document.Top, document.Right, document.GetTop(-20) 

你有两段:

<p style="text-align: center;">header Ants Nit: [Nit organizacion]</p> 
<p style="text-align: center;">secon line: [Nombre organizacion]</p> 

你没有定义字体,字体大小或领导,所以默认使用:

Helvetica 
12pt 
18pt 

你有两个段落,每个适合单行线,所以你需要至少36个用户单位,以确保两条线适合在矩形内。

您正在定义一个跨越整个页面宽度的矩形,但只有20个用户单位高。 20个用户单位仅适用于一条线,这与您所看到的一致:只有一条线。

如果你想在两行出现,你需要定义一个更大的矩形,例如:

ct.SetSimpleColumn(
    document.Left, document.Top, 
    document.Right, document.GetTop(-40)); 

现在是时候对你说:等一下!我有两个额外的问题!

  1. 上午定义的领先,你不看到SetSimpleColumn()方法的参数10?是的,我确实看到了这个参数,但[1]你的字体大小为12,而小于字体大小的字体会导致难看的文本,[2]我怀疑XML Worker在复合模式下添加段落,在这种情况下,该栏目的领导被忽略,以支持段落的领导。对齐方式也是如此(您在HTML中使用text:align: center来实现此目的),这就是为什么我从setSimpleColumn()方法中删除了两个未使用的参数。

  2. 如果我按照你的建议,我的标题与实际内容重叠。这是真实的,因为默认顶部边距高达36个用户单位,并且您定义了一个标头矩形,其高度为40个用户单位。如果您想避免您的上边距与实际内容重叠,您将不得不扩大上边距。

我有一个反问题:为什么你要用XML Worker来创建标题。您的标题非常简单。我不明白你为什么想要使用两个<p>标签来定义标题。只需定义两个Paragraph对象,就可以节省CPU解析HTML的麻烦。

最后:我必须指出你正在犯的一个错误。您不应该在OnStartPage()方法中添加内容,只能在OnEndPage()方法中添加内容。

在本文档中,我们说得很清楚,这是禁止 添加在onStartPage()方法内容;内容只能在onEndPage()方法中加入 。我们也很清楚地知道传递给页面事件方法的对象 只读仅用于传递页面事件方法。这是禁止使用document.add()即使在onEndPage()方法。

不幸的是,许多开发商完全忽略文档, 导致问题,例如:

此外,您可能会删除有关LinesWritten的奇怪行。我不明白他们为什么会有用。

+0

:DD感谢朋友,标题内容就是一个例子,内容将由客户使用富文本编辑器编辑,您的答案解决了我的问题,非常感谢。 –

+0

好的,在这种情况下,使用HTML是有意义的。如果解决了您的问题,请接受答案。 (请参阅分数下的复选标记。) –