.net?core利用PdfSharpCore操作PDF實(shí)例教程
前序
使用PdfSharpCore請(qǐng)注意使用XGraphics基類,與System.Drawing 的Graphics類似,XGraphics 提供XColor(顏色)、XPen(畫筆)、XBrush(畫刷)、XFont(字體)、XPoint(位置)等對(duì)象。提供很多畫線,矩形,圓,扇形,多邊形,圖,文本等方法。源碼請(qǐng)查看https://github.com/ststeiger/PdfSharpCore/blob/master/PdfSharpCore/Drawing/XGraphics.cs
1.設(shè)置PDF擁有者的密碼,讓PDF防篡改。
代碼很簡(jiǎn)單設(shè)置PdfDocument.SecuritySettings.OwnerPassword
PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify); doc.SecuritySettings.OwnerPassword = "123"; var filePath = $"b.pdf"; doc.Save(filePath);
2.PDF添加頁(yè)眉和頁(yè)腳
(1)添加頁(yè)碼顯示
XStringFormats 指定文本的位置:詳請(qǐng)查看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()}頁(yè)/共{doc.Pages.Count}頁(yè)", font, brush, layoutRectangle, XStringFormats.BottomLeft); } }
(2)添加頁(yè)眉
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)添加頁(yè)腳
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公司版權(quán)所有", font, brush, new XPoint(500, 500), stringFormat); } doc.Save("b.pdf");
4.PDF 添加圖片
//第一步先加載PDF文件 PdfDocument doc = PdfReader.Open(@"a.pdf", PdfDocumentOpenMode.Modify); //導(dǎo)入圖片(地址,文件流) var background = XImage.FromFile(@"QRCode.png"); // var background = XImage.FromStream(()=> stream); //指定PDF 的頁(yè) 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
如需要指定字體,請(qǐng)將字段文件進(jìn)行拷貝(比如雅黑)
COPY /xx/xxx/SIMHEI.TTF /usr/share/fonts/SIMHEI.TTF
總結(jié)
到此這篇關(guān)于.net core利用PdfSharpCore操作PDF實(shí)例的文章就介紹到這了,更多相關(guān).net core用PdfSharpCore操作PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET?Core應(yīng)用JWT進(jìn)行用戶認(rèn)證及Token的刷新方案
本文詳細(xì)講解了ASP.NET?Core應(yīng)用JWT進(jìn)行用戶認(rèn)證及Token的刷新方案,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12防SQL注入 生成參數(shù)化的通用分頁(yè)查詢語(yǔ)句
前些時(shí)間看了玉開兄的“如此高效通用的分頁(yè)存儲(chǔ)過(guò)程是帶有sql注入漏洞的”這篇文章,才突然想起某個(gè)項(xiàng)目也是使用了累似的通用分頁(yè)存儲(chǔ)過(guò)程。2010-07-07解決 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死鎖問題
這篇文章主要介紹了解決 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死鎖問題的相關(guān)資料,需要的朋友可以參考下2016-09-09基于Dapper實(shí)現(xiàn)分頁(yè)效果 支持篩選、排序、結(jié)果集總數(shù)等
這篇文章主要為大家詳細(xì)介紹了基于Dapper實(shí)現(xiàn)分頁(yè)效果,支持篩選,排序,結(jié)果集總數(shù),多表查詢,非存儲(chǔ)過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07.net開發(fā)中幾個(gè)重要的認(rèn)識(shí)誤區(qū)小結(jié)
.net如今已經(jīng)很流行,成為趕時(shí)髦的程序員的首選。但是,大量剛剛接觸.net的程序員的確存在一定的認(rèn)識(shí)誤區(qū),這里先介紹一部分。2010-04-04ynamic LINQ創(chuàng)建高級(jí)查詢服務(wù)
這篇文章主要介紹了ynamic LINQ創(chuàng)建高級(jí)查詢服務(wù),如何使用Dynamic LINQ輕松實(shí)現(xiàn)更強(qiáng)大的高級(jí)查詢服務(wù),下面文章內(nèi)容具有一的的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03在 .NET 項(xiàng)目中復(fù)制資源文件夾到生成目錄的方法
本文主要介紹在使用 Visual Studio 進(jìn)行調(diào)試和發(fā)布時(shí),如何在 .NET 項(xiàng)目中復(fù)制資源文件夾到生成目錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03