画像を含むHTMLページをレンダリングしようとしています。
現在、画像のサイズが2倍になっているようです。画像は304x112で、PDFにレンダリングすると607x224になります。
私はこれを見つけました
画面の解像度は通常96dpiです。したがって、モニターでHTMLページを表示すると、Windowsはそれを96dpiで表示します。
画面の解像度とPDFの72dpiの解像度の違いは、HTMLが画面よりも印刷ドキュメントで大きく表示されることを意味します。
両方を同じサイズで表示したい場合は、これを補正するために72/96(0.75)のスケールを適用する必要があります。
たとえば、Widthパラメータに値800を指定するWebページをレンダリングする場合、両方を同じサイズで表示するには、Rectの幅を600に設定する必要があります。
と
PDFドキュメントは主にベクターベースです。そのため、解像度に依存しないため、実際にはdpiはありません。ラスターベースのPDFの唯一の部分は画像です。
HTMLのほとんどの要素(テキスト、行)はベクターベースです。したがって、解像度に依存しません。
Webページの画像がレンダリングされる解像度は複雑です。画像タグによって参照される300の正方形の画像があるとします。Doc.Rectの幅がAddImageUrlに渡す幅と同じである場合、これは72dpiでレンダリングされます。ただし、これら2つの値の比率を変更すると、画像が拡大縮小されるため、解像度が変更されます。
そして...300の正方形が幅と高さが150のimgタグにある場合、デフォルトの解像度は2倍になります。
私の問題は、そこの2番目の部分で説明されていることのようです。
私の最終結果は、出力を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>