前序

由于去年的一个项目需要在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二维码页眉的更多相关文章

  1. 利用QrCode.Net生成二维码 asp.net mvc c#

    利用QrCode.Net生成二维码 asp.net mvc c# 里面介绍了.net的方式及js的方式,还不错. 里面用到的qrcode.net的类库下载地址:https://qrcodenet.co ...

  2. QRCode.js生成二维码

    QRCode的GitHub地址: https://github.com/KeeeX/qrcodejs 该版本解决了主版本(https://github.com/davidshimjs/qrcodejs ...

  3. jquery.qrcode.js 生成二维码并支持中文的方法

    GitHub地址: https://github.com/jeromeetienne/jquery-qrcode <div class="QR"></div> ...

  4. qrcode.js生成二维码因字符串过长而报错

    前端使用qrcode.js生成二维码的时候.有时候是会出现 qrcode length overflow (1632>1056) 目前使用的有效的解决办法是重新下载新版的qrcode.js 下载 ...

  5. 利用vcard和qrcode.js生成二维码导入联系人

    vCard是一种容许交换个人信息的数据规范,vCard数据格式的标识符是VCARD,vCard数据格式行是: 类型 [;参数]:值,具体的介绍百度都有,我们可以通过vcard来进行通讯录的保存,名片的 ...

  6. C#利用QrCode.Net生成二维码(Qr码

    http://www.cnblogs.com/Soar1991/archive/2012/03/30/2426115.html 现在网上很多应用都是用二维码来分享网址或者其它的信息.尤其在移动领域,二 ...

  7. C#利用QrCode.Net生成二维码(Qr码)

    在网上很多应用都是用二维码来分享网址或者其它的信息.尤其在移动领域,二维码更是有很大的应用场景.因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度.百度 ...

  8. .net Core 调用微信Jsapi接口,H5解析二维码

    项目里需要用到扫描二维码,自己实现,不会. 找到了两种解决方案: 通过reqrcode.js,这是一个前端解析二维码内容的js库.如果二维码比较清晰,用这种效果也不错 调用微信扫一扫功能,这种效果很好 ...

  9. C# 利用ZXing.Net来生成条形码和二维码

    本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...

随机推荐

  1. Maven 聚合工程

    第一步: 创建Maven聚合工程: 父工程Maven工程的打包方式必须为pom 创建一个Maven工程 修改父工程的pom.xml,设置打包方式为pom <?xml version=" ...

  2. Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式

    Map集合的特点 1.Map集合中保存的都是键值对,键和值是一一对应的 2.一个映射不能包含重复的值 3.每个键最多只能映射到一个值上 Map接口和Collection接口的不同 Map是双列集合的根 ...

  3. Vue刷新页面VueX中数据清空了,怎么重新获取?

    Vue刷新页面VueX数据清空了,怎么重新获取? 点击打开视频讲解更详细 在vue中刷新页面后,vuex中的数据就没有了,这时我们要想使用就要重新获取数据了, 怎么在刷新后重新获取数据呢??? 这时我 ...

  4. [CISCN2019 华北赛区 Day1 Web2]ikun-1

    考点:JWT身份伪造.python pickle反序列化.逻辑漏洞 1.打开之后首页界面直接看到了提示信息,信息如下: 2.那就随便注册一个账号进行登录,然后购买lv6,但是未发现lv6,那就查看下一 ...

  5. [CF1500E] Subset Trick (平衡树)

    题面 洛谷翻译 V a n y a \rm Vanya Vanya 有一个初始大小为 n n n 的集合 S S S 和 q q q 次往集合加数/删数的操作.(集合中每个数字不同) 称一个数 x x ...

  6. Docker 搭建 Nexus3 私服 | 基本操作

    1 Docker 安装 Nexus3 1.1 创建目录 在硬盘上创建 Nexus3 的主目录: mkdir -p /Users/yygnb/dockerMe/nexus3 为该目录添加权限: chmo ...

  7. Linux虚拟机启动报错挂载点丢失

    fstab 挂载失败 实验准备 1) 准备:vim /etc/fstab /mnt1/cdrom 挂载点不在 2) 系统启动报错截图 修复步骤 /etc/fstab 中的错误和损坏的文件系统可能会阻止 ...

  8. Redis变慢?深入浅出Redis性能诊断系列文章(三)

    (本文首发于"数据库架构师"公号,订阅"数据库架构师"公号,一起学习数据库技术,助力职业发展) 本篇为Redis性能问题诊断系列的第三篇,主要从Redis服务层 ...

  9. Call to undefined function think\captcha\imagettftext()

    sudo apt install libjpeg62-turbo-dev libfreetype6-dev -y su -c "docker-php-ext-configure gd --e ...

  10. centos7安装sonarqube-9.2.4

    官方文档地址:https://docs.sonarqube.org/latest/requirements/requirements/ 使用 sonarqube 对 java 项目代码进行扫描的时候, ...