在一些文档处理中,我们需要对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实现PDF添加印章的操作的更多相关文章

  1. 在Winform程序中使用Spire.Pdf实现页面添加印章处理

    在一些场合,我们往往需要使用印章来给每页文档加盖一个印章,以表示该文档经过某个部门的认证的,常规的做法就是打印文档后盖章,如果需要电子档再行扫描一下.这样的的处理,如果文档很多,且仅仅需要电子文档的就 ...

  2. C# 利用itextsharp、Spire配合使用为pdf文档每页添加水印

    下载类库: 直接下载 引入类库 功能实现 using iTextSharp.text.pdf; using Spire.Pdf; using Spire.Pdf.Graphics; using Sys ...

  3. 利用iTextSharp组件给PDF文档添加图片水印,文字水印

    最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了.以下做个记录: 首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来. 代码中添加引用为:   using S ...

  4. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  5. 利用private font改变PDF文件的字体

    利用private font改变PDF文件的字体 前几天做项目,需要使用未安装的字体来改变PDF的文件.以前并没有实现过类似的功能,幸运的是我在网上找到了类似的教程,并成功实现了这个功能. 下面就跟大 ...

  6. C#如何给PDF文档添加注释

    整理文档时,我们可能会需要在一些或一段文字上添加注释加以说明,那如何以编程的方式实现呢?本文将实例讲述C#中如何使用免费组件给PDF文档添加文本注释,包括自由文本注释.自由文本注释能允许我们自定义它的 ...

  7. C# 给现有PDF文档添加页眉、页脚

    概述 页眉页脚是一篇完整.精致的文档的重要组成部分.在页眉页脚处,可以呈现的内容很多,如公司名称.页码.工作表名.日期.图片,如LOGO.标记等.在之前的文章中介绍了如何通过新建一页空白PDF页来添加 ...

  8. C#添加PDF页眉——添加文本、图片到页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  9. tp5 使用phpword 替换word模板并利用com组件转换pdf

    tp5   使用phpword 替换word模板并利用com组件转换pdf 一.首先composer安装PHPword,就不多说了 二.然后是把模板中要替换的部分用变量代替 三.把原始的模板文件放入项 ...

  10. C# 给PDF签名时添加时间戳的2种方法(附VB.NET代码)

    在PDF添加签名时,支持添加可信时间戳来保证文档的法律效应.本文,将通过C#程序代码介绍如何添加可信时间戳,可通过2种方法来实现.文中附上VB.NET代码,有需可供参考. 一.程序运行环境 编译环境: ...

随机推荐

  1. nginx概要

    新机(CentOS7)配置nginx: 一. 更新yum源为阿里云镜像 ping mirrors.aliyun.com mv /etc/yum.repos.d/CentOS-Base.repo /et ...

  2. PropertyGrid实现文件选择项

    原来公司的一段代码,现在给朋友写的软件里也用上了,看样用处挺多,所以保存一下. 自定义属性类: using System; using System.Collections.Generic; usin ...

  3. express服务器框架

    Express 为了提高开发效率,我们在开发过程中,都会尽量使用别人已经开发好的第三方模块,而我们想要快速实现服务器端的开发,推荐一个当下比较流行的框架:Express Express 作为开发框架, ...

  4. 2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。

    2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线.玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿.但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪 ...

  5. 2021-11-12:前 K 个高频元素。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <=

    2021-11-12:前 K 个高频元素.给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案.提示:1 <= nums.length ...

  6. ClickHouse笔记: Ubuntu/Centos下的安装, 配置和用户管理

    ClickHouse ClickHouse 属于 OLAP 数据库 OLTP 与 OLAP OLTP (On-Line Transaction Processing 联机事务处理), 注重事务处理, ...

  7. Java中synchronized的优化

    本文介绍为了实现高效并发,虚拟机对 synchronized 做的一系列的锁优化措施 高效并发是从 JDK5 升级到 JDK6 后一项重要的改进项,HotSpot 虚拟机开发团队在 JDK6 这个版本 ...

  8. itextpdf5.5.13给pdf添加图片水印、添加文字水印(平铺)、添加文字水印(单个)、添加页眉、页脚、页眉事件、添加图片

    转载自简书用户:alex很累,感谢分享.原地址:https://www.jianshu.com/p/2b9c7a0300e4 一.相关工具类 1. Excel2Pdf.java (如代码不可用请查看原 ...

  9. 电赛控制类PID算法实现

    一.什么是PID 学过自动控制原理的对PID并不陌生,PID控制是对偏差信号e(t)进行比例.积分和微分运算变换后形成的一种控制规律.PID 算法的一般形式: PID控制系统原理框图 二.PID离散化 ...

  10. drf——jwt

    jwt原理 使用jwt认证和使用session认证的区别 三段式 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibm ...