似乎找不到这方面的东西。我有一张PDF,我想在其上覆盖电子签名的图像。有关如何使用PDFSharp完成该任务的任何建议?
由于
答案 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);
}