使用MeasureString的Pdf横向方向

时间:2015-10-14 09:22:35

标签: c# pdf graphics wkhtmltopdf export-to-pdf

我正在使用wkHTMLtoPDF,我想根据HTML中标题的长度更改PDF的方向,但我不确定这是否是正确的方法。

private const double A4Width = 2480; // A4 pixel width

景观检测方法

private bool IsLandscape(string html)
{
     int start = html.IndexOf("<th>");
     int end = html.LastIndexOf("</th>") - start;
     string tableHeadings = html.Substring(start, end).Replace("<th>", string.Empty).Replace("</th>", string.Empty);

     FontFamily fontFamily = new FontFamily("Arial");
     Font font = new Font(fontFamily, 13);

     var size = MeasureString(tableHeadings, font);

     if(size.Width > A4Width)
     {
         return true;
     }
     return false;
}

字体计算方法

private SizeF MeasureString(string content, Font font)
{
     SizeF result = SizeF.Empty;

     using (var image = new Bitmap(1,1))
     {
         using (var g = Graphics.FromImage(image))
         {
            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            result = g.MeasureString(content, font, int.MaxValue, StringFormat.GenericTypographic);
         }
     }
     return result;
}

注意:此代码位于库中,因此我使用this问题来测量字符串。

更新

简短:

我正在寻找实施该问题的最佳做法。

问题摘要:

我正在从HTML构建一个内部有一个表的PDF。 我得到表格列(例如:Col1,Col2)并删除标签(例如:Col1Col2)。 接下来,我想计算该字符串结果的大小(以px为单位)(使用具有指定文本大小的Font),如果该大小超出A4纵向大小,则将PDF旋转为横向。

1 个答案:

答案 0 :(得分:1)

我发现此问题的最佳实现是向wkHTMLtoPDF添加一个属性以强制PDF为A4大小。

使用的属性:--page-size A4

此外,我更改了检查测量宽度尺寸是否大于A4尺寸的代码。

if(size.Width > (A4Width / 4))
{
    return true;
}