0

我正在尝试渲染一个带有图像的 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>
4

1 回答 1

1

如果没有看到实际的 HTML,很难说。基本思想是AddImageUrl/AddImageHtml将填充 的区域Rect,因此要使最终输出中的图像更小,您可以减小Rect(因此Rect小于MediaBox)。

或者,您可以减少width参数。例如:

const string kHtml = "<html><img src='https://encrypted.google.com/images/srpr/logo3w.png'></html>";

// The img gets smaller and smaller....
foreach (var i in Enumerable.Range(1, 5))
{
    using (var doc = new Doc())
    {
        doc.Rect.String = doc.MediaBox.String = "A4";
        doc.AddImageHtml(kHtml, true, 400 * i, true);
        doc.Save(i + ".pdf");
    }
}
于 2012-04-05T02:57:12.407 回答