2016-10-11 75 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是有意義的。如果解決了您的問題,請接受答案。 (請參閱分數下的複選標記。) –