Overlay image onto PDF using PDFSharp

后端 未结 3 483
离开以前
离开以前 2020-12-14 17:05

Can\'t seem to find much out there for this. I\'ve a PDF, onto which I\'d like to overlay an image of an electronic signature. Any suggestions on how to accomplish that usin

相关标签:
3条回答
  • 2020-12-14 17:48

    Try the following

    private void GeneratePDF(string filename, string imageLoc)
    {
        PdfDocument document = new PdfDocument();
    
        // Create an empty page or load existing
        PdfPage page = document.AddPage();
    
        // Get an XGraphics object for drawing
        XGraphics gfx = XGraphics.FromPdfPage(page);
        DrawImage(gfx, imageLoc, 50, 50, 250, 250);
    
        // Save and start View
        document.Save(filename);
        Process.Start(filename);
    }
    
    void DrawImage(XGraphics gfx, string jpegSamplePath, int x, int y, int width, int height)
    {
        XImage image = XImage.FromFile(jpegSamplePath);
        gfx.DrawImage(image, x, y, width, height);
    }
    

    This will generate a new PDF with the specified image near the top of the page. If you need to use an existing document change the PdfDocument constructor to

    PdfDocument document = new PdfDocument(filename);
    

    where filename is the name of the file to load and change the PdfPage line to

    PdfPage page = document.Pages[pageNum];
    

    where pageNum is the number of the page on which you need to add the image.

    After that, it just a matter of getting the positioning on the page by altering the parameters for DrawImage to suit.

    DrawImage(gfx, imageLoc, 50, 50, 250, 250);
    

    Good luck!

    0 讨论(0)
  • 2020-12-14 17:56

    To roughly maintain the aspect ratio, I used @Kami's answer and "roughly" centered it. The assumption made is that the pdf width is 600 and pdf height is 800, we will make use of the middle 500 and 700 of the page only, leaving the 4 sides have at least 50 in length as margin.

        public static void GeneratePdf(string outputPath, string inputPath)
        {
            PdfSharp.Pdf.PdfDocument document = new PdfSharp.Pdf.PdfDocument();
    
            // Create an empty page or load existing
            PdfPage page = document.AddPage();
    
            // Get an XGraphics object for drawing
            XGraphics gfx = XGraphics.FromPdfPage(page);
            DrawImage(gfx, inputPath);
    
            // Save and start View
            document.Save(outputPath);
            Process.Start(outputPath);
        }
    
        public static void DrawImage(XGraphics gfx, string imagePath)
        {
            XImage image = XImage.FromFile(imagePath);
            var imageHeight = image.PixelHeight;
            var imageWidth = image.PixelWidth;
            int height;
            int width;
            int x;
            int y;
    
            width = 500;
            height = (int) Math.Ceiling((double) width * imageHeight / imageWidth);
    
            x = 50;
            y = (int) Math.Ceiling((800 - height) / 2.0);
            
            if(height > 700)
            {
                height = 700;
                width = (int) Math.Ceiling(imageWidth * (double) height / imageHeight);
    
                y = 50;
                x = (int) Math.Ceiling((600 - width) / 2.0);
            }
            
            gfx.DrawImage(image, x, y, width, height);
        }
    
    0 讨论(0)
  • 2020-12-14 18:01

    This will help you:

        PdfDocument document = pdf;
    
        // Create a new page        
        PdfPage page = document.Pages[0];
        page.Orientation = PageOrientation.Portrait;
    
        XGraphics gfx = XGraphics.FromPdfPage(page, XPageDirection.Downwards);
    
        // Draw background
        gfx.DrawImage(XImage.FromFile("pdf_overlay.png"), 0, 0);
    

    Just add the path to the image you want, and specify the position of the image.

    0 讨论(0)
提交回复
热议问题