欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在C#中生成PDF的步驟詳解

 更新時間:2024年10月31日 08:30:13   作者:TeamDev  
在?.NET?世界中,存在許多?PDF?庫,但我們發(fā)現(xiàn),使用集成瀏覽器生成?PDF?更為簡單,由于?DotNetBrowser?可以在完全脫離屏幕的情況下工作,本文給大家介紹了如何在?C#?中生成?PDF,需要的朋友可以參考下

此分步教程展示了如何使用 DotNetBrowserC# 中生成 PDF 文件。

在 .NET 世界中,存在許多 PDF 庫。但我們發(fā)現(xiàn),使用集成瀏覽器生成 PDF 更為簡單。由于 DotNetBrowser 可以在完全脫離屏幕的情況下工作,因此無論是在 Windows 還是 Linux 的服務器上,您都可以使用它。

算法很簡單:

  • 加載頁面。
  • 填充頁面數(shù)據(jù)。
  • 配置打印機。
  • 將頁面打印為 PDF。

步驟 1: 創(chuàng)建項目

對于我們的任務,我們不需要用戶界面。因此,我們創(chuàng)建一個控制臺應用程序。

打開終端或命令提示符,導航到所需的目錄,并運行以下命令:

dotnet new console -o PdfGeneration

步驟 2: 集成 DotNetBrowser

將目錄更改為 PdfGeneration 并從 NuGet 添加 DotNetBrowser 包:

# 對于 Windows 平臺:
dotnet add package DotNetBrowser

# 對于其他平臺:
dotnet add package DotNetBrowser.Linux-x64
dotnet add package DotNetBrowser.Linux-arm64
dotnet add package DotNetBrowser.macOS-x64
dotnet add package DotNetBrowser.macOS-arm64

之后, 獲取您的免費許可證以開始使用 DotNetBrowser。

步驟 3: 加載頁面

創(chuàng)建一個簡單的控制臺應用程序,以啟動 DotNetBrowser 并加載帶有模板的頁面。

class Program
{
    private static async Task Main()
    {
        var options = new EngineOptions.Builder
        {
            RenderingMode = RenderingMode.OffScreen,
            LicenseKey = "您的許可證密鑰"
        }.Build();

        using var engine = EngineFactory.Create(engineOptions);
        using var browser = engine.CreateBrowser();

        // 頁面是項目中的一個資源。
        var pageUrl = Path.GetFullPath("template.html");   
        await browser.Navigation.LoadUrl(pageUrl);
    }
}

這是一個在常規(guī)瀏覽器中加載的普通頁面。因此,您可以利用任何 JavaScript 庫(如 plotly.js 或 D3.js)、WebGL、SVG 圖形、或者 Chromium 中可用的其他任何技術(shù)。

步驟 4: 填充頁面數(shù)據(jù)

要填充頁面數(shù)據(jù),請使用 DOM API 或執(zhí)行任何 JavaScript 代碼。我們將使用嵌入到頁面中的幾個 JavaScript 函數(shù):

private static void FillInData(IBrowser browser)
{
    var accountNumber = "123-4567";
    var name = "李白";
    var address = "1640 河濱大道";
    var reportingPeriod = "1985 年 10 月 25 日至 11 月 25 日";
    browser.MainFrame.ExecuteJavaScript(
        $"setBillInfo('{accountNumber}', '{name}', '{address}', '{reportingPeriod}')"
    );

    var dayCost = 500; // 美元。
    var dayUsage = 1.21; // 吉瓦特。
    var nightCost = 312;
    var nightUsage = 88;

    browser.MainFrame.ExecuteJavaScript(
        $"addCharge('Day Tariff', {dayUsage}, {dayCost});" +
        $"addCharge('Night Tariff', {nightUsage}, {nightCost});"
    );
}

步驟 5: 配置打印設置

指示瀏覽器自動打印,并配置打印參數(shù):

private static TaskCompletionSource<string> ConfigurePrinting(IBrowser browser)
{
    // 指示瀏覽器自動打印,而不是顯示打印預覽。
    browser.RequestPrintHandler = 
        new Handler<RequestPrintParameters, RequestPrintResponse>(
            p => RequestPrintResponse.Print()
        );

    TaskCompletionSource<string> whenCompleted = new();
    // 當瀏覽器打印 HTML 頁面時。
    browser.PrintHtmlContentHandler = 
        new Handler<PrintHtmlContentParameters, PrintHtmlContentResponse>(
            parameters =>
            {
                // 使用 PDF 打印機。
                var printer = parameters.Printers.Pdf;
                var job = printer.PrintJob;
    
                // 為 PDF 文件生成隨機名稱。
                var guid = Guid.NewGuid().ToString();
                var path = Path.GetFullPath($"{guid}.pdf");
                job.Settings.PdfFilePath = path;
    
                // 去除邊緣的空白區(qū)域。
                job.Settings.PageMargins = PageMargins.None;
                // 移除瀏覽器默認的頁眉和頁腳。
                job.Settings.PrintingHeaderFooterEnabled = false;
                job.PrintCompleted += (_, _) => whenCompleted.SetResult(path);

                // 繼續(xù)打印。
                return PrintHtmlContentResponse.Print(printer);
            });
    return whenCompleted;
}

步驟 6: 生成 PDF 文件

整合以上步驟,開始打印并等待完成:

private static async Task Main()
{
    var engineOptions = new EngineOptions.Builder
    {
        RenderingMode = RenderingMode.OffScreen,
        LicenseKey = "您的許可證密鑰"
    }.Build();

    using var engine = EngineFactory.Create(engineOptions);
    using var browser = engine.CreateBrowser();
    
    await browser.Navigation.LoadUrl(Path.GetFullPath("template.html"));
    
    FillInData(browser);
    var whenPrintCompleted = ConfigurePrinting(browser);
    browser.MainFrame.Print();
    var resultPath = await whenPrintCompleted.Task;
}

結(jié)果

運行程序:

dotnet run

打開生成的 PDF 文件

C# 中由 DotNetBrowser 生成的 PDF 文件

到此這篇關(guān)于在C#中生成PDF的步驟詳解的文章就介紹到這了,更多相關(guān)C#生成PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中SerialPort的使用教程詳解

    C#中SerialPort的使用教程詳解

    SerilPort是串口進行數(shù)據(jù)通信的一個控件,這篇文章主要為大家詳細介紹了C#中SerialPort的使用,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • C#實現(xiàn)完善Excel不規(guī)則合并單元格數(shù)據(jù)導入的示例代碼

    C#實現(xiàn)完善Excel不規(guī)則合并單元格數(shù)據(jù)導入的示例代碼

    本文主要介紹了C#實現(xiàn)完善Excel不規(guī)則合并單元格數(shù)據(jù)導入的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • C# GetMethod方法的應用實例講解

    C# GetMethod方法的應用實例講解

    GetMethod 是獲取當前 Type 的特定方法,具有多個重載, GetMethod 即使用指定的綁定約束搜索指定方法,本文給大家介紹了C# GetMethod方法的應用實例,需要的朋友可以參考下
    2024-04-04
  • c# WPF中如何自定義MarkupExtension

    c# WPF中如何自定義MarkupExtension

    這篇文章主要介紹了c# WPF中如何自定義MarkupExtension,幫助大家更好的理解和學習使用c# wpf,感興趣的朋友可以了解下
    2021-03-03
  • 區(qū)分c# 前臺和后臺線程

    區(qū)分c# 前臺和后臺線程

    這篇文章主要介紹了c# 前臺線程和后臺線程的區(qū)別與聯(lián)系,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#實現(xiàn)全局快捷鍵功能

    C#實現(xiàn)全局快捷鍵功能

    這篇文章介紹了C#實現(xiàn)全局快捷鍵功能的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 深入解析C#設計模式中對橋接模式的具體運用

    深入解析C#設計模式中對橋接模式的具體運用

    這篇文章主要介紹了C#設計模式中對橋接模式的具體運用,橋接模式所強調(diào)的解耦在代碼維護中非常有用,需要的朋友可以參考下
    2016-02-02
  • c# 對cookies(增、刪、改、查)的操作方法

    c# 對cookies(增、刪、改、查)的操作方法

    以前覺得cookies操作無非就那么幾種,但是“杯具事件”還是很多的,下面分享一下對cookies的簡單操作
    2013-04-04
  • WPF微信聊天和通訊錄按鈕樣式代碼分享

    WPF微信聊天和通訊錄按鈕樣式代碼分享

    這篇文章主要為大家分享了WPF微信聊天和通訊錄按鈕樣式代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • C# DialogResult用法案例詳解

    C# DialogResult用法案例詳解

    這篇文章主要介紹了C# DialogResult用法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論