c\#웹 인쇄 플러그 인 을 어떻게 실현 합 니까?

최근 에 고객 이 필요 로 하 는 것 이 있 습 니 다.웹 엔 드 에 미리 보기 인쇄 가 없습니다.이름 은 바로 인쇄 입 니 다.
당시 의 첫 번 째 반응 은 플러그 인 을 찾 는 것 이 었 다.가 져 오기 주 의 는 영원히 시대 에 뒤떨어 지지 않 았 다.한 바퀴 둘 러 보 니 무료 로 제한 이 있 고 제한 이 없 는 요금 이 필요 하 다(LODOP 정말 쓰기 좋다).말하자면 간단 한 미리 보기 인쇄 가 없고 비용 을 받 는 여러 기능 이 쓸모 가 없 으 며 전체적으로 성적 인 가격 이 낮 기 때문에 스스로 생각해 서 쓰 려 고 한다.처음에는 웹 쪽 에서 직접 인쇄 를 하 는 것 에 얽 매 였 고 인쇄 는 실현 되 었 으 며 결 과 는 서버 쪽 이 었 고 클 라 이언 트 는 어리둥절 할 수 밖 에 없 었 습 니 다.
나중에(타협 준비)유 료 플러그 인 을 설치 한 결과 클 라 이언 트 프로그램 을 먼저 설치 해 야 한 다 는 것 을 알 게 되 었 습 니 다.영광 이 나타 나 면 해결 방안 이 나 오지 않 습 니까?
사고방식:웹 에서 클 라 이언 트 프로그램 을 호출 하여 클 라 이언 트 프로그램 이 인쇄 를 실현 하도록 합 니 다.
실현:웹 사 이 드 는 웹 소켓 을 통 해 Html 을 클 라 이언 트 에 보 내 고 클 라 이언 트(Winform)가 메 시 지 를 감청 하 며 처리 한 후에 인쇄 합 니 다.
클 라 이언 트(Winform)인쇄 구현 방식:
1.Html 에서 PDF 를 변환 한 다음 에 PDF 를 출력 합 니 다.
2.Html 에서 그림 을 돌 린 다음 에 PrintDocument 를 통 해 그림 을 인쇄 합 니 다.
3.웹 브 라 우 저 를 통 해 인쇄
위의 생각 대로 코드 를 쓰 면 훨씬 간단 할 것 이다.
웹 엔 드 의 코드 는 더 이상 말 하지 않 겠 습 니 다.간단 한 웹 소켓 통신 입 니 다.
클 라 이언 트 프로그램(Winform)
1.웹 엔 드 의 웹 소켓 정 보 를 감청 합 니 다.여 기 는 세 가지 가방 이 있 습 니 다.Fleck,상 자 를 열 면 바로 사용 할 수 있 고 매우 편리 합 니 다.

          /// <summary>
          /// ConnAndListen
          /// </summary>
          public static void ConnAndListen()
          {              //      45000  
              var server = new WebSocketServer($"ws://127.0.0.1:45000");
              server.Start(socket =>
             {
                 socket.OnOpen = () =>
                 {
                     //     
                     socket.Send("socket     ");
                 };
                 socket.OnClose = () =>
                 {
                     //     
                     socket.Send("socket       ");
                     socket.Close();
                 };
                 socket.OnMessage = message =>
                 {
                     // TODO...
                 };
             });
         }
2.Html 을 처리 하고 Html 을 그림 으로 변환 합 니 다.

/// <summary>
        /// GetBitmap
        /// </summary>
        /// <returns></returns>
        public Bitmap GetBitmap()
        {
            WebPageBitmap Shot = new WebPageBitmap("html", "    ", "    ");
            Shot.GetIt();
            Bitmap Pic = Shot.DrawBitmap("    ", "    ");
            //        
            Pic.SetResolution(203.0F, 203.0F);
            return Pic;
        }
3.그림 인쇄

/// <summary>
    ///     
    /// </summary>
    public class PrintDirectClass
    {
        private PaperSize paperSize = null;
        //     
        private int printNum = 0;
        //       
        private string imageFile = ".....";
        //       
        private ArrayList imageList = new ArrayList();

        /// <summary>
        ///     
        /// </summary>
        public void PrintPreview()
        {
            //      
            PrintDocument imgToPrint = new PrintDocument();

            #region        
            var pageSize = imgToPrint.PrinterSettings.PaperSizes;
            paperSize = pageSize[pageSize.Count - 1];

            //       
            //imgToPrint.DefaultPageSettings.Landscape = false;
            //         
            //imgToPrint.DefaultPageSettings.PaperSize = paperSize;
            //        
            //imgToPrint.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
            //       
            //imgToPrint.DefaultPageSettings.Margins = new Margins(40, 40, 40, 40);

            //       
            imgToPrint.BeginPrint += new PrintEventHandler(this.imgToPrint_BeginPrint);
            //       
            imgToPrint.EndPrint += new PrintEventHandler(this.imgToPrint_EndPrint);
            //       
            imgToPrint.PrintPage += new PrintPageEventHandler(this.imgToPrint_PrintPage);
            #endregion

            //     
            //imgToPrint.Print();

            //       
            //PrintDialog printDialog = new PrintDialog();
            //printDialog.AllowSomePages = true;
            //printDialog.ShowHelp = true;
            //printDialog.Document = imgToPrint;
            //if (printDialog.ShowDialog() == DialogResult.OK)
            //{
            //    imgToPrint.Print();
            //}

            //     
            //PrintPreviewDialog pvDialog = new PrintPreviewDialog();
            //pvDialog.Document = imgToPrint;
            //pvDialog.ShowDialog();
        }

        /// <summary>
        ///       
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void imgToPrint_BeginPrint(object sender, PrintEventArgs e)
        {
            if (imageList.Count == 0)
                imageList.Add(imageFile);
        }

        /// <summary>
        ///       
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void imgToPrint_EndPrint(object sender, PrintEventArgs e)
        {

        }

        /// <summary>
        ///       
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void imgToPrint_PrintPage(object sender, PrintPageEventArgs e)
        {
            //       
            e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
            //       
            e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            //       
            e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
            //      
            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
            //       
            e.Graphics.PageScale = 0.3F;
            using (Stream fs = new FileStream(imageList[printNum].ToString().Trim(), FileMode.Open, FileAccess.Read))
            {
                System.Drawing.Image image = System.Drawing.Image.FromStream(fs);
                int w = image.Width;
                int h = image.Height;
                //   Image
                e.Graphics.DrawImage(image, 40, 40, 410, 600);
                if (printNum < imageList.Count - 1)
                {
                    printNum++;
                    // HasMorePages true     PrintPage  
                    e.HasMorePages = true;
                    return;
                }
                e.HasMorePages = false;
            }
            //          
            //e.PageSettings.Margins = new Margins(40, 40, 40, 40);
            //         
            e.PageSettings.Landscape = false;
            //       
            e.PageSettings.PaperSize = paperSize;
            //        
            e.PageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
        }
    }
이상 은 Html 에서 그림 을 돌 린 다음 에 PrintDocument 를 통 해 그림 을 인쇄 하 는 실현 코드 입 니 다.다른 두 가지 방식 은 모두 가 관심 이 있 으 면 한번 해 보 세 요.
웹 브 라 우 저 는 간단 하지만 프린터 제어 에 그다지 우호 적 이지 않 습 니 다.(제 가 발견 하지 못 했 을 수도 있 고 연구 가 깊 지 않 을 수도 있 습 니 다)

WebBrowser wb = new WebBrowser();
            //     
            wb.Print();
            //     
            wb.ShowPrintDialog();
            //     
            wb.ShowPrintPreviewDialog();
Html 에서 PDF 를 돌 린 다음 에 PDF 원 리 를 Html 에서 그림 을 돌 린 다음 에 PrintDocument 을 통 해 그림 을 인쇄 하 는 것 과 마찬가지 로 PDF 를 돌 리 는 데 제3자 가방 이 필요 할 수 있 습 니 다.현재 이 편리 한 가방 은 비교적 완비 되 어 있 습 니 다.NUGET 에서 pdf 를 검색 하 는 것 은 거의 전부 입 니 다.

수 요 는 항상 갑 작 스 럽 게 온다.다음 에 또 새로운 특별한 수요 가 있 을 때 다시 여러분 과 나 누 겠 습 니 다.
기타 실현 사고
제 1 종
인쇄 클 라 이언 트 를 설치 하여 grid++로 인쇄 템 플 릿 을 실현 합 니 다.
웹 소켓 서버 클 라 이언 트 가 정 보 를 받 은 다음 템 플 릿 을 조립 하여 인쇄 하면 됩 니 다.
두 번 째
웹 브 라 우 저 를 통 해 인쇄 기능 을 구현 합 니 다.텍스트 에 만 적 용 됩 니 다.

//      
webBrowser.Navigate("");
//    
 webBrowser.Print();
 //  
 webBrowser.ShowPrintPreviewDialog();
 //  
 webBrowser.ShowPrintDialog();
이상 은 c\#웹 인쇄 플러그 인 을 어떻게 실현 하 는 지 에 대한 상세 한 내용 입 니 다.c\#웹 인쇄 플러그 인 을 실현 하 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기