0

画像を含む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>
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 に答える