.net core-利用PdfSharpCore 操作PDF实例
前序
使用PdfSharpCore请注意使用XGraphics基类,与System.Drawing 的Graphics类似,XGraphics 提供XColor(颜色)、XPen(画笔)、XBrush(画刷)、XFont(字体)、XPoint(位置)等对象。提供很多画线,矩形,圆,扇形,多边形,图,文本等方法。源码请查看https://github.com/ststeiger/PdfSharpCore/blob/master/PdfSharpCore/Drawing/XGraphics.cs
1.设置PDF拥有者的密码,让PDF防篡改。
代码很简单设置PdfDocument.SecuritySettings.OwnerPassword
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify);
doc.SecuritySettings.OwnerPassword = "123";
var filePath = $"b.pdf";
doc.Save(filePath);
2.PDF添加页眉和页脚
(1)添加页码显示
XStringFormats 指定文本的位置:详请查看https://github.com/ststeiger/PdfSharpCore/blob/master/PdfSharpCore/Drawing/XStringFormats.cs
XFont font = new XFont("SimHei", 8);
XBrush brush = XBrushes.Black;
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify);
for (int i = 0; i < doc.Pages.Count; i++)
{
PdfPage page = doc.Pages[i];
XRect layoutRectangle = new XRect(0, page.Height - font.Height, page.Width, font.Height);
using (XGraphics gfx = XGraphics.FromPdfPage(page))
{
gfx.DrawString(
$"第{(i + 1).ToString()}页/共{doc.Pages.Count}页",
font,
brush,
layoutRectangle,
XStringFormats.BottomLeft);
}
}
(2)添加页眉
XFont font = new XFont("SimHei", 8);
XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0));
XPoint point = new XPoint(90, 20);
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify);
for (int i = 0; i < doc.Pages.Count; i++)
{
var renderer = XGraphics.FromPdfPage(doc.Pages[i]);
XSize pageSize = renderer.PageSize;
renderer.DrawString("xxx有限公司", font, brush, point);
XPen pen = new XPen(XBrushes.Gray, 0.5f);
renderer.DrawLine(pen, point.X, point.Y, pageSize.Width - point.X, point.Y);
}
doc.Save("b.pdf");
(3)添加页脚
XFont font = new XFont("SimHei", 8);
XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0));
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify);
for (int i = 0; i < doc.Pages.Count; i++)
{
var renderer = XGraphics.FromPdfPage(doc.Pages[i]);
XSize pageSize = renderer.PageSize;
XPoint point = new XPoint(90, pageSize.Height-20);
renderer.DrawString("xxx有限公司", font, brush, point);
XPen pen = new XPen(XBrushes.Gray, 0.5f);
renderer.DrawLine(pen, point.X, point.Y-10, pageSize.Width - point.X, point.Y-10);
}
doc.Save("b.pdf");
3.PDF添加水印文字
XFont font = new XFont("SimHei", 8);
XBrush brush =new XSolidBrush(XColor.FromArgb(128, 255, 0, 0));
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify);
for (int i = 0; i < doc.Pages.Count; i++)
{
XStringFormat stringFormat = new XStringFormat();
stringFormat.Alignment = XStringAlignment.Center;
stringFormat.LineAlignment = XLineAlignment.Center;
PdfPage page = doc.Pages[i];
var gfx = XGraphics.FromPdfPage(page, XPageDirection.Downwards);
gfx.DrawString(
$"xxx公司版权所有",
font,
brush,
new XPoint(500, 500),
stringFormat);
}
doc.Save("b.pdf");
4.PDF 添加图片
//第一步先加载PDF文件
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify);
//导入图片(地址,文件流)
var background = XImage.FromFile(@"QRCode.png");
// var background = XImage.FromStream(()=> stream);
//指定PDF 的页
PdfPage page = doc.Pages[0];
var gfx = XGraphics.FromPdfPage(page, XPageDirection.Downwards);
//写入指定位置
gfx.DrawImage(background, 20, 20, 250, 140);
doc.Save("b.pdf");
docker 模式,需要在 dockerfile 中添加如下配置
RUN apt-get update && apt-get -y install libfontconfig1
如需要指定字体,请将字段文件进行拷贝(比如雅黑)
COPY /xx/xxx/SIMHEI.TTF /usr/share/fonts/SIMHEI.TTF
.net core-利用PdfSharpCore 操作PDF实例的更多相关文章
- 利用python操作mrjob实例---wordcount
网上利用java实现mr操作实例相对较多,现将python实现mr操作实例---Wordcount分享如下: 在操作前,需要作如下准备: 1.确保linux系统里安装有python3.5,pyt ...
- 【译】在Asp.Net中操作PDF - iTextSharp - 利用列进行排版
原文 [译]在Asp.Net中操作PDF - iTextSharp - 利用列进行排版 在使用iTextSharp通过ASP.Net生成PDF的系列文章中,前面的文章已经讲述了iTextSharp所涵 ...
- 【译】在Asp.Net中操作PDF - iTextSharp - 利用列进行排版(转)
[译]在Asp.Net中操作PDF - iTextSharp - 利用列进行排版 在使用iTextSharp通过ASP.Net生成PDF的系列文章中,前面的文章已经讲述了iTextSharp所涵盖 ...
- 【译】在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本
原文 [译]在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本 本篇文章是讲述使用iTextSharp这个开源组件的系列文章的第三篇,iTextSharp可以通过As ...
- Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例
Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...
- 利用ItextSharp产PDF完整操作
记得上回有写到用C#操作Excel(.net 4.0) 很多朋友说推荐用NPOI,的确,用微软自带的操作execl会有很大的问题.客户的主机不愿意安装excel, 这时我才意识到用自带组件完全是不行的 ...
- 【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图
原文 [译]在Asp.Net中操作PDF - iTextSharp - 绘制矢量图 在上一篇iTextSharp文章中讲述了如何将现有的图片插入PDF中并对其进行操作.但有时,你需要在PDF中绘制不依 ...
- EF 6.x、EF Core实现dynamic动态查询和EF Core实现多个上下文实例池你了解多少?
前言 很长一段时间没有写博客了,今天补上一篇吧,偶尔发现不太愿意写博客了,太耗费时间,不过还是在坚持当中,毕竟或许写出来的东西能帮到一些童鞋吧,接下来我们直奔主题.无论是在在EF 6.x还是EF Co ...
- Cookies 初识 Dotnetspider EF 6.x、EF Core实现dynamic动态查询和EF Core注入多个上下文实例池你知道有什么问题? EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)
Cookies 1.创建HttpCookies Cookie=new HttpCookies("CookieName");2.添加内容Cookie.Values.Add(&qu ...
- Selenium2学习-040-JavaScript弹出框(alert、confirm、prompt)操作演示实例
弹出框是网页自动化测试常见得操作页面元素之一,常见的JavaScript弹出框有如下三种: 1.alert(message):方法用于显示带有一条指定消息和一个 OK 按钮的警告框.DemoAlert ...
随机推荐
- C++面向对象编程之类模板、函数模板等一些补充
1.static数据 和 static函数: 对于 非static函数 在内存中只有一份,当类对象调用时,其实会有该对象的this pointer传进去,那个函数就知道要对那个对象进行操作: stat ...
- 齐博x1小程序集群必须带上固定的标志
小程序集群的也类似登录接口一样,需要带上特殊的标志.建议是在所有请求的头部header 加上 wxappid 如下图所示,跟登录标志 token 并列在一起. 如果不方便修改头部header 请求的时 ...
- C语言基础--数组
数组 概念:在内存中连续存储的具有相同数据类型的一组数据的集合. 注意: 数组中的数据类型必须都是一致的 数组在内存中必须是连续的存储空间 定义数组时候的注意事项: 定义数组的时候,[]里面的值不能是 ...
- 10.pygame-碰撞检测
添加并监听英雄发射子弹事件 class Hero(GameSprite): def __init__(self): # 调用父类方法,设置image super().__init__('./image ...
- 九、Django3的ASGI
九.Django3的ASGI 9.1.Web应用程序和web服务器 Web应用程序(Web)是一种能完成web业务逻辑,能让用户基于web浏览器访问的应用程序,它可以是一个实现http请求和响应功能的 ...
- 基于案例分析 MySQL Group Replication 的故障检测流程
故障检测(Failure Detection)是 Group Replication 的一个核心功能模块,通过它可以及时识别集群中的故障节点,并将故障节点从集群中剔除掉.如果不将故障节点及时剔除的话, ...
- Docker | 常用命令——排错很有帮助
众所周知,docker 排查问题相较而言是困难的.因此,熟知一些常用命令对我们快速的排查定位问题是非常有帮助的.下面让我们一起来学习一下吧 1.显示docker的系统信息 docker info [r ...
- Complementary XOR
题目链接 题目大意: 给你两个字符串只有01组成,你可以选取区间[l, r],对字符串a在区间里面进行异或操作,对字符串b非区间值进行异或操作,问能否将两个字符串变为全0串.如果可以输出YES, 操作 ...
- Java网络编程:Socket 通信 2
client----发送数据(输出流)------------(输入)-[管道流处理数据]-(输出)------接收数据(输入流)------server 文件传输: 客户端: 创建Socket连接对 ...
- mysql数据库报错 sql 1452 Cannot add or update a child row:a foreign key constraint fails
其实这句话的意思就是你添加一个值是一个外键,但是这个外键不在关联的数据库中的主键中,这样就导致了添加失败了,解决办法就是添加对应关联数据库的主键的值,不过我要提醒一下!(也就是我采的坑!) 一定要看清 ...