23

似乎无法为此找到很多东西。我有一个 PDF,我想在其上叠加电子签名的图像。关于如何使用 PDFSharp 实现这一点的任何建议?

谢谢

4

3 回答 3

40

尝试以下

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

祝你好运!

于 2013-09-18T08:59:00.870 回答
6

这将帮助您:

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

只需将路径添加到您想要的图像,并指定图像的位置。

于 2013-09-17T16:36:21.503 回答
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);
    }
于 2020-10-10T18:55:32.900 回答