Альбомная ориентация PDF с использованием MeasureString

Я использую wkHTMLtoPDF и хочу изменить ориентацию в PDF в зависимости от длины заголовков в HTML, но я не уверен, что это правильный способ сделать это.

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;
}

Примечание. Этот код находится в библиотеке, поэтому я использовал этот вопрос для измерения строки.

Обновить

Если коротко:

Я ищу лучшую практику реализации проблемы.

Обзор проблемы:

Я создаю из HTML PDF-файл, внутри которого есть таблица. Я получаю столбцы таблицы (например: Col1, Col2) и удаляю теги (например: Col1Col2). Затем я хочу рассчитать размер (в пикселях) этого строкового результата (используя шрифт с указанным размером текста), и если этот размер превышает размер портрета A4, поверните PDF в альбомную ориентацию.


person Botea Bogdan    schedule 14.10.2015    source источник
comment
Привет, извините, не могли бы вы расширить свой вопрос, я не понял вашей проблемы. Вы ищете лучшую практику именно для чего?   -  person Payedimaunt    schedule 22.10.2015
comment
Я обновил вопрос. Не стесняйтесь спрашивать, если вы что-то не понимаете. Спасибо!   -  person Botea Bogdan    schedule 22.10.2015
comment
Я не нашел точного решения, но ниже я нашел некоторую информацию о том, как найти фактическую область печати. Я надеюсь, что это могло помочь тебе, чувак   -  person Payedimaunt    schedule 23.10.2015


Ответы (1)


Я обнаружил, что наилучшей реализацией этой проблемы является добавление в wkHTMLtoPDF атрибута, который заставит PDF иметь размер A4.

Используемый атрибут: --page-size A4

Также я изменил код, который проверяет, больше ли измеренный размер ширины, чем размер A4.

if(size.Width > (A4Width / 4))
{
    return true;
}
person Botea Bogdan    schedule 23.10.2015