2009-10-06 3 views
1

У меня есть веб-приложение, которое позволяет пользователям загружать все .html-файлы на мой сервер. Я хочу «определить» ширину/высоту загруженного html и сохранить его в моей БД.Raw 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-файл и все еще одно и то же.

Является единственным вариантом для проверки свойств CSS и регулярных выражений CSS? Как бы вы надежно определяли, какая визуализированная ширина/высота будет иметь этот документ? Помните, что файл .html может содержать или не содержать свойства css. Может быть, пользователь использует старые, устаревшие теги, такие как

<body width="500"> 

против

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

т.д.

+0

Почему? Что вам нужно делать с размером? – SLaks

+0

Краткая история - Sproutcore использует абсолютные позиции для всего – dmose

ответ

1

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

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

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

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

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

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

1

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

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

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

EDIT: Обратите внимание, что попка других люди указали, высота будет зависеть от ширины, из-за перенос текста и т.д., так что вы должны установить ширину элемента управления IE до значения, соответствующего ему.

2

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

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

+2

Хорошие точки, а некоторые веб-страницы будут даже динамически изменять макет ширины холста. Как бы вы справились с этим? –

Смежные вопросы