我正在尝试渲染一个带有图像的 html 页面。
我有一个问题,当前图像的大小似乎翻了一番,我的图像是 304x112,当它渲染为 pdf 时,它是 607x224。
我确实找到了这个
屏幕分辨率通常为 96 dpi。因此,当您在显示器上查看 HTML 页面时,Windows 将以 96 dpi 显示它。
屏幕分辨率和 PDF 72 dpi 分辨率之间的差异意味着 HTML 在打印文档中的显示比在屏幕上显示的要大。
如果您希望两者显示相同的大小,则需要应用 72/96 (0.75) 的比例来弥补这一点。
例如,如果您正在渲染一个为 Width 参数提供 800 值的网页,如果您希望两者显示相同的大小,则需要将 Rect 的宽度设置为 600。
和
PDF 文档主要是基于矢量的。因此,它们实际上并没有 dpi,因为它们与分辨率无关。基于光栅的 PDF 的唯一部分是图像。
HTML 的大多数元素——文本、线条——都是基于矢量的。所以它们与分辨率无关。
呈现网页中图像的分辨率很复杂。假设您有一个由图像标签引用的 300 平方图像。如果您的 Doc.Rect 的宽度与您传递给 AddImageUrl 的宽度相同,那么它将以 72 dpi 呈现。然而,通过改变这两个值之间的比率,图像将被缩放,因此分辨率也会改变。
而且...如果你的300平方在一个宽高为150的img标签中,那么默认分辨率将加倍。
我的问题似乎是那里的第二部分中描述的。
我的最终结果是将输出添加到 a4 纵向页面,以便可以打印(连同文档中的其他文本,但工作正常)。
目前在渲染时我使用这个
doc.MediaBox.String = pageSize;
doc.Rect.String = pageSize;
doc.AddImageHtml(html, true, width, disableCache);
其中页面大小为“A4”,宽度在 addimagehtml 调用中设置为 800。
在设置页面大小后,我尝试将 doc.Rect.Width 设置为 600,并将 addimagehtml 调用的宽度设置为 800,但图像仍然无法正确呈现。
还有什么我想念的吗?
编辑:要转换的页面的 HTML 是这样的:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Workpack</title>
<style>
body { font-family: Arial, Helvetica, sans-serif; }
</style>
</head>
<body style="border: 1px solid black;">
<div style="height: 1100px;">
<div style="position: absolute; top: 50%;">
<div style="text-align: center; width: 780px;" >
<div>
<% if (!string.IsNullOrWhiteSpace(Model.CompanyLogo)){%>
<img src="<%: Url.ToFullyQualifiedUrl(Model.CompanyLogo) %>"/>
<% } %>
</div>
<div>
<h1><%: Model.PlantName %></h1>
</div>
<div style="font-size: 15pt; font-weight: bold;">
<h1><%: Model.WorkpackTitle %> - <%: Model.WorkPackNumber %></h1>
</div>
</div>
</div>
</div>
</body>
</html>