利用Spire.Pdf实现PDF添加印章的操作

本文档介绍了如何利用Spire.Pdf库在PDF文档上添加全章和骑缝章。通过加载PDF,处理图像,创建PdfTemplate,然后在每一页应用印章,实现了印章的精确放置。骑缝章的处理涉及到图片的拆分和在各页的定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一些文档处理中,我们需要对PDF盖上公司的印章操作,本篇随笔介绍利用Spire.Pdf实现PDF添加印章的操作,如全章和骑缝章的处理。

1、实现效果和处理代码

有时候,需要在特定的位置盖章,以及各个页面盖上骑缝章,如下界面效果所示。

全章的位置定位好后,绘制一个图片即可,骑缝章则是根据多少页,把图片拆分来,然后每页指定位置绘制上图片就可以,逻辑上相对比较简单,只需要便于对PDF实现相关的处理即可。

如需要对PDF文档进行编辑处理,那么我们需要对PDF文档进行加载,使用Spire.Pdf控件对PDF文件处理比较容易。

首先是根据文档路径加载为PdfDocument对象,如下代码所示。

   var doc = new PdfDocument();
   doc.LoadFromFile(signPdf);

而图片内容,我们这需要根据图片路径,进行加载,由于图片大小有不一样的地方,因此需要根据缩放到指定的大小进行粘贴,如下代码所示。

    //构建印章图片,并进行缩放裁剪
    var image = Image.FromFile(signImage);
    image = ImageHelper.ResizeImageToAFixedSize(image, imageWidth, imageHeight, ImageHelper.ScaleMode.H, Color.White);
    PdfImage pdfImage = PdfImage.FromImage(image);

然后对每页的PDF文档,进行单独的处理。

    //每页都添加印章
    for (int i = 0; i < doc.Pages.Count; i++)

由于PDF文档,可以通过绘制 PdfTemplate 模板的方式贴上所需要的内容,如我们这里是图片,代码所示。

复制代码

    PdfPageBase page = doc.Pages[i];

    //使用PdfTemplate模板绘制,可以拖动或锁定
    var loStamp = new PdfRubberStampAnnotation(new RectangleF(new PointF(400, 600), new SizeF(imageWidth, imageHeight)));
    var loApprearance = new PdfAppearance(loStamp);
    var template = new PdfTemplate(imageWidth, imageHeight);
    template.Graphics.DrawImage(pdfImage, 0, 0);
    loApprearance.Normal = template;
    loStamp.Appearance = loApprearance;
    loStamp.Flags = PdfAnnotationFlags.ReadOnly | PdfAnnotationFlags.NoRotate | PdfAnnotationFlags.NoZoom | PdfAnnotationFlags.Locked; // 设置印章标志
    page.AnnotationsWidget.Add(loStamp);

复制代码

最后保存文档并关闭对象即可。

复制代码

    //保存文档
    if (!string.IsNullOrEmpty(fileSave))
    {
        doc.SaveToFile(fileSave);
    }
    doc.Close();

复制代码

以上就是在特定位置粘贴图片,实现印章处理的代码逻辑。

2、实现骑缝章的处理

骑缝章的处理类似,主要就是先拆分图片,如下是图片拆分的实现代码。

复制代码

        /// <summary>
        /// 把图片根据份数进行拆分不同的图片集合
        /// </summary>
        /// <param name="num">多少份</param>
        /// <param name="signImage">图片路径</param>
        /// <returns></returns>
        private static Image[] GetImage(int num, string signImage)
        {
            var lists = new List<Bitmap>();
            var imageWidth = 150;
            var imageHeight = 150;
            var image = Image.FromFile(signImage);
            image = ImageHelper.ResizeImageToAFixedSize(image, imageWidth, imageHeight, ImageHelper.ScaleMode.H, Color.White);

            int w = image.Width / num;
            Bitmap bitmap = null;
            for (int i = 0; i < num; i++)
            {
                bitmap = new Bitmap(w, image.Height);
                using (Graphics g = Graphics.FromImage(bitmap))
                {
                    g.Clear(Color.White);

                    var rect = new Rectangle(i * w, 0, w, image.Height);
                    g.DrawImage(image, new Rectangle(0, 0, bitmap.Width, bitmap.Height), rect, GraphicsUnit.Pixel);
                }
                lists.Add(bitmap);
            }
            return lists.ToArray();
        }

复制代码

最后实现代码如下所示。

复制代码

/// <summary>
/// 生成骑缝章
/// </summary>
/// <param name="signPdf">要盖章的文件</param>
/// <param name="signImage">印章图片</param>
/// <param name="fileSave">处理后的文件保存路径</param>
public static void SplitSign(string signPdf, string signImage, string fileSave)
{
    //加载PDF文档 
    var doc = new PdfDocument();
    doc.LoadFromFile(signPdf);

    var convert = new PdfUnitConvertor();

    //获取分割后的印章图片
    Image[] images = GetImage(doc.Pages.Count, signImage);
    float x = 0;
    float y = 0;
    float alpha = 0.5f;//设定透明比例

    //将图片画到PDF页面上的指定位置
    PdfPageBase pageBase = null;
    for (int i = 0; i < doc.Pages.Count; i++)
    {
        pageBase = doc.Pages[i];
        x = pageBase.Size.Width - convert.ConvertToPixels(images[i].Width, PdfGraphicsUnit.Point);
        y = 150; //pageBase.Size.Height / 2;//中间靠上一点
        pageBase.Canvas.SetTransparency(alpha, alpha, PdfBlendMode.Normal);//设置透明度
        pageBase.Canvas.DrawImage(PdfImage.FromImage(images[i]), new PointF(x, y));
    }

    //保存PDF文件
    if (!string.IsNullOrEmpty(fileSave))
    {
        doc.SaveToFile(fileSave);
    }
    doc.Close();
}

 

免费Spire.PDF for .NET 是一款由e-iceblue公司开发的专业性的PDF文档创建组件。它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档。Spire.PDF for .NET不仅可以运用在服端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中。Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows Forms应用程序,ASP.NET 应用程序客户端浏览器中保存为数据流。 Spire.PDF for .NET 功能丰富。 除了基本的功能比如:绘制多种图形,图片,创建窗体字段,插入页眉页脚,输入数据表,自动对大型表格进行分页外,Spire.PDF for .NET还支持PDF数字签名,将HTML转换成PDF格式,提取PDF文档中的文本信息和图片,存为文本格式和各种图片格式,甚至可以将PDF中的附件提取出来。 主要功能 支持嵌入式字体,Truetype 字体和CJK字体。 支持绘图。比如:矩形,环形,弧形,椭圆形,也可以自定笔刷将其填充。 可以将图片从数据流,磁盘文件中载入到PDF 文档中。 在PDF 文档中既可以绘制梯状图形和矢量图像,还支持掩模和水印图像。 可以在PDF 文档中载入数据表。可以设置表中的行和列的格式,还可以在表内加入图形元素。 自动对PDF 中的大型表格进行分页。 创建窗体字段。比如在PDF 文档中创建按钮,文本框,列表框,复选框等等。 在PDF 中插入页眉页脚。 通过设置所有者密码和用户密码来加密PDF文档。 通过作者的签名来保护PDF文档。 读取当前PDF文档的表格并且填充表格。 HTML网页在转换到PDF文档时会拆分为多个大型页面,这些页面可以原原本本的展现在PDF文档中,而且在PDF文档的分页处没有任何文字的截断。用户还可以将这些网页在不需要临时文件的情况下,直接转换为数据流来创建PDF文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值