.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 包

.net core-利用PdfSharpCore和SkiaSharp.QrCode 添加PDF二維碼頁眉

文章插圖
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);
.net core-利用PdfSharpCore和SkiaSharp.QrCode 添加PDF二維碼頁眉

文章插圖
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.
.net core-利用PdfSharpCore和SkiaSharp.QrCode 添加PDF二維碼頁眉

文章插圖

.net core-利用PdfSharpCore和SkiaSharp.QrCode 添加PDF二維碼頁眉

文章插圖
docker 模式,需要在 dockerfile 中添加如下配置RUN apt-get update && apt-get -y install libfontconfig1如需要指定字體,請將字段文件進行拷貝(比如雅黑)COPY /xx/xxx/SIMHEI.TTF /usr/share/fonts/SIMHEI.TTFSkiaSharp.QrCode 參考:https://www.cnblogs.com/berkerdong/p/16779385.html
【.net core-利用PdfSharpCore和SkiaSharp.QrCode 添加PDF二維碼頁眉】QuestPDF 參考:https://www.cnblogs.com/qpjlove/p/16181232.html

    推薦閱讀