# 簡介 之前是用console專案開發所以使用itextSharp 但是後面發現專案用blazor開發,itextSharp不支援 才找到iText7支援 .net Core # 環境設定 在NuGet抓取 itext7/itext7.bouncy-castle-adapter 這兩個套件 ![](https://hackmd.io/_uploads/SJqwx4H92.png) 使用上面只要using就可以使用了 ![](https://hackmd.io/_uploads/Bkgsl4Hqn.png) # 使用介紹 ```csharp= using iText.Kernel.Pdf; using iText.Layout; using iText.Layout.Element; using System; class Program { static void Main(string[] args) { string outputPath = "output.pdf"; // 創建文檔 PdfWriter writer = new PdfWriter(outputPath); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf); // 添加内容到 PDF int rowCount = 5; int columnCount = 3; Random random = new Random(); for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { string randomContent = GetRandomContent(); document.Add(new Paragraph($"第 {i + 1} 列, 第 {j + 1} 欄: {randomContent}")); } } // 關閉文檔 document.Close(); Console.WriteLine("PDF 文件已生成完成。"); } static string GetRandomContent() { string[] contents = { "蘋果", "香蕉", "櫻桃", "橘子", "葡萄", "芒果", "鳳梨", "西瓜", "草莓", "奇異果" }; Random random = new Random(); return contents[random.Next(contents.Length)]; } } ``` # Blazor上使用 blazor上面使用要javascript輸出PDF 1. 在_Host.cshtml裡面加入 ```javascript= <script> function downloadFile(uri, fileName) { const link = document.createElement("a"); link.href = uri; link.download = fileName; document.body.appendChild(link); link.click(); document.body.removeChild(link); } </script> ``` 2.在您使用的razor上面使用 ```csharp= #region 產生PDF private async Task GeneratePDFAsync() { try { // 觸發下載 byte[] pdfBytes = await _pdfService.GetPDFAsync(listData); DownloadPDF("test.pdf", pdfBytes); } catch (Exception ex) { CallAlert(ex.Message); isVisible = false; } } // 调用 JavaScript 下載PDF [JSInvokable] public void DownloadPDF(string fileName, byte[] pdfBytes) { string contentType = "application/pdf"; string base64Data = System.Convert.ToBase64String(pdfBytes); string uri = $"data:{contentType};base64,{base64Data}"; string downloadFileName = $"PDF_REPORT_{DateTime.Now.ToString("yyyyMMdd")}.pdf"; JS.InvokeVoidAsync("downloadFile", uri, downloadFileName); } #endregion ``` 步驟1.將你的pdf轉成 byte[]傳到razor頁面,再來呼叫這一段程式碼就可以產出PDF了 # 補充 ### 塞入圖片 先注入 IWebHostEnvironment ```csharp= private readonly IWebHostEnvironment _webHostEnvironment; public PDFSerive( IWebHostEnvironment webHostEnvironment) { this._webHostEnvironment = webHostEnvironment; } ``` 再來就是取得wwwroot/Image資料夾裡面的照片,取出後放進document,圖片就自動進入了 ```csharp= string headerImagePath = System.IO.Path.Combine(_webHostEnvironment.WebRootPath, "Image", "test.png"); Image headerImage = new Image(ImageDataFactory.Create(GetImageBytes(headerImagePath))); headerImage.SetFixedPosition(36, pageHeight - 56); document.Add(headerImage); ``` ### 分頁 如果有for迴圈執行最後面下這一段語法就是新的頁面 ``` document.Add(new AreaBreak()); ``` ### 頁碼 在你的for迴圈裏面加這一段就會置動置底產生頁碼 (i+1) 我資料從第1筆開始撈,但是PDF計算是1開始所以要自動+1 ``` document.ShowTextAligned(new Paragraph("Page " + (i+1)), 559, 36, (i+1), TextAlignment.RIGHT, VerticalAlignment.BOTTOM, 0); ``` ### 最後 有問題歡迎聯絡~最近才剛始寫文章文筆如果不好閱讀歡迎指教