.net core-利用PdfSharpCore和SkiaSharp.QrCode 添加PDF二维码页眉
前序
由于去年的一个项目需要在PDF 添加公司二维码 ,当时在网上找了很多操作PDF方案,第一种Aspose.PDF,很遗憾 Aspose.PDF 有添加版权的背景还是页脚我忘记了,不适合公司项目,最终放弃此方案。第二种FreeSpire.PDF,很遗憾Free有限制放弃了,第三种选择OpenXml 自己去摸索太复杂放弃,最后选择了PdfSharpCore. 二维码选择的方案QRCoder,当时项目采用的.net core 3.1 ,目前项目升级到net 6.0 遇到问题,QRCoder依赖System.Drawing.Imaging,但是微软放弃 System.Drawing.Imaging,推荐使用SkiaSharp。
1.导入negut 包
2.生成二维码
生成二维码的高度和宽度,可以进行调整,以适应PDF的页眉大小
using var generator = new QRCodeGenerator();
var qr = generator.CreateQrCode("XXX", ECCLevel.M);
var info = new SKImageInfo(250, 250);
using var surface = SKSurface.Create(info);
var canvas = surface.Canvas;
canvas.Render(qr, info.Width, info.Height);
3. 用PdfSharpCore 打开 PDF文件
PdfSharpCore 有很多Open方法(支持PDF私有密码模式,读写模式)
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify);
4.写入二维码
循环PDF的每一页,增加PDF的页眉,再将二维码的流写入PDF中,页眉的高度请根据PDF进行调整.
using (SKImage image = surface.Snapshot())
{
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify);
using (SKData p = image.Encode(SKEncodedImageFormat.Png, 100))
{
using (MemoryStream stream = new MemoryStream())
{
p.SaveTo(stream);
float x = 90;
float y = 20;
stream.Position = 0;
XImage headerImage = XImage.FromStream(() => stream);
double width = headerImage.Size.Width / 7;
double height = headerImage.Size.Height / 7;
for (int i = 0; i < doc.Pages.Count; i++)
{
var renderer = XGraphics.FromPdfPage(doc.Pages[i]);
XSize pageSize = renderer.PageSize;
renderer.DrawImage(headerImage, x, y, width, height);
XPen pen = new XPen(XBrushes.Gray, 0.5f);
renderer.DrawLine(pen, x, y + height, pageSize.Width - x, y + height);
}
stream.Dispose();
stream.Close();
}
var filePath = $"b.pdf";
doc.Save(filePath);
}
}
例子是Hololens workshop 的PDF ,实现的如下,其实还可以加页码页脚这些,各位大佬可以研究一下进行分享。目前在博客园看到了另外一个QuestPDF 可以操作PDF.
docker 模式,需要在 dockerfile 中添加如下配置
RUN apt-get update && apt-get -y install libfontconfig1
如需要指定字体,请将字段文件进行拷贝(比如雅黑)
COPY /xx/xxx/SIMHEI.TTF /usr/share/fonts/SIMHEI.TTF
SkiaSharp.QrCode 参考:https://www.cnblogs.com/berkerdong/p/16779385.html
QuestPDF 参考:https://www.cnblogs.com/qpjlove/p/16181232.html
PdfSharpCore 更多参考: https://github.com/ststeiger/PdfSharpCore
.net core-利用PdfSharpCore和SkiaSharp.QrCode 添加PDF二维码页眉的更多相关文章
- 利用QrCode.Net生成二维码 asp.net mvc c#
利用QrCode.Net生成二维码 asp.net mvc c# 里面介绍了.net的方式及js的方式,还不错. 里面用到的qrcode.net的类库下载地址:https://qrcodenet.co ...
- QRCode.js生成二维码
QRCode的GitHub地址: https://github.com/KeeeX/qrcodejs 该版本解决了主版本(https://github.com/davidshimjs/qrcodejs ...
- jquery.qrcode.js 生成二维码并支持中文的方法
GitHub地址: https://github.com/jeromeetienne/jquery-qrcode <div class="QR"></div> ...
- qrcode.js生成二维码因字符串过长而报错
前端使用qrcode.js生成二维码的时候.有时候是会出现 qrcode length overflow (1632>1056) 目前使用的有效的解决办法是重新下载新版的qrcode.js 下载 ...
- 利用vcard和qrcode.js生成二维码导入联系人
vCard是一种容许交换个人信息的数据规范,vCard数据格式的标识符是VCARD,vCard数据格式行是: 类型 [;参数]:值,具体的介绍百度都有,我们可以通过vcard来进行通讯录的保存,名片的 ...
- C#利用QrCode.Net生成二维码(Qr码
http://www.cnblogs.com/Soar1991/archive/2012/03/30/2426115.html 现在网上很多应用都是用二维码来分享网址或者其它的信息.尤其在移动领域,二 ...
- C#利用QrCode.Net生成二维码(Qr码)
在网上很多应用都是用二维码来分享网址或者其它的信息.尤其在移动领域,二维码更是有很大的应用场景.因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度.百度 ...
- .net Core 调用微信Jsapi接口,H5解析二维码
项目里需要用到扫描二维码,自己实现,不会. 找到了两种解决方案: 通过reqrcode.js,这是一个前端解析二维码内容的js库.如果二维码比较清晰,用这种效果也不错 调用微信扫一扫功能,这种效果很好 ...
- C# 利用ZXing.Net来生成条形码和二维码
本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...
随机推荐
- CF208E Blood Cousins(DSU,倍增)
倍增求出祖先,\(\text{DSU}\)统计 本来想用树剖求\(K\)祖,来条链复杂度就假了 #include <cstring> #include <cstdio> #in ...
- java-方法创建与使用
1.方法: 1)封装一段特定的业务逻辑功能 2)方法尽可能的独立,一个方法只干一件事(低耦合) 3)方法可以被反复调用多次(高复用) 4)减少代码重复,有利于代码维护,有利于团队协作开发2.方法的定义 ...
- 逐层阅读 research paper:Dmitry Berenson 的方法论
本博客翻译了 这篇文章,包含很实用的 读论文的方法论. 读论文的四个 layers 在读论文之前,要首先搞清楚,自己读论文的目的是什么,或者 希望读到什么程度. 下表列出了常见的读论文目的,以及相应的 ...
- 【Java】学习路径50-线程死锁问题
生活化的例子:比如说有两个人,一把刀和一把叉子: 第一个人先需要一把刀,然后还需要一把叉子: 第二个人先需要一把叉子,然后还需要一把刀. 我们理想的情况是:一个人拿着刀,然后再拿到叉子,把事情做完,然 ...
- Redis图形化管理工具
一.treeNMS Redis做为现在web应用开发的黄金搭担组合,工作中的项目大量使用了Redis,treeNMS是一款用于JAVA语言开发的Redis管理工具:treeNMS管理工具,直接到htt ...
- 01_Linux基础-部署-VMware-Xshell-Xftp-内核-安迪比尔定理
01_Linux基础-部署-VMware-Xshell-Xftp-内核-安迪比尔定理 博客:https://blog.csdn.net/cpen_web CentOS开源 免费 --- CentOS是 ...
- vim 正则表达式
1.查找字符串 /str n 下一个 2.替换表达式 :[range]s/from/to/[flags] range:搜索范围,如果没有指定范围,则作用于但前行. :1,10s/from/to/ 表示 ...
- Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...
- python中使用数组作为索引
链接:https://blog.csdn.net/yzlh2009/article/details/114118470 情况一,索引数组为整数值 情况二,索引数组为bool值
- TextView 中文本内容换行
TextView 中文本内容换行 首先如图所示,我的第一栏围城的书名和书的介绍是在同一行 但是我想让书名和书的介绍分开个站一行 这时我只要在我的数组文本中的文本用 "\n" 就可以 ...