c# system.drawing how to print pdf to whole page size without blurr and losing quality

517 Views Asked by At

I made a windows service that's runs in background service and listening for web app to order to print. the web app send a pdf file and width and height of the printer paper with count of copies I wrote the code this way

convert pdf to image

public Image ConverPdfToImage(IFormFile pdfFile)
    {
        if (pdfFile == null || pdfFile.Length==0)
        {
            return null;
        }
        var documemt = new Spire.Pdf.PdfDocument();
      
        documemt.LoadFromStream(pdfFile.OpenReadStream());

        Image image = documemt.SaveAsImage(0,PdfImageType.Bitmap);
      
        return image;
    }

then the event handler

 private void PrintPage(object sender, PrintPageEventArgs ev,Image img)
    {
       
       
        Rectangle pageBounds = ev.PageBounds;
        int x = pageBounds.Left - (int) ev.PageSettings.HardMarginX;
        int y = pageBounds.Top - (int) ev.PageSettings.HardMarginY;
        int width = pageBounds.Width;
        int height = pageBounds.Height;
        
        ev.Graphics.CompositingQuality = CompositingQuality.HighQuality;
        ev.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        ev.Graphics.SmoothingMode = SmoothingMode.HighQuality;
        ev.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

     
       local = new Rectangle(x, y, width, height);
        ev.Graphics.FillRectangle(Brushes.Transparent, local);
        ev.Graphics.DrawImage(img, local);
   }

and the final function that prints

            PrintDocument printDocument = new PrintDocument();
            printDocument.PrinterSettings.PrinterName = form.Printer;
             printDocument.DefaultPageSettings.Landscape = form.Landscape;
         
            printDocument.DefaultPageSettings.PrinterSettings.Copies = form.Count;

           
            printDocument.DefaultPageSettings.PaperSize =GetPaperSize(form.Width, form.Height);
            printDocument.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
            
            
            Image img = ConverPdfToImage(form.PrintFile);
        
           
            printDocument.PrintPage += (sender, args) => this.PrintPage(sender,args,img);
          
            
            printDocument.Print();

the printDocument is from System.Drawing

It makes correct size in printer printer are for lables and they have label papers with custom size

but the printed paper is blur and hard to read some of it is so messed up and dirty

glad to help me make print sharp and good quality

0

There are 0 best solutions below