首页 > 其他分享 >PdfSharpCore是MIT开源协议

PdfSharpCore是MIT开源协议

时间:2023-04-13 23:01:02浏览次数:42  
标签:point doc Pages 开源 pdf new font MIT PdfSharpCore

PdfSharpCore是MIT开源协议,不过他依赖Sixlabors.Fonts和Sixlabors.ImageSharp库,Sixlabors已经修改了协议,https://sixlabors.com/pricing/上面的说明是:
If you are consuming any Six Labors libraries as a Direct Package Dependency for usage in Closed Source software in the capacity of a For-profit company/individual with more than 1M USD annual gross revenue you must purchase a Six Labors Commercial License

.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

标签:point,doc,Pages,开源,pdf,new,font,MIT,PdfSharpCore
From: https://www.cnblogs.com/Leo_wl/p/17316883.html

相关文章

  • 【奶奶看了都会】云服务器部署开源ChatGLM-6B,让你也能拥有自己的ChatGPT
    1.背景大家好啊,我是小卷。最近GPT不仅发布了GPT-4,而且解除封印可以联网了。不得不赞叹AI更新迭代的速度真快,都跟不上节奏了。但是大家也注意到了吧,随着GPT的每次更新,OpenAI对其开放使用的限制也越来越大。之前国内网随便访问GPT3,现在动不动就封号所以,今天就来教大家部署国内清华大......
  • 【开源项目】虎门大桥数字孪生应用智慧桥梁——开放数据及源码
    体验虎门大桥数字孪生技术,免费获取工程和源码,助力您的工程数字化转型。项目介绍虎门大桥是中国广东省珠海市和东莞市之间的一座跨海大桥,是世界上最长的跨海大桥之一,也是中国的一项重要基础设施工程。通过数字孪生技术,成功地实现了对桥梁的仿真和优化,给虎门大桥带上智慧的"眼睛"。通......
  • 【element-ui】解决textarea show-word-limit挡住文字问题
    问题:“67/500”默认背景为白色已超出文本输入框,遮住部分上border,当文字到达右侧时会遮住部分文字,且无法点击该部分解决方案:背景透明色,文字放到右下角 html:<el-inputtype="textarea"autosize maxlength="500"show-word-limit v-model="form.keyIndustry"placeh......
  • 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并
    场景目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca等。1、SRShttps://github.com/ossrs/srs2、EasyDarwinhttps://github.com/EasyDarwin/EasyDarwin3、Monibucahttps://github.com/Monibuca4、ZLMediaKithttps://github.co......
  • C#版本LINQ增强开源库
    LINQ对应的中文名称是:语言集成查询,是对一系列直接将查询功能集成到C#语言技术的统称,我们最常用的场景是,用于数据库的查询功能。在.Net中,本身对Objects也支持LINQ的扩展,但是对于一些特定的功能,就需要我们自己去扩展。所以,今天给大家推荐一个LINQ扩展库,主要是针对“LINQtoObject......
  • 微软开源DeepSpeed
    人手一个ChatGPT的梦想,就要实现了?刚刚,微软开源了一个可以在模型训练中加入完整RLHF流程的系统框架——DeepSpeedChat。也就是说,各种规模的高质量类ChatGPT模型,现在都唾手可得了!项目地址:https://github.com/microsoft/DeepSpeed一键解锁千亿级ChatGPT,轻松省钱15......
  • 取消git提交时precommit代码校验
    用git进行代码管理,当我执行gitcommit操作时,会出现一下代码来检测提交的代码Pro:hcf-vuehh$gitadd--allPro:hcf-vuehh$gitcommit-m'wq'husky>pre-commit(nodev8.11.2)❯Runningtasksforsrc/**/*.{js,jsx,vue}⠼eslint解决办法:1.进入项目所在文......
  • 有没有类似花生壳一样的内网穿透免费开源项目
    是的,有很多内网穿透的开源项目可以选择,以下是其中几个:ngrok:ngrok是一个非常流行的内网穿透工具,可以将本地服务器映射到公共互联网上,并提供一个唯一的URL。frp:frp是另一个流行的免费开源的内网穿透工具,支持TCP、UDP、HTTP、HTTPS等协议,并且提供了类似花生壳的服务功能。NA......
  • 欢乐商城源码/品云购商城源码/英文版商城源码/全开源 可二开
    demo软件园每日更新资源,请看到最后就能获取你想要的:1.欢乐商城源码/品云购商城源码/英文版商城源码/全开源可二开商城源码/英文版商城源码/全开源可二开出海项目源码后台为中文语言页面效果:2.SQL学习指南(第2版)这是一本关于SQL的书,不是关于数据库的。以MySQL为例来......
  • 最新版本 Stable Diffusion 开源 AI 绘画工具之图生图进阶篇
    (✨目录)......