C# 的列印圖片(CS_Print_Image)

C# 的列印圖片(CS_Print_Image)

C# 的列印圖片(CS_Print_Image)


資料來源:

http://kenyanzi.blogspot.com/2011/05/c.html
https://docs.microsoft.com/zh-tw/dotnet/api/system.windows.forms.printdialog?view=netcore-3.1
http://blog.udn.com/pgferic/7457104


GITHUB:https://github.com/jash-git/CS_Print_Image.git


step0. 引用 System.Drawing.Printing;


step1. 新增printDocument

    pdc001


step2. 點擊printDocument兩下開啟printDocument_PrintPage

    private void pdc001_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)


step3. 編輯printDocument_PrintPage


code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

/*
//http://kenyanzi.blogspot.com/2011/05/c.html
//https://docs.microsoft.com/zh-tw/dotnet/api/system.windows.forms.printdialog?view=netcore-3.1
//http://blog.udn.com/pgferic/7457104
C# 的列印
step0. 引用 System.Drawing.Printing;
step1. 新增printDocument
    pdc001
step2. 點擊printDocument兩下開啟printDocument_PrintPage
    private void pdc001_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
step3. 編輯printDocument_PrintPage
*/

namespace CS_Print_Image
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //宣告一個一表機
            PrintDocument pd = new PrintDocument();
            //設定印表機邊界
            Margins margin = new Margins(0, 0, 0, 0);
            pd.DefaultPageSettings.Margins = margin;
            ////設定紙張大小 'vbPRPSUser'為使用者自訂
            PaperSize pageSize = new PaperSize("vbPRPSUser", 256, 256);
            pd.DefaultPageSettings.PaperSize = pageSize;
            //印表機事件設定
            pd.PrintPage += new PrintPageEventHandler(this.pdc001_PrintPage);

            try
            {
                //---直接列印 pd.Print();//列印

                /*
                //---
                //選擇印表機
                // Allow the user to choose the page range he or she would
                // like to print.
                pdlg001.AllowSomePages = true;
                // Show the help button.
                pdlg001.ShowHelp = true;
                // Set the Document property to the PrintDocument for 
                // which the PrintPage Event has been handled. To display the
                // dialog, either this property or the PrinterSettings property 
                // must be set 
                pdlg001.Document = pd;
                DialogResult result = pdlg001.ShowDialog();
                // If the result is OK then print the document.
                if (result == DialogResult.OK)
                {
                    pd.Print();
                }
                //---選擇印表機
                */

                //---
                //預覽列印
                PrintPreviewDialog PPD = new PrintPreviewDialog();

                PPD.Document = pd;

                PPD.ShowDialog();
                //---預覽列印

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "列印失敗", MessageBoxButtons.OK, MessageBoxIcon.Error);
                pd.PrintController.OnEndPrint(pd, new PrintEventArgs());
            }
        }

        private void pdc001_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //列印圖片
            string strDir;
            strDir = System.Windows.Forms.Application.StartupPath;
            strDir += "\\temp01.png";
            Image temp = Image.FromFile(strDir);//圖片檔案

            //設定圖片列印的x,y座標
            int x = e.MarginBounds.X;
            int y = e.MarginBounds.Y;

            //圖片列印的大小
            int width = temp.Width;//temp.Width;
            int height = temp.Height;//temp.Height;
            Rectangle destRect = new Rectangle(x, y, width, height);

            // public void DrawImage (
            // Image image, 要繪製的 Image。
            // Rectangle destRect, Rectangle 結構,指定繪製影像的位置和大小。縮放影像來符合矩形
            // int srcX, 要繪製之來源影像部分左上角的 X 座標
            // int srcY, 要繪製之來源影像部分左上角的 Y 座標。
            // int srcWidth, 要繪製之來源影像部分的寬度。
            // int srcHeight, 要繪製之來源影像部分的高度。
            // GraphicsUnit srcUnit, GraphicsUnit 列舉型別的成員,指定用來判斷來源矩形的測量單位。
            // ImageAttributes imageAttr ImageAttributes,指定 image 物件的重新著色和 Gamma 資訊。
            //)
            //將圖片放入要列印的文件中
            e.Graphics.DrawImage(temp, destRect, 10, 10, temp.Width, temp.Height, System.Drawing.GraphicsUnit.Pixel);

            //列印文字
            System.Drawing.Font printFont = new System.Drawing.Font("Arial", 10);//設定字型與大小
            float leftMargin = e.MarginBounds.Left;//取得文件左邊界
            float topMargin = e.MarginBounds.Top;//取得文件上邊界
            int count = 10;//起始列印的行數
            float yPos = 0f;//收集成列印起始點的參數
            yPos = topMargin + count * printFont.GetHeight(e.Graphics);

            // public void DrawString (
            // string s, 要繪製的字串。
            // Font font, Font,定義字串的文字格式。
            // Brush brush, Brush,決定所繪製文字的色彩和紋理。
            // float x, 繪製文字左上角的 X 座標。
            // float y, 繪製文字左上角的 Y 座標。
            // StringFormat format StringFormat,指定套用到所繪製文字的格式化屬性,例如,行距和對齊。
            //)
            //將要列印的文字放入要列印的文件中

            //jash 停用 e.Graphics.DrawString("C#有夠讚", printFont, Brushes.Black, 100, yPos, new StringFormat());
        }
    }
}

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *