Сырой HTML - как измерить ширину / высоту на сервере? - PullRequest
1 голос
/ 07 октября 2009

У меня есть веб-приложение, которое позволяет пользователям загружать целые файлы .html на мой сервер. Я хочу «определить» ширину / высоту загруженного HTML и сохранить его в моей БД.

До сих пор я безуспешно пытался использовать элемент управления System.Windows.Forms.WebBrowser - считывая файл в строку, загружая его в browser.document:

 _browser = new WebBrowser();
 _browser.Navigate("about:Blank");
 _browser.Document.OpenNew(true);
 _browser.Document.Write(html);

Проверка различных свойств объекта _browser (документ, окно и т. Д.), По-видимому, всегда по умолчанию имеет размер 250x250.

Я пытался поместить различные декларации размера CSS в файл .html, но все равно тоже самое.

  • Является единственным вариантом для проверки соответствия строки HTML и регулярного выражения CSS свойства?
  • Как бы вы надежно определили, какой будет ширина / высота визуализации для рассматриваемого документа?

Помните , файл .html может содержать или не содержать свойства css. Возможно, пользователь использует устаревшие устаревшие теги, такие как

<body width="500">

против

<style>
 body{ width: 400px; }
<body>

и т.д.

Ответы [ 3 ]

2 голосов
/ 07 октября 2009

Даже если бы вы могли зафиксировать объявленную ширину с помощью проверки спецификаций CSS и / или HTML-тегов, вы вряд ли бы получили визуализированную ширину. Высота будет еще хуже, так как текст переносится.

Я думаю, вы можете рассмотреть другой подход. Тебе это действительно нужно? Какое требование вы пытаетесь удовлетворить? Можно ли это сделать по-другому?

1 голос
/ 07 октября 2009

Как вы обнаружили, вы не сможете использовать элемент управления WebBrowser, поскольку сообщаемые высота и ширина - это высота и ширина самого элемента управления, а не документа внутри элемента управления.

Что вам действительно нужно, так это написать свой собственный механизм парсинга HTML, чтобы рассчитать это самостоятельно. Вам нужно будет рассчитать все линии, определить высоту линии и т. Д.

Это действительно стоит усилий? Вам нужно будет сделать так много предположений, что такой расчет будет в значительной степени бесполезным ... Различия в рендеринге в разных браузерах, у клиентов, у которых установлен размер текста, отличный от значения по умолчанию, и, возможно, десятки других. Даже разрешение экрана будет иметь значение, потому что, как вы можете видеть в этом параграфе, текст имеет тенденцию переноситься. Вам нужно вычислить, где текст будет переноситься, чтобы вычислить, сколько строк текста будет отображаться. Вам необходимо учитывать размеры шрифта ...

Все это говорит о том, что теоретически это должно быть выполнимо, и механика для вычисления всего этого будет теми же понятиями, которые вы использовали бы для печати на принтере. Вычисление высоты страницы и выяснение, где вы находитесь на странице, - это стандартная процедура при печати вручную.

Вот статья, которая объясняет основы. Вам решать, стоит ли это усилий.

http://msdn.microsoft.com/en-us/magazine/cc188767.aspx

1 голос
/ 07 октября 2009

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

Работа с Interhet Explorer поднимает проблемы безопасности; убедитесь, что IE всегда обновляется на вашем сервере, и что его настройки безопасности в учетной записи ASP .Net максимально строгие. (Я не уверен, как это сделать)

Попробуйте _browser.Document.Body.OffsetRectangle.Size.

РЕДАКТИРОВАТЬ : Обратите внимание, что, если другие люди указали, высота будет также зависеть от ширины, из-за переноса текста и т. Д., Поэтому вы должны установить ширину элемента управления IE на соответствующую значение.

...