前序

使用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. Opencv环境配置及踩坑

    Opencv环境配置及踩坑 1.什么是Opencv OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和[ ...

  2. .Net WebApi 中的 FromBody FromForm FromQuery FromHeader FromRoute

    在日常后端Api开发中,我们跟前端的沟通中,通常需要协商好入参的数据类型,和参数是通过什么方式存在于请求中的,是表单(form).请求体(body).地址栏参数(query).还是说通过请求头(hea ...

  3. JavaFx 使用字体图标记录

    原文:JavaFx 使用字体图标记录 - Stars-One的杂货小窝 之前其实也是研究过关于字体图标的使用,还整了个库Tornadofx学习笔记(4)--IconTextFx开源库,整合5000+个 ...

  4. 二进制安装Dokcer

    写在前边 考虑到很多生产环境是内网,不允许外网访问的.恰好我司正是这种场景,写一篇二进制方式安装Docker的教程,用来帮助实施同事解决容器部署的第一个难关. 本文将以二进制安装方式,在CentOS7 ...

  5. python用ffmpeg进行视频处理

    1.下载及安装 在ffmpeg官网https://ffmpeg.zeranoe.com/builds/可以下载到需要的版本,然后解压到D盘,添加环境变量(如D:\ffmpeg\bin) 在cmd输入f ...

  6. <四>1:全面掌握Const的用法

    const怎么理解? const修饰的变量不能够在作为左值!!初始化完成后,值不能被修改!! C 和C++中const 的区别? 在C程序中 test.c const int a; 只定义,不做初始化 ...

  7. 更改DataFrame列顺序

    使用pandas进行数据分析的时候,有时会由于各种需求添加了一些列.可是列的顺序并不能符合自己的期望.这个时候就需要对于列的顺序进行调整. import numpy as np import pand ...

  8. react的组件通信

    react的组件通信 1.父组件传子组件 import React, {Component} from 'react'class Father extends Component{ render() ...

  9. 【深入浅出 Yarn 架构与实现】1-1 设计理念与基本架构

    一.Yarn 产生的背景 Hadoop2 之前是由 HDFS 和 MR 组成的,HDFS 负责存储,MR 负责计算. 一)MRv1 的问题 耦合度高:MR 中的 jobTracker 同时负责资源管理 ...

  10. webpack 配置echarts 按需加载

    引入babel-plugin-equire插件,方便使用.yarn add babel-plugin-equire -D 在.babelrc文件中的配置 { "presets": ...