日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# PDF附件生成

發布時間:2024/3/13 C# 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# PDF附件生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近項目上需要生成行業某證件,查閱了一下,大體有兩個思路可以實現

1.圖片格式

2.PDF格式

使用圖片格式,GDI+繪圖的形式,GDI+繪圖相關庫資料比較多,難度也還好,問題是生成的證不是很好看,看上去別扭。最后還是決定用PDF格式生成

查閱了PDF生成相關資料,C#的相當相當少。已有的庫,查閱到了包括 Aspose.PDF,QuestPDF,IText7

Aspose.PDF是商業版,需要授權,資料很少,嘗試著寫了一點,不是很好實現。

QuestPDF,查了以下資料,讓人眼前一亮的寫法,全部靠lambda表達式的方式操作,使用起來較容易上手

本地寫完之后,放到IIS中,發現與IIS沖突,未查到解決資料。大體報的異常:

Unable to load library 'libSkiaSharp'

QuestPDF.Drawing.FontManager”的類型初始值設定項引發異常

只能放棄

因此,今天主要介紹iText7庫的使用。

一、iText7 生成PDF

1.iText7 字體處理

默認的字體,除了顯示不好看以外,還容易不顯示中文。一直覺得字體是最簡單,最常用的部分,應該類似 .setFont("宋體")的形式就可以實現,而pdf相關操作庫中,字體處理都稍微麻煩。

FontProgram fontProgram =FontProgramFactory.CreateFont(fontpath); PdfFont fontTitle = PdfFontFactory.CreateFont(fontProgram, PdfEncodings.IDENTITY_H);

fontTitle對象可以在后續的代碼中直接使用。

說明:上面主要參數是 字體庫的路徑。此處需要注意,對于windows默認的字體,可以直接通過路徑 “C:/windows/Fonts/simhei.ttf” 引用,對于非操作系統自帶的字體,用戶自己安裝的字體,不能從?“C:/windows/Fonts"路徑找到安裝后的路徑加載,通過windows路徑加載,會產生如下錯誤:

System.IO.IOException:“C:\Windows\Fonts\方正大標宋簡體.ttf not found as file or resource.

?需要使用下載的原字體文件(比如:“D:\TEMP\fonts\SourceHanSansCN-Medium-2.otf”)進行直接加載。

另外,windows/fonts中,除了包含 .ttf的字體,還包括 .ttc的字體,該類字體大體是一種集合的形式,具體加載代碼如下:

PdfFont titleFont = PdfFontFactory.CreateFont(@"C:\Windows\Fonts\simsun.ttc,0",PdfEncodings.IDENTITY_H);

以上路徑字符,第一個是字體路徑,第二個數值,代表的應該是字體在集合中的索引。

另外,關于字體版權,有些字體是需要授權的,不授權的話無法再pdf庫中使用,會報如下錯誤

iText.Kernel.Exceptions.PdfException:“FZDBSJW--GB1-0Regular cannot be embedded due to licensing?

2.頁面設置

PdfWriter writer = new PdfWriter(@"D:\TEMP\nn.pdf"); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf); pdf.SetDefaultPageSize(PageSize.A4.Rotate());

3.背景圖片設置

//背景圖片 PdfCanvas canvas = new PdfCanvas(pdf.AddNewPage()); canvas.AddImageFittedIntoRectangle(ImageDataFactory.Create(backgroundimg), PageSize.A4.Rotate(), false);

4.表格相關

Table table = new Table(UnitValue.CreatePercentArray(new float[] { 3,5,4f,5})).UseAllAvailableWidth(); table.SetMarginLeft(120); table.SetMarginRight(100); table.SetMarginTop(16);

第一行數組指代表格的列數,每列寬度所占比。Cell的SetWidth()方法測試無效(可能是我用法不對)

上述setMarginLeft之類的方法,與html中 margin類似

5.一個Paragraph中多個樣式

Paragraph py = new Paragraph("2023").SetFont(fontTNR).SetFontSize(valFontSize); Paragraph pyc = new Paragraph("年").SetFont(fontDX).SetFontSize(valFontSize); Paragraph pm = new Paragraph("05").SetFont(fontTNR).SetFontSize(valFontSize); Paragraph pmc = new Paragraph("月").SetFont(fontDX).SetFontSize(valFontSize); Paragraph groupPP = new Paragraph(); groupPP.Add(py).Add(pyc).Add(pm).Add(pmc);

6.圖片插入

var ii = QRAssister.GetQRCode("http://www.baidu.com", 100, 100);Image img = new Image(ImageDataFactory.Create(ii, System.Drawing.Color.Transparent));img.SetWidth(70);img.SetHeight(70);img.SetMarginTop(-85);img.SetMarginLeft(190);document.Add(img);

二、QuestPDF庫生成PDF

0.開始

QuestPDF庫通過lambda表達式的方式使用,代碼看上去比較神奇。

Document.Create(container =>{container.Page(page =>{//設置頁面page.Size(PageSizes.A4.Landscape());//設置內容page.Content().PaddingVertical(2, Unit.Centimetre).Column(x =>{x.Spacing(20);x.Item().AlignCenter().Text("此處寫入文字內容").FontSize(30).LetterSpacing(0.3f).Bold();});});});});}).GeneratePdf(pdfpath);

1.字體處理

FontManager.RegisterFont(File.OpenRead(@"C:\Windows\Fonts\simhei.ttf")); //黑體 FontManager.RegisterFont(File.OpenRead(@"C:\Windows\Fonts\simsun.ttc")); //宋體 FontManager.RegisterFont(File.OpenRead(@"C:\Windows\Fonts\simfang.ttf")); //仿宋

2.頁面設置

page.Size(PageSizes.A4.Landscape()); page.MarginTop(1, Unit.Centimetre); page.MarginBottom(1, Unit.Centimetre); page.MarginLeft(3, Unit.Centimetre); page.MarginRight(3, Unit.Centimetre); page.DefaultTextStyle(x => x.FontSize(20).FontFamily("黑體"));

3.背景圖片

page.Background().Image(backgroundimg,ImageScaling.Resize);

4.圖片插入

x.Item().Row(r => {var ii = r.ConstantItem(7, Unit.Centimetre).AlignLeft().PaddingLeft(10);ii.Image(qrpath, ImageScaling.FitHeight); });

總結

以上是生活随笔為你收集整理的C# PDF附件生成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。