使用PDFSharp将图像叠加到PDF上

时间:2013-09-17 16:20:13

标签: c# asp.net-mvc-4 pdfsharp

似乎找不到这方面的东西。我有一张PDF,我想在其上覆盖电子签名的图像。有关如何使用PDFSharp完成该任务的任何建议?

由于

3 个答案:

答案 0 :(得分:24)

尝试以下

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);
}

这将生成一个新的PDF,其中指定的图像靠近页面顶部。如果您需要使用现有文档,请将PdfDocument构造函数更改为

PdfDocument document = new PdfDocument(filename);

其中filename是要加载的文件的名称,并将PdfPage行更改为

PdfPage page = document.Pages[pageNum];

其中pageNum是您需要添加图片的网页编号。

之后,只需通过更改DrawImage的参数来获取页面上的定位即可。

DrawImage(gfx, imageLoc, 50, 50, 250, 250);
祝你好运!

答案 1 :(得分:5)

这将对您有所帮助:

    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);

只需添加所需图像的路径,然后指定图像的位置。

答案 2 :(得分:0)

为了大致保持长宽比,我使用了@Kami的答案,并“大致”居中了它。 假定pdf宽度为600且pdf高度为800,我们将仅使用页面的中间500和700,剩下的4边至少留有50个边距。

    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);
    }