0

入力:2次元マトリックス(20000x20000)
出力:テーブル付きのpdfドキュメント、マトリックスデータを含む

フォントサイズを拡大縮小せずに、テーブルを水平方向と垂直方向に数ページに分割するにはどうすればよいですか?現在、1ページのドキュメントしか生成できません。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");
4

1 に答える 1

0

水平方向に分割する方法はないと思います-それは未定義の動作につながる可能性があります。実際、コンポーネントは「仮想」ブラウザで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リーダーの印刷機能に依存することもできます。

垂直分割は自動的に行われます。実際には、目的の高さを指定したときに無効にしました。「auto」を渡すと、コンテンツは自動的に複数のページに分割されます。

var htmlToPdfElem = new HtmlToPdfElement(0, 0, PageSize.A4.Width - 20, -1 /*auto*/, htmlStr, null);
于 2012-10-05T11:09:45.637 に答える