0

次のコードを使用して、iTextSharp ライブラリ バージョン 5.4.2 を使用して PDF ドキュメントを生成しています。

// Create a Document object
        var document = new Document(PageSize.A4, 50, 50, 25, 25);

        // Create a new PdfWriter object, specifying the output stream
        var output = new MemoryStream();
        var writer = PdfWriter.GetInstance(document, output);

        // Open the Document for writing
        document.Open();



    //Gets System.Web.UI.WebControls.Table
    //Returns HTML table with 4 coulms

        var flowsheetTable = GetTable(report);


        var stringWriter = new StringWriter();
        using (var htmlWriter = new HtmlTextWriter(stringWriter))
        {
            flowsheetTable.RenderControl(htmlWriter);
        }


        List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(stringWriter.ToString()), null);
        for (int k = 0; k < htmlarraylist.Count; k++)
        {
            document.Add((IElement)htmlarraylist[k]);
        }


        document.Close();

        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", "attachment;filename=Receipt-test.pdf");
        Response.BinaryWrite(output.ToArray());

メソッド GetTable() は、4 つの列を持つ System.Web.UI.WebControls.Table を返します。テーブルの最初の列の幅を修正する方法はありますか? 最初の列が全幅の 40% になるようにします。

ありがとうございました

4

1 に答える 1

1

オブジェクトのコレクションをループしている間に、IElementそれぞれを個別にキャスト、検査、および変更できます。あなたの場合、次のようなことをしたいかもしれません:

//Sample table with four columns
var sampleTable = "<table><tr><td>A</td><td>B</td><td>C</td><td>D</td></tr></table>";

//Parse sample HTML to collection if IElement objects
List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(sampleTable), null);

//Declare variables for use below
IElement ele;
PdfPTable t;

//Loop through the collection
for (int k = 0; k < htmlarraylist.Count; k++) {

    //Get the individual item (no cast should be needed)
    ele = htmlarraylist[k];

    //If the item is a PdfPTable
    if (ele is PdfPTable) {

        //Get and cast it
        t = ele as PdfPTable;

        //Set the widths (40%/20%/20%/20%)
        t.SetWidths(new float[] { 4, 2, 2, 2 });

    }

    //Regardless of what was done above, add the object to our document
    document.Add(ele);
}
于 2013-07-29T13:09:53.890 に答える