1

私はコードを書くのは初めてですが、C#を学び、自分の店のためにちょっとした請求書作成プログラムを作っています。請求書であるフォームを印刷する必要があります。インターネットで検索したところ、次のコードが見つかりました。

printForm1.Print(this, PrintForm.PrintOption.ClientAreaOnly);

請求フォームには2つの画像と1つの画像がありgridviewboxます。このコードは請求書を印刷できますが、.xpsファイルの品質は低く、テキストでさえ鮮明に印刷されません。

フォームの印刷品質を上げるにはどうすればよいですか?

4

2 に答える 2

4

はい、あなたが本当に長い腕を持っていない限り、それはよく見えません。問題は、プリンターのピクセル解像度がモニターよりもはるかに高いことです。まともなプリンタの解像度は600dpi(dots per inch)です。モニターのデフォルトは96dpiですが、何十年にもわたってそれに固執した後、最終的には改善されています。

したがって、フォームを自分のやり方で印刷するには、2つの不快な選択肢があります。画面上の1ピクセルが紙上の1ピクセルになるようにフォームを印刷できます。それはあなたに元の形の本当に鮮明なイメージを与えます、しかしそれは切手と同じくらいの大きさです。または、フォームを画面と同じ大きさの紙に印刷します。これは、現在起こっていることです。これにより、モニター上の1つのピクセルが紙上の6x6のブロブに変わります。結果は非常に粗く見え、特にテキストは見栄えが悪くなります。

解決策は、フォームを画面上に6倍大きく描画し、それを印刷することです。ただし、それは機能しません。フォームを画面より大きくすることはできません。唯一の実際の解決策は、プリンターに6倍の大きさを描画することです。これには、PrintDocumentクラスが必要です。そして、描画を行うためのPrintPageイベントハンドラー内の一連のコード。あなたはあなたのためにそれをするためにコントロールを誘導することができないので、それはたくさんの仕事です。

または、レポートジェネレータを使用します。それらはこの問題を解決するために存在します。Googleの「.netレポートジェネレーター」で買い物を始めましょう。

于 2012-09-22T21:20:24.357 に答える
0

以下は、大きな画像をプリンターにレンダリングする基本的なサンプルです。

Bitmap bitmapToPrint;
    public void printImage()
    {
        bitmapToPrint = new Bitmap(3400,4400);
        Font font = new Font(FontFamily.GenericSansSerif, 120, FontStyle.Regular);
        string alphabet = "abcdefghijklmnopqrstuvwxyz";
        Graphics graphics = Graphics.FromImage(bitmapToPrint);
        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 0);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 1000);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 2000);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 3000);

        PrintDocument pd = new PrintDocument();
        pd.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";
        pd.PrinterSettings.PrintToFile = true;
        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
        pd.Print();
    }
    void pd_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.Graphics.DrawImage(bitmapToPrint, new RectangleF(0.0f, 0.0f, 850.0f, 1100.0f));
    }
于 2015-07-10T21:30:21.320 に答える