使用 MeasureString 的 Pdf 横向方向

Pdf landscape orientation using MeasureString

我正在使用 wkHTMLtoPDF,我想根据 HTML 中 headers 的长度更改 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 构建一个内部有 table 的 PDF。 我得到 table 列(例如:Col1、Col2)并删除标签(例如:Col1Col2)。 接下来我想计算该字符串结果的大小(以像素为单位)(使用具有指定文本大小的字体),如果该大小超过 A4 纵向大小,则将 PDF 旋转为横向。

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

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

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

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