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

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

在一些文档处理中,我们需要对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();
}

 

三个页面的骑缝章如上所示。

 

专注于代码生成工具、.Net/.NetCore 框架架构及软件开发,以及各种Vue.js的前端技术应用。著有Winform开发框架/混合式开发框架、微信开发框架、Bootstrap开发框架、ABP开发框架、SqlSugar开发框架等框架产品。
 转载请注明出处:撰写人:伍华聪  http://www.iqidi.com

相关文章
|
数据挖掘 数据安全/隐私保护 开发者
使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
1525 0
|
开发框架 前端开发 JavaScript
在Winform程序中使用Spire.Pdf实现页面添加印章处理
在Winform程序中使用Spire.Pdf实现页面添加印章处理
|
C# 数据安全/隐私保护
C#如何在PDF文件添加图片印章
文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性。C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF for .NET,向大家阐述如何以编程的方式在PDF文件中添加图片印章。
1477 0
|
9月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
6月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
876 40
|
6月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
8月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
482 10
|
7月前
|
数据采集 存储 API
Python爬虫结合API接口批量获取PDF文件
Python爬虫结合API接口批量获取PDF文件
|
11月前
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
1247 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
1274 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式

热门文章

最新文章