2012-04-04 95 views
0

我想呈现一个HTML页面中的图像。abcpdf HTML图像拉伸

我有一个问题,当前图像的大小似乎变得越来越多,我的图像是304x112,当它呈现为pdf时,它是607x224。

我没有找到这个

屏幕分辨率通常为96 dpi的。因此,当您在显示器上查看HTML页面 时,Windows将以96 dpi的分辨率显示它。

屏幕分辨率与PDF分辨率之间的差异意味着HTML在打印文档中显示的大于屏幕上的 。

如果您希望两者的尺寸相同,则需要使用72/96(0.75)的比例来补偿此 。

例如,如果你是渲染网页的宽度参数提供800 一个值,你需要,如果你想都出现相同的大小来设置矩形 的宽度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。

我已经尝试在设置页面大小并将宽度设置为addimagehtml调用800之后将doc.Rect.Width设置为600,但图像仍呈现错误。

还有什么我不见了?

编辑:页面转换的 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> 
+0

我也尝试设置addimagehtml宽度和rect.width都相同,以595和800没有变化 – 2012-04-04 11:40:57

+0

你能不能只使用doc.rendering选项,并设置PDF可72 dpi ?? – davethecoder 2012-04-17 21:13:41

回答

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"); 
    } 
} 
+0

我已经添加了html,它非常简单,没有任何花哨 – 2012-04-05 04:04:11

+0

因此,它应该与上面带有Google徽标的HTML非常相似?如果是这种情况,也许我们可以使用更简单的HTML进行测试。运行上面的代码是否会带来缩放效果,以便您可以解决图像分辨率问题? – kizzx2 2012-04-05 09:22:58

+0

看起来像它确实给了我的缩放效果,现在只是找出正确的值,使其看起来像在网页上查看时一样的大小 – 2012-04-09 22:48:15