调整iTextSharp PDF中列太多的表的大小

本文关键字:太多 iTextSharp PDF 调整 | 更新日期: 2023-09-27 18:28:58

我尝试在ASP.NET C#中生成一个iTextSharp PDF文件,并在该PDF文件中放入一个html表。问题是,只有当html表有几列时,该方法才有效。一旦我的表有更多的列,我就不会把所有的信息都放在pdf文件中——它们只是简单地剪切掉。

有没有一种方法可以自动调整表格的大小,这样我就可以把表格的所有信息都放到pdf文件中?我已经在使用pdf页面的landscape模式下工作了。

这是我生成PDF文件的代码:

//Create a byte array that will eventually hold our final PDF
        Byte[] bytes;
        //Boilerplate iTextSharp setup here
        //Create a stream that we can write to, in this case a MemoryStream
        using (MemoryStream ms = new MemoryStream())
        {
            //Create an iTextSharp Document which is an abstraction of a PDF but **NOT** a PDF
            using (Document doc = new Document(PageSize.A4.Rotate(), 10f, 10f, 10f, 0f))
            {
                //Create a writer that's bound to our PDF abstraction and our stream
                using (PdfWriter writer = PdfWriter.GetInstance(doc, ms))
                {
                    //Open the document for writing
                    doc.Open();
                    StringBuilder sb = (StringBuilder)genObjects[1];
                    String tableName = sb.ToString();
                    Table myGenTable = (Table)genObjects[0];
                    String table = genObjects[2].ToString();
                    using (StringReader srHtml = new StringReader(table))
                    {
                        //Parse the HTML
                        iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);
                    }
                    doc.Close();
                }
            }
            //After all of the PDF "stuff" above is done and closed but **before** we
            //close the MemoryStream, grab all of the active bytes from the stream
            bytes = ms.ToArray();
        }
        //Now we just need to do something with those bytes.
        Response.ContentType = "application/pdf";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + friendlyName+ ".pdf");
        Response.BinaryWrite(bytes);

字符串表返回正确的html字符串(标题+html表)。

如果没有任何解决方案,是否有解决此问题的方法?

调整iTextSharp PDF中列太多的表的大小

以下是我的做法,对于那些可能仍在挣扎的人来说。使用其他人的建议来编辑实际的html,我将CSS宽度属性添加到表中。这样可以确保它合身。您可能需要添加字体大小或其他CSS属性来使其看起来不错。只需将它们添加到width属性之后。

    string addCssStyling(string srhtml, string fontsize)
    {
        var styled = $"<style>table{{width: 100%; font-size: {fontsize};}}</style>" + srhtml; 
        return styled;
    }