如何在 C# 中建立 PDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

以程式設計方式建立 PDF 通常會面臨重大挑戰,無論是新增頁首和頁尾還是解決相容性問題。 幸運的是,IronSoftware 透過將各種 PDF 創建功能整合為直觀易懂的方法,簡化了這個過程,使開發人員能夠直接投入到他們的專案中。

使用 IronPDF,您可以無縫添加形狀、文字、圖像、頁首和頁尾。 您還可以靈活地設定文件的方向、大小和元數據,並將其匯出為各種標準,例如 PDF/UA 和 PDF/A。 此外,將 IronPDF 整合到現有的應用程式中,用於查看 PDF 文件或以程式設計方式列印文檔,也非常簡單。

在本教學中,我們將探討每個功能,並展示 IronPDF 如何增強開發體驗。 它使您能夠創建可讀且可重複使用的程式碼元件,這些元件可以部署到任何受支援的環境和平台上。

閱讀本文,您將對如何使用 IronPDF 創建符合您需求的、風格獨特且獨特的 PDF 文件有深入的了解。

要開始安裝 IronPDF 並按照本文中概述的教學範例進行操作,請查看此快速安裝指南,它將幫助您順利完成所有設定。

快速入門:使用 IronPDF 建立您的第一個 PDF

使用 IronPDF,只需幾行程式碼即可輕鬆建立您的第一個 C# PDF 檔案。 本快速指南向您展示如何初始化 PDF 文件、新增內容並儲存,確保庫的新開發者能夠順利上手。 幾秒鐘內即可開始建立 PDF 文件,輕鬆擴展您的 C# 應用程式功能。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronPDF

    PM > Install-Package IronPdf

  2. 複製並運行這段程式碼。

    new IronPdf.PdfDocument(500, 500).SaveAs("output.pdf");
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronPDF,免費試用!
    arrow pointer

目錄

設計完美的PDF 建立空白 PDF -新增頁首和頁尾 新增頁碼 -使用 DataURI 嵌入影像 -嵌入來自 Azure Blob 儲存體的映像

!{--010011000100100101000010010100100100000101010010010110010101111101001110010101010101010101010101010101010101010 0100010111110100100101001101010100010000010100110001001100010111110100001001001100010011110010101010

設計您的完美 PDF

建立空白 PDF

使用 IronPDF 建立空白 PDF 非常直覺簡單,只需要幾行程式碼。 我們首先建立一個新的PdfDocument類,為其提供尺寸,然後呼叫SaveAs方法將其儲存。

:path=/static-assets/pdf/content-code-examples/how-to/create-new-pdfs.cs
using IronPdf;

PdfDocument pdf = new PdfDocument(270, 270);

pdf.SaveAs("blankPage.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

立即開始在您的項目中使用 IronPDF 並免費試用。

第一步:
green arrow pointer

新增頁首和頁尾

使用 IronPDF 可以輕鬆地在 PDF 的頂部或底部添加頁首和頁尾。 IronPDF 讓您可以新增兩種類型的頁首和頁尾。 TextHeaderFooter非常適合只需要文字的場景,例如使用字串插值顯示頁碼,例如"{page} of {total-pages}" 。 同時, HtmlHeaderFooter是一個更高級的變體,它允許開發人員自訂他們放置的 HTML 內容。

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

HTML頁首和頁尾

透過設定HtmlHeaderFooter對象,我們可以透過將頁碼包裹在 <headerFooter> 標籤內來自訂文字的顯示位置。<center>新增標籤和圖像素材,以確保文件的唯一性。

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-htmlheaderfooter.cs
using IronPdf;

string headerHtml = @"
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a header!</h1>
    </body>
    </html>";

string footerHtml = @"
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a footer!</h1>
    </body>
    </html>";

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Create header and footer
HtmlHeaderFooter htmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = headerHtml,
    LoadStylesAndCSSFromMainHtmlDocument = true,
};

HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = footerHtml,
    LoadStylesAndCSSFromMainHtmlDocument = true,
};

// Add to PDF
pdf.AddHtmlHeaders(htmlHeader);
pdf.AddHtmlFooters(htmlFooter);
Imports IronPdf

Private headerHtml As String = "
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a header!</h1>
    </body>
    </html>"

Private footerHtml As String = "
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a footer!</h1>
    </body>
    </html>"

' Instantiate renderer and create PDF
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

' Create header and footer
Private htmlHeader As New HtmlHeaderFooter With {
	.HtmlFragment = headerHtml,
	.LoadStylesAndCSSFromMainHtmlDocument = True
}

Private htmlFooter As New HtmlHeaderFooter With {
	.HtmlFragment = footerHtml,
	.LoadStylesAndCSSFromMainHtmlDocument = True
}

' Add to PDF
pdf.AddHtmlHeaders(htmlHeader)
pdf.AddHtmlFooters(htmlFooter)
$vbLabelText   $csharpLabel

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

文字頁首和頁尾

下面的範例使用有佔位符值的TextHeaderFooter來表示頁碼、URL 和日期。

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-add-textheaderfooter.cs
using IronPdf;

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter
{
    CenterText = "This is the header!",
};

// Create text footer
TextHeaderFooter textFooter = new TextHeaderFooter
{
    CenterText = "This is the footer!",
};

// Add text header and footer to the PDF
pdf.AddTextHeaders(textHeader);
pdf.AddTextFooters(textFooter);

pdf.SaveAs("addTextHeaderFooter.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

除了上面顯示的欄位外,我們還有以下佔位符值可用,這些值將在渲染時被替換: {page}{total-pages}{url}{date}{time}{html-title}{pdf-title}

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

新增頁碼

與上面的範例類似,我們可以使用TextHeaderFooterHtmlHeaderFooter透過在頁首或頁尾中放置佔位符值來顯示頁碼,這些值將在文件呈現時顯示。

:path=/static-assets/pdf/content-code-examples/how-to/page-numbers-basic.cs
using IronPdf;

// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter()
{
    CenterText = "{page} of {total-pages}"
};

// Create html footer
HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"
};

// Render a new PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Add header and footer
pdf.AddTextHeaders(textHeader);
pdf.AddHtmlFooters(htmlFooter);

pdf.SaveAs("pdfWithPageNumber.pdf");
Imports IronPdf

' Create text header
Private textHeader As New TextHeaderFooter() With {.CenterText = "{page} of {total-pages}"}

' Create html footer
Private htmlFooter As New HtmlHeaderFooter() With {.HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"}

' Render a new PDF
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

' Add header and footer
pdf.AddTextHeaders(textHeader)
pdf.AddHtmlFooters(htmlFooter)

pdf.SaveAs("pdfWithPageNumber.pdf")
$vbLabelText   $csharpLabel

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

使用 DataURI 嵌入影像

有些時候,依賴資源目錄會太慢、效率太低;因此,我們可以用資料 URI 嵌入映像作為變通方法。 以下是實作方法的簡短程式碼片段。

:path=/static-assets/pdf/content-code-examples/how-to/datauris-image.cs
using IronPdf;
using System;

// Read byte from image file
var pngBinaryData = System.IO.File.ReadAllBytes("My_image.png");

// Convert bytes to base64
var ImgDataURI = @"data:image/png;base64," + Convert.ToBase64String(pngBinaryData);

// Import base64 to img tag
var ImgHtml = $"<img src='{ImgDataURI}'>";

ChromePdfRenderer Renderer = new ChromePdfRenderer();

// Render the HTML string
var pdf = Renderer.RenderHtmlAsPdf(ImgHtml);

pdf.SaveAs("datauri_example.pdf");
Imports IronPdf
Imports System

' Read byte from image file
Private pngBinaryData = System.IO.File.ReadAllBytes("My_image.png")

' Convert bytes to base64
Private ImgDataURI = "data:image/png;base64," & Convert.ToBase64String(pngBinaryData)

' Import base64 to img tag
Private ImgHtml = $"<img src='{ImgDataURI}'>"

Private Renderer As New ChromePdfRenderer()

' Render the HTML string
Private pdf = Renderer.RenderHtmlAsPdf(ImgHtml)

pdf.SaveAs("datauri_example.pdf")
$vbLabelText   $csharpLabel

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

OpenAI for PDF

IronPDF 透過支援 OpenAI 模型來提高效率和可擴展性,實現快速摘要、查詢和記憶,所有這些都利用了 Microsoft Semantic Kernel。 以下是使用 OpenAI 快速概括 PDF 內容的簡短程式碼片段。

:path=/static-assets/pdf/content-code-examples/how-to/openai-summarize.cs
using IronPdf;
using IronPdf.AI;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Memory;
using System;
using System.Threading.Tasks;

// Setup OpenAI
var azureEndpoint = "<<enter your azure endpoint here>>";
var apiKey = "<<enter your azure API key here>>";
var builder = Kernel.CreateBuilder()
    .AddAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey)
    .AddAzureOpenAIChatCompletion("oaichat", azureEndpoint, apiKey);
var kernel = builder.Build();

// Setup Memory
var memory_builder = new MemoryBuilder()
    // optionally use new ChromaMemoryStore("http://127.0.0.1:8000") (see https://github.com/microsoft/semantic-kernel/blob/main/dotnet/notebooks/09-memory-with-chroma.ipynb)
    .WithMemoryStore(new VolatileMemoryStore())
    .WithAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey);
var memory = memory_builder.Build();

// Initialize IronAI
IronDocumentAI.Initialize(kernel, memory);

License.LicenseKey = "<<enter your IronPdf license key here";

// Import PDF document
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Summarize the document
Console.WriteLine("Please wait while I summarize the document...");
string summary = await pdf.Summarize(); // optionally pass AI instance or use AI instance directly
Console.WriteLine($"Document summary: {summary}\n\n");
Imports Microsoft.VisualBasic
Imports IronPdf
Imports IronPdf.AI
Imports Microsoft.SemanticKernel
Imports Microsoft.SemanticKernel.Connectors.OpenAI
Imports Microsoft.SemanticKernel.Memory
Imports System
Imports System.Threading.Tasks

' Setup OpenAI
Private azureEndpoint = "<<enter your azure endpoint here>>"
Private apiKey = "<<enter your azure API key here>>"
Private builder = Kernel.CreateBuilder().AddAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey).AddAzureOpenAIChatCompletion("oaichat", azureEndpoint, apiKey)
Private kernel = builder.Build()

' Setup Memory
Private memory_builder = (New MemoryBuilder()).WithMemoryStore(New VolatileMemoryStore()).WithAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey)
Private memory = memory_builder.Build()

' Initialize IronAI
IronDocumentAI.Initialize(kernel, memory)

License.LicenseKey = "<<enter your IronPdf license key here"

' Import PDF document
Dim pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf")

' Summarize the document
Console.WriteLine("Please wait while I summarize the document...")
Dim summary As String = Await pdf.Summarize() ' optionally pass AI instance or use AI instance directly
Console.WriteLine($"Document summary: {summary}" & vbLf & vbLf)
$vbLabelText   $csharpLabel

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

完全PDF客製

方向與旋轉

方向

RenderingOptions類別中的PaperOrientation屬性可讓您指定 PDF 的渲染方向。 在這個例子中,我們將其設定為PdfPaperOrientation.Landscape ,使 PDF 的方向以橫向模式渲染。

:path=/static-assets/pdf/content-code-examples/tutorials/csharp-create-pdf-complete-1.cs

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Change paper orientation
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;

PdfDocument pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");

pdf.SaveAs("landscape.pdf");
Dim renderer As New ChromePdfRenderer()

' Change paper orientation
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape

Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")

pdf.SaveAs("landscape.pdf")
$vbLabelText   $csharpLabel

旋轉

要設定 PDF 頁面的旋轉角度,我們可以使用SetPageRotation方法,並以PdfPageRotation列舉作為輸入來旋轉頁面。

:path=/static-assets/pdf/content-code-examples/how-to/page-orientation-rotation-set-rotation.cs
using IronPdf;
using IronPdf.Rendering;
using System.Collections.Generic;

PdfDocument pdf = PdfDocument.FromFile("landscape.pdf");

// Set all pages
pdf.SetAllPageRotations(PdfPageRotation.Clockwise90);

// Set a single page
pdf.SetPageRotation(1, PdfPageRotation.Clockwise180);

// Set multiple pages
List<int> selectedPages = new List<int>() { 0, 3 };
pdf.SetPageRotations(selectedPages, PdfPageRotation.Clockwise270);

pdf.SaveAs("rotatedLandscape.pdf");
Imports IronPdf
Imports IronPdf.Rendering
Imports System.Collections.Generic

Private pdf As PdfDocument = PdfDocument.FromFile("landscape.pdf")

' Set all pages
pdf.SetAllPageRotations(PdfPageRotation.Clockwise90)

' Set a single page
pdf.SetPageRotation(1, PdfPageRotation.Clockwise180)

' Set multiple pages
Dim selectedPages As New List(Of Integer)() From {0, 3}
pdf.SetPageRotations(selectedPages, PdfPageRotation.Clockwise270)

pdf.SaveAs("rotatedLandscape.pdf")
$vbLabelText   $csharpLabel

有關設定 PDF 方向和旋轉的更詳細說明以及探索其附加功能,請參閱我們的綜合操作指南

自訂紙張尺寸

使用SetCustomPaperSizeinCentimeters方法設定widthheight ,從而設定 PDF 的尺寸。 IronPDF 也支援透過將PaperSize屬性設定為可用枚舉清單來設定標準尺寸,例如 A4。

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

自訂紙張尺寸(公分)

:path=/static-assets/pdf/content-code-examples/how-to/custom-paper-size-cm.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set custom paper size in cm
renderer.RenderingOptions.SetCustomPaperSizeinCentimeters(15, 15);

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Custom Paper Size</h1>");

pdf.SaveAs("customPaperSize.pdf");
Imports IronPdf

Private renderer As New ChromePdfRenderer()

' Set custom paper size in cm
renderer.RenderingOptions.SetCustomPaperSizeinCentimeters(15, 15)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Custom Paper Size</h1>")

pdf.SaveAs("customPaperSize.pdf")
$vbLabelText   $csharpLabel

標準紙張尺寸

在這個例子中,我們也將屬性PaperSize設定為枚舉PdfPaperSize.A4

:path=/static-assets/pdf/content-code-examples/how-to/custom-paper-size-standard-paper-size.cs
using IronPdf;
using IronPdf.Rendering;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set paper size to A4
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Standard Paper Size</h1>");

pdf.SaveAs("standardPaperSize.pdf");
Imports IronPdf
Imports IronPdf.Rendering

Private renderer As New ChromePdfRenderer()

' Set paper size to A4
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Standard Paper Size</h1>")

pdf.SaveAs("standardPaperSize.pdf")
$vbLabelText   $csharpLabel

如需查看支援的標準尺寸列表,請點擊此處

標準合規性

使用 C# 匯出 PDF/A 格式文檔

使用SaveAsPdfUA方法建立並匯出符合 PDF/UA 標準的 PDF 檔案。

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromfile.cs
using IronPdf;

// Create a PdfDocument object or open any PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b);
Imports IronPdf

' Create a PdfDocument object or open any PDF File
Private pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf")

' Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

使用 C# 匯出 PDF/UA 格式文檔

要在 C# 中將 PDF 轉換為 PDF/A,我們也可以使用 IronPDf 庫,它支援最新的 PDF/A 標準,確保文件的完整性; 與上面的例子類似,我們呼叫SaveAsPdfA將 PDF 儲存為 PDF/A 標準。

:path=/static-assets/pdf/content-code-examples/how-to/pdfua-fromfile.cs
using IronPdf;

// Open PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Export as PDF/UA compliance PDF
pdf.SaveAsPdfUA("pdf-ua-wikipedia.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

有關此程式碼片段的更詳細解釋以及探索其附加功能,請參閱我們的綜合操作指南

在這個例子中,我們將 PDF 儲存為 PDF/A-3 變體,並使用PdfAVersions列舉。

如需查看支援的 PDF/A 版本完整列表,請點擊此處

結論

以上簡要範例展示了使用 IronPDF 建立 PDF 時可以解鎖的強大功能和突出特性。

如果您想提出功能請求或對 IronPDF 或許可有任何疑問,請聯絡我們的支援團隊。 我們非常樂意為您提供協助。

常見問題解答

如何在 C# 中使用 IronPDF 創建 PDF 文件?

您可以在 C# 中使用 IronPDF 透過初始化新的 PDF 文件物件並在其中新增文本、圖像和表格等內容,然後儲存該文件來創建 PDF 文件。

IronPDF 提供哪些功能來編輯 PDF?

IronPDF 提供編輯 PDF 的功能,包括添加浮水印、頁首、頁尾和背景。它還支持合併、拆分和壓縮 PDF。

我可以使用 IronPDF 為 PDF 文件添加表單嗎?

可以,IronPDF 允許您向 PDF 文件中添加互動表單。您可以創建諸如文本輸入、複選框和單選按鈕等表單欄位。

IronPDF 是否可以使用密碼保護 PDF?

當然可以,您可以使用 IronPDF 通過設置用戶和擁有者密碼來控制訪問和權限,以密碼保護 PDF 文件。

如何使用 IronPDF 為 PDF 添加浮水印?

要使用 IronPDF 應用浮水印,您可以使用 PDF 編輯功能將文本或圖像覆蓋於您的 PDF 文件的每一頁作為浮水印。

IronPDF 可以壓縮 PDF 文件以減小其大小嗎?

可以,IronPDF 包括壓縮 PDF 文件的功能,幫助在保持質量的同時減小文件大小,以便於儲存和分享。

如何使用 IronPDF 在我的 PDF 上添加頁首和頁尾?

您可以使用 IronPDF 在 PDF 文件中添加頁首和頁尾,具體方法是指定您想在每頁頂部或底部包含的文本或圖像。

IronPDF 是否支持PDF頁面背景的自定義?

IronPDF支持自定義背景,允許您設置圖像或顏色作為PDF頁面的背景,以增強文件的設計。

我可以使用 IronPDF 將 HTML 轉換為 PDF 嗎?

可以,IronPDF 提供將 HTML 轉換為 PDF 的功能。您可以將包括 CSS 和 JavaScript 的複雜 HTML 內容渲染到 PDF 文件中。

在 C# 項目中使用 IronPDF 的系統要求是什麼?

IronPDF 與 .NET Framework 和 .NET Core 兼容。它需要 Windows、macOS 或 Linux 操作系統,並且可以無縫地整合到使用 Visual Studio 的 C# 項目中。

IronPDF 是否與 .NET 10 完全相容?

是的 - IronPDF 與 .NET 10 完全相容。它可以利用 .NET 10 的性能改進和語言增強功能,與最新的運行時開箱即用。它支援 Windows、macOS、Linux 和容器環境中的 .NET版本 10、9、8、7、6、5、.NET Standard 2.0+ 和 .NET Framework 4.6.2+。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

準備好開始了嗎?
Nuget 下載 16,493,056 | Version: 2025.11 剛發表