2012-10-05 73 views
0

輸入:二維矩陣(20000x20000)
輸出:與表PDF文檔,包含矩陣數據
拆分大表中多個頁面

我怎麼能在幾頁水平和垂直分割表不結垢字體大小?現在我只能生成一個頁面文檔。 Winnovative庫只是縮放字體大小。 現在我使用HtmlToPdfElement對象,但我可以使用任何其他技術,因爲我的輸入數據是矩陣。

Func<string> generateRow =() => 
{ 
    var result = new StringBuilder(10000000); 
    for (var i = 0; i < 100; i++) 
    { 
     result.Append("<tr>"); 
     for (var j = 0; j < 100; j++) 
     { 
      result.Append("<td>" + i + "," + j + "</td>"); 
     } 
     result.Append("</tr>"); 
    } 
    return result.ToString(); 
}; 

var htmlStr = "<html>" + 
       "<head><style>td { border: 1px solid black; padding: 2px; } table { border-collapse: collapse; }</style></head>" + 
       "<body><table style='border-width: 1px; border-color: black; border-style: solid;'>" + 
       generateRow() + 
       "</table></body></html>"; 

var document = new Document(); 
var page1 = document.Pages.AddNewPage(PageSize.A4, new Margins(10, 10, 10, 10)); 

var htmlToPdfElem = new HtmlToPdfElement(0, 0, PageSize.A4.Width - 20, PageSize.A4.Height - 20, htmlStr, null, -1, -1); 
page1.AddElement(htmlToPdfElem); 
document.Save("test.pdf"); 

回答

0

我想沒有辦法水平分割 - 這可能會導致未定義的行爲。實際上,copmponent會嘗試在「虛擬」瀏覽器中呈現您的html。瀏覽器是一種頁面 - 不知道的事情。

因此,在你的情況下,我建議你查看你生成的內容的寬度。例如,確定哪些列切片應該轉到當前頁面。

string generateRow(int pageNo, int colunmsPerPage) => 
{ 
    var i = colunmsPerPage; 
    while(i-- > 0) 
     //add single row with specified columns rage 
     stringData += data[currentRow][colunmsPerPage * pageNo + i]; 
    return stringData; 
}; 

此外,您可以指定大頁面大小,並依靠PDF閱讀器的打印能力。

垂直拆分是自動完成的 - 實際上,當您指定了所需的高度時,您將其禁用。如果您通過「自動」,內容將被自動分割幾頁:

var htmlToPdfElem = new HtmlToPdfElement(0, 0, PageSize.A4.Width - 20, -1 /*auto*/, htmlStr, null); 
+0

我明白了。我必須手動做一些事情才能獲得所需的結果。謝謝。 – Alexander