0

PDF フォームを自動入力しようとしましたが、PDF の上に描画できません。そこで、フォームのイメージを作成し、ドローストリング メソッドを使用して塗りつぶしました。問題は、印刷しようとすると印刷レビューでドキュメントが正しく表示されていても、用紙サイズよりも大きなドキュメントが拡大されることです。理由は想像できません。これが私のコードです:

private void buttonPrint_Click(object sender, EventArgs e)
    {
        Image img = panelForm.BackgroundImage;
        printDocumentForm.DefaultPageSettings.PaperSize = new PaperSize("A4", img.Width, img.Height);
        printPreviewForm.Document = printDocumentForm;
        printPreviewForm.ShowDialog();
    }

    private void printDocumentForm_PrintPage(object sender, PrintPageEventArgs e)
    {

        Image img = panelForm.BackgroundImage;
        Image copy = (Image) img.Clone();
        // I've added some drawstring methods here to fill the blanks
        // but I removed them in this example to save some space
        e.Graphics.DrawImage(copy, new Point(0, 0));
    }

プレビュー ウィンドウには、空白が埋められた正しいドキュメントが表示されます。しかし、プレビュー ウィンドウで印刷ボタンを押すと、拡大されたドキュメントが表示されます... 編集: .bmp ファイルをペイントで開いたときに、画像を正しく印刷できることを追加する必要があります。私のプロジェクトでは、明らかな理由もなく、同じ画像が大きくなり、ぼやけて表示されます。プリンターが画像を引き伸ばすのはなぜですか? また、プレビュー ウィンドウに正しいサイズの画像が表示されるのはなぜですか?

4

1 に答える 1

0

これは私が思いついたものです:

        printDoc.DefaultPageSettings.PaperSize=printDoc.PrinterSettings.PaperSizes[4];
        // this sets the printPreview document size to A4. The previously presented code doesn't
        Image img = panelDM.BackgroundImage; // this is what I want to print
        Rectangle bounds = e.PageBounds;            
        int mx = 30;
        int my = 30; // add borders
        int x = img.Width;
        int y = img.Height;
        int xp = bounds.Width*9/10; // for some reason (I can't explain why)
        int yp = bounds.Height*9/10; // 100% appears larger than the page...
        int xr, yr;
        if (x > y)
        {
            xr = xp-mx;
            yr = xr*y/x;
        }
        else
        {
            yr = yp-my;
            xr = yr*x/y;
        }
        Size size = new Size(xr,yr);
        Image copy = (Image)img.Clone();            

        e.Graphics.DrawImage(copy, new Rectangle(new Point (mx,my), size));

そのため、defaultpagesettings.pagesize プロパティを変更して、printpreview のページ サイズを設定する必要があると考えました。カスタム用紙サイズが機能しなかった理由がわかりません。次に、DrawImage メソッドで画像サイズを設定する必要があります。最後にもう 1 つ: 元の画像のように鮮明に表示されません。使えますがぼやけています。

于 2013-04-25T16:31:23.747 に答える