# 簡介
之前是用console專案開發所以使用itextSharp
但是後面發現專案用blazor開發,itextSharp不支援
才找到iText7支援 .net Core
# 環境設定
在NuGet抓取 itext7/itext7.bouncy-castle-adapter
這兩個套件

使用上面只要using就可以使用了

# 使用介紹
```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);
```
### 最後
有問題歡迎聯絡~最近才剛始寫文章文筆如果不好閱讀歡迎指教