前序

使用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实例的更多相关文章

  1. 利用python操作mrjob实例---wordcount

       网上利用java实现mr操作实例相对较多,现将python实现mr操作实例---Wordcount分享如下: 在操作前,需要作如下准备: 1.确保linux系统里安装有python3.5,pyt ...

  2. 【译】在Asp.Net中操作PDF - iTextSharp - 利用列进行排版

    原文 [译]在Asp.Net中操作PDF - iTextSharp - 利用列进行排版 在使用iTextSharp通过ASP.Net生成PDF的系列文章中,前面的文章已经讲述了iTextSharp所涵 ...

  3. 【译】在Asp.Net中操作PDF - iTextSharp - 利用列进行排版(转)

    [译]在Asp.Net中操作PDF - iTextSharp - 利用列进行排版   在使用iTextSharp通过ASP.Net生成PDF的系列文章中,前面的文章已经讲述了iTextSharp所涵盖 ...

  4. 【译】在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本

    原文 [译]在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本 本篇文章是讲述使用iTextSharp这个开源组件的系列文章的第三篇,iTextSharp可以通过As ...

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

  6. 利用ItextSharp产PDF完整操作

    记得上回有写到用C#操作Excel(.net 4.0) 很多朋友说推荐用NPOI,的确,用微软自带的操作execl会有很大的问题.客户的主机不愿意安装excel, 这时我才意识到用自带组件完全是不行的 ...

  7. 【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图

    原文 [译]在Asp.Net中操作PDF - iTextSharp - 绘制矢量图 在上一篇iTextSharp文章中讲述了如何将现有的图片插入PDF中并对其进行操作.但有时,你需要在PDF中绘制不依 ...

  8. EF 6.x、EF Core实现dynamic动态查询和EF Core实现多个上下文实例池你了解多少?

    前言 很长一段时间没有写博客了,今天补上一篇吧,偶尔发现不太愿意写博客了,太耗费时间,不过还是在坚持当中,毕竟或许写出来的东西能帮到一些童鞋吧,接下来我们直奔主题.无论是在在EF 6.x还是EF Co ...

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

  10. Selenium2学习-040-JavaScript弹出框(alert、confirm、prompt)操作演示实例

    弹出框是网页自动化测试常见得操作页面元素之一,常见的JavaScript弹出框有如下三种: 1.alert(message):方法用于显示带有一条指定消息和一个 OK 按钮的警告框.DemoAlert ...

随机推荐

  1. MySQL用户也可以是个角色

    前言 角色(Role),可以认为是一些权限的集合,一直是存在各个数据库中,比如Oracle.SQL Server.OceanBase等,MySQL 自从 8.0 release 才引入角色这个概念. ...

  2. 洛谷P2880 [USACO07JAN] Balanced Lineup G(树状数组/线段树)

    维护区间最值的模板题. 1.树状数组 1 #include<bits/stdc++.h> 2 //树状数组做法 3 using namespace std; 4 const int N=5 ...

  3. 【强烈推荐】用glob库的一行命令显著加速批量读取处理数据

    在我们气象领域,对数据进行批处理随处可见,尤其是在处理模式数据的时候.为了能让这个过程加速,很多大佬们提出了不同的方法,比如使用numba库进行计算.使用dask库进行并行等等,都是非常好的加速手段. ...

  4. JUC(10)深入理解CAS和ABA

    文章目录 1.CAS 2.原子引用解决ABA问题,版本号.修改后,可以看到 1.CAS package com.cas; import java.util.concurrent.atomic.Atom ...

  5. 齐博x1.3通用栏目名称及参数调用接口

    对于全站的频道可以使用下面的方法取出相应的栏目名称及参数http://qb.net/index.php/cms/wxapp.sorts.html注意,只需要把qb.net换成你的域名,cms 换成其它 ...

  6. 现在入行Java真的还有出路吗?

    现在入行Java还来的及吗?未来该如何抉择? 最近有点迷茫了,互联网好像一夜之间进入了寒冬一样,到处都是就业难的样子,当然,不可否认的是,那些努力的大佬依旧是斩获多个offer,但是,窝就一个小镇做题 ...

  7. 通过tkinter列出全部字体名称

    通过tkinter列出windows系统全部字体名称 通过 tkinter.font 的 families() 函数实现 import tkinter import tkinter.font # 把p ...

  8. Kubeadm部署k8s单点master

    Kubeadm部署k8s单点master 1.环境准备: 主机名 IP 说明 宿主机系统 master 10.0.0.17 Kubernetes集群的master节点 CentOS 7.9 node1 ...

  9. HTML5+CSS3常见布局方式

    1.等高布局 1.1 代码 等高布局是指子元素在父元素中高度相等的布局方式 <div class="father"> <div class="f1&qu ...

  10. HDLBits答案——Verification: Writing Testbenches

    1 clock module top_module ( ); reg clk; dut U1(.clk(clk)); initial begin clk = 0; end always begin # ...