Так вот как я решил это.
Прежде всего, мне нужно было передать высоту HTML-страницы методу генерации pdf, поэтому я добавил ее на страницу, которая будет pdf-ed:
<asp:HiddenField ID="hfHeight" runat="server" />
и в коде:
protected void Page_Init(object sender, EventArgs e)
{
if (!IsPostBack)
{
string scriptKey = "WidhtHeightForPdf";
if (!Page.ClientScript.IsClientScriptBlockRegistered(scriptKey))
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("<script>")
.AppendLine("document.getElementById('" + hfHeight.ClientID + "').value = document.body.clientHeight;")
.AppendLine("</script>");
Page.ClientScript.RegisterStartupScript(typeof(Page), scriptKey, sb.ToString());
}
}
}
Теперь, когда я вызываю метод генерации PDF, я могу передать ему высоту HTML. Как только у меня будет высота, все будет зависеть от расчета ширины «окна просмотра» в формате pdf, чтобы высота соответствовала pdf-странице:
int intHTMLWidth = height.Value * Convert.ToInt32(theDoc.Rect.Width / theDoc.Rect.Height);
А затем укажите параметр BrowserWidth либо через HtmlOptions
из theDoc
:
theDoc.HtmlOptions.BrowserWidth = intHTMLWidth;
или при добавлении URL к theDoc
:
int theID = theDoc.AddImageUrl(url, true, intHTMLWidth, true);
РЕДАКТИРОВАТЬ: Это решает вопрос, поэтому я собираюсь пометить его как ответ. Теперь следующее, что нужно сделать, это создать pdf в режиме protrait или альбомной ориентации на основе ширины и высоты HTML-кода, чтобы на странице pdf использовалось максимальное пространство.