跳至頁尾內容
開發者更新

Quartz .NET (對開發者如何運作)

Quartz.NET介紹

對於.NET應用程式而言,Quartz.NET是一個受歡迎的開源任務排程工具包。 它為程式設計師提供了一個強大的基礎,用於計劃和執行在預定時間、間隔或觸發器響應下的任務、計劃或流程。 無論是發送通知、安排任務、生成報告,還是完成定期維護活動,Quartz.NET 都能使在.NET應用程式中構建複雜的排程場景變得更容易。 Quartz.NET是建立從小型應用程式到大型企業系統的作業排程系統的完美選擇。

Quartz.NET 的最新調度器版本提供了與各種支持的資料庫提供者的無縫整合,使開發人員能夠使用方便的擴展方法擴展其功能,同時確保作為託管服務的可靠任務執行。

通過將Quartz.NET與IronPDF整合,使在.NET應用程式中構建具有強大PDF生成能力的可靠排程系統成為可能。 IronPDF提供了一整套建立、修改和顯示PDF文件的工具,而Quartz.NET則提供了一個靈活且可信賴的排程系統。 結合起來,它們使開發人員能夠自動化PDF建立操作作為工作流的一部分或安排背景任務,這提高了應用程式的實用性和功能。

主要功能

靈活的排程

Quartz.NET使程式設計師能夠建立排程,以告訴程式在預定的時間間隔或時間運行(例如,每小時、每天、每30分鐘)。 它與複雜的排程模式(如cron表達式)相容,提供對程式碼、任務和服務執行時間的精確控制。

基於觸發器的執行

在Quartz.NET中,任務可以由多種觸發器啟動。 這些觸發器包括基於日曆的觸發器(例如,排除週末)、根據設定時間表運行的簡單觸發器、作業觸發器以及依賴於外部情況或事件的定製觸發器。

作業持久化

Quartz.NET具有持久化排程任務的能力,使規劃好的任務和已完成的歷史記錄能夠儲存在資料庫中。 保證了與應用程式失效或重新啟動的作業排程彈性,並使高可用性和可擴展性下的作業集群成為可能。

並發控制

Quartz.NET內建的並發控制工具可確保任務在安全且有效地完成。 開發人員可以設置執行緒池、任務優先順序和執行限制來控制作業執行的並發。

作業連結和相依性管理

由於Quartz.NET支持作業連結和相依性管理,開發人員可以按照指定的順序執行作業並定義它們之間的關係。 這使得為背景任務、服務和流程建立複雜的編排情境成為可能。

錯誤處理和重試技術

為了讓失敗得到正常處理,Quartz.NET具有錯誤處理和重試技術。 在出現臨時失敗或異常的情況下,開發人員可以設置重試策略和錯誤處理技術,以確保任務得到重試或重新排程。

群集與可擴展性

得益於Quartz.NET在分佈式作業排程中對群集的支持,可以協調多個調度器實例並在伺服器集群中執行任務。 這使得在分佈式環境中實現橫向擴展性和容錯保障了可靠的作業調度器和執行。

與.NET生態系統的整合

Quartz.NET輕鬆地與.NET生態系統進行整合,其中包括訊息系統(Rebus.NET、MassTransit)、日誌記錄框架(Serilog、NLog)和流行的依賴注入框架(Autofac、Microsoft.Extensions.DependencyInjection)。

建立和配置Quartz.NET

定義任務和觸發器

為要運行的任務建立作業和觸發器。 任務用一個內容物件和一個作業類表示,而作業的執行頻率和時間由觸發器決定。

using Quartz;

// Define a job by implementing the IJob interface
public class MyJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // Implement the logic for your job here
    }
}

// Build the job instance using JobBuilder
var job = JobBuilder.Create<MyJob>()
    .WithIdentity("myJob", "group1") // Assign a unique name and group to the job
    .Build();

// Create a trigger to define when the job should be executed
var trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "group1") // Assign a unique name and group to the trigger
    .WithCronSchedule("0 0/5 * * * ?") // Run every 5 minutes based on the cron expression
    .Build();
using Quartz;

// Define a job by implementing the IJob interface
public class MyJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // Implement the logic for your job here
    }
}

// Build the job instance using JobBuilder
var job = JobBuilder.Create<MyJob>()
    .WithIdentity("myJob", "group1") // Assign a unique name and group to the job
    .Build();

// Create a trigger to define when the job should be executed
var trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "group1") // Assign a unique name and group to the trigger
    .WithCronSchedule("0 0/5 * * * ?") // Run every 5 minutes based on the cron expression
    .Build();
Imports Quartz

' Define a job by implementing the IJob interface
Public Class MyJob
	Implements IJob

	Public Async Function Execute(ByVal context As IJobExecutionContext) As Task
		' Implement the logic for your job here
	End Function
End Class

' Build the job instance using JobBuilder
Private job = JobBuilder.Create(Of MyJob)().WithIdentity("myJob", "group1").Build()

' Create a trigger to define when the job should be executed
Private trigger = TriggerBuilder.Create().WithIdentity("myTrigger", "group1").WithCronSchedule("0 0/5 * * * ?").Build()
$vbLabelText   $csharpLabel

配置和初始化調度器

在使用指定配置設置好作業調度器以排程背景任務、作業和觸發器之後,啟動調度器以開始計劃並執行任務。

using Quartz;
using Quartz.Impl;

// Create a scheduler factory and get a scheduler instance
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler(); 

// Start the scheduler
await scheduler.Start();

// Schedule the job with its corresponding trigger
await scheduler.ScheduleJob(job, trigger);
using Quartz;
using Quartz.Impl;

// Create a scheduler factory and get a scheduler instance
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler(); 

// Start the scheduler
await scheduler.Start();

// Schedule the job with its corresponding trigger
await scheduler.ScheduleJob(job, trigger);
Imports Quartz
Imports Quartz.Impl

' Create a scheduler factory and get a scheduler instance
Private schedulerFactory = New StdSchedulerFactory()
Private scheduler = await schedulerFactory.GetScheduler()

' Start the scheduler
Await scheduler.Start()

' Schedule the job with its corresponding trigger
Await scheduler.ScheduleJob(job, trigger)
$vbLabelText   $csharpLabel

作業持久化

設置Quartz.NET將作業和觸發器元資料儲存在持久性儲存中,例如資料庫。 這保證了可靠性,並允許任務在應用重新啟動後持續存在。

錯誤處理

將錯誤處理和重試邏輯整合到您的作業執行邏輯中,以優雅地處理失敗。 Quartz.NET提供了管理異常和重試任務的內建方法。

群集

在分佈式環境中使用Quartz.NET時要設置群集以保證高可用性和可擴展性。 由於群集,調度器實例可以協同工作並在多個伺服器集群中執行任務。

依賴注入

如果您的應用程式使用依賴注入框架,就要設置Quartz.NET與您的依賴注入(DI)容器進行通信,以管理作業依賴性、配置和生命周期。

IronPDF

⟨IMG-27-BG⟩Quartz .NET(如何為開發者工作):圖1 - IronPDF網頁⟨IMG-27-EG⟩

一個著名的.NET包IronPDF允許在.NET程式中建立、修改和渲染PDF文件。 提供與PDF互動的多種功能:從HTML內容、照片或未經處理的資料建立PDF; 向現有PDF文件新增文字、圖像和形狀; 將HTML頁面轉換為PDF; 從PDF中提取文字和圖像。

IronPDF在HTML到PDF轉換方面表現出色,確保精確保留原始佈局和樣式。 它特別適合從基於網頁的內容建立PDF,例如報告、發票和文件。 IronPDF支持HTML文件、URL和原始HTML字串,可輕鬆製作高質量的PDF文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert an HTML string to a PDF document
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert an HTML file to a PDF document
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert a URL to a PDF document
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert an HTML string to a PDF document
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert an HTML file to a PDF document
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert a URL to a PDF document
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert an HTML string to a PDF document
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert an HTML file to a PDF document
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert a URL to a PDF document
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF的簡單性和使用便捷性是其兩大優勢之一。 開發人員可以通過其人性化的API和詳盡的文件輕鬆地在他們的.NET專案中開始生成PDF。 IronPDF的速度和效率是進一步的特徵,使開發人員能夠快速有效地建立高質量的PDF文件。

IronPDF核心功能

  • 從原始資料、HTML和圖像建立PDF。
  • 從PDF文件中提取文字和圖像。
  • 允許在PDF文件中包含標題、頁腳和水印。
  • 建立具有密碼和加密安全性的PDF文件。
  • 提供工具以填寫表單和進行數位簽章。

使用Quartz與IronPDF

若要在控制檯或ASP.NET Core應用中開始使用IronPDF與Quartz.NET,可以使用IronPDF來建立一個排程的背景任務以運行與PDF生成相關的一些任務。

安裝Quartz和IronPDF包

首先,確保您已經在Visual Studio包管理控制台中使用以下命令為您的.NET專案安裝所需的IronPDF和Quartz.NET的NuGet包:

Install-Package Quartz
Install-Package IronPdf
Install-Package Quartz
Install-Package IronPdf
SHELL

程式碼範例

本節演示如何建立一個利用IronPDF用於生成PDF文件的Quartz作業。

using Quartz;
using IronPdf;

// Implementing a job that generates a PDF using IronPDF
public class PdfGenerationJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // Generating PDF using IronPDF
        var htmlContent = "<h1>Hello, IronPDF!</h1>";
        var pdfRenderer = new HtmlToPdf();
        var pdfDocument = pdfRenderer.RenderHtmlAsPdf(htmlContent);

        // Save the generated PDF to a file
        pdfDocument.SaveAs("output.pdf");
    }
}
using Quartz;
using IronPdf;

// Implementing a job that generates a PDF using IronPDF
public class PdfGenerationJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // Generating PDF using IronPDF
        var htmlContent = "<h1>Hello, IronPDF!</h1>";
        var pdfRenderer = new HtmlToPdf();
        var pdfDocument = pdfRenderer.RenderHtmlAsPdf(htmlContent);

        // Save the generated PDF to a file
        pdfDocument.SaveAs("output.pdf");
    }
}
Imports Quartz
Imports IronPdf

' Implementing a job that generates a PDF using IronPDF
Public Class PdfGenerationJob
	Implements IJob

	Public Async Function Execute(ByVal context As IJobExecutionContext) As Task
		' Generating PDF using IronPDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1>"
		Dim pdfRenderer = New HtmlToPdf()
		Dim pdfDocument = pdfRenderer.RenderHtmlAsPdf(htmlContent)

		' Save the generated PDF to a file
		pdfDocument.SaveAs("output.pdf")
	End Function
End Class
$vbLabelText   $csharpLabel

設置Quartz.NET以使用觸發器在預定排程下運行PDF建立過程。

// Create and configure the Quartz scheduler
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();

// Define the job and bind it to our PdfGenerationJob class
var job = JobBuilder.Create<PdfGenerationJob>()
    .WithIdentity("pdfGenerationJob", "pdfGenerationGroup")
    .Build();

// Define a trigger to schedule the PDF generation job
var trigger = TriggerBuilder.Create()
    .WithIdentity("pdfGenerationTrigger", "pdfGenerationGroup")
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(30) // Run every 30 minutes
        .RepeatForever())
    .Build();

// Schedule the job using the scheduler
await scheduler.ScheduleJob(job, trigger);
// Create and configure the Quartz scheduler
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();

// Define the job and bind it to our PdfGenerationJob class
var job = JobBuilder.Create<PdfGenerationJob>()
    .WithIdentity("pdfGenerationJob", "pdfGenerationGroup")
    .Build();

// Define a trigger to schedule the PDF generation job
var trigger = TriggerBuilder.Create()
    .WithIdentity("pdfGenerationTrigger", "pdfGenerationGroup")
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(30) // Run every 30 minutes
        .RepeatForever())
    .Build();

// Schedule the job using the scheduler
await scheduler.ScheduleJob(job, trigger);
' Create and configure the Quartz scheduler
Dim schedulerFactory = New StdSchedulerFactory()
Dim scheduler = Await schedulerFactory.GetScheduler()
Await scheduler.Start()

' Define the job and bind it to our PdfGenerationJob class
Dim job = JobBuilder.Create(Of PdfGenerationJob)().WithIdentity("pdfGenerationJob", "pdfGenerationGroup").Build()

' Define a trigger to schedule the PDF generation job
Dim trigger = TriggerBuilder.Create().WithIdentity("pdfGenerationTrigger", "pdfGenerationGroup").WithSimpleSchedule(Function(x) x.WithIntervalInMinutes(30).RepeatForever()).Build()

' Schedule the job using the scheduler
Await scheduler.ScheduleJob(job, trigger)
$vbLabelText   $csharpLabel

啟動Quartz調度器並開始計劃執行任務的操作:

// Start the scheduler
await scheduler.Start();
// Optionally, monitor scheduler for job execution
// Start the scheduler
await scheduler.Start();
// Optionally, monitor scheduler for job execution
' Start the scheduler
Await scheduler.Start()
' Optionally, monitor scheduler for job execution
$vbLabelText   $csharpLabel

以下是從上面的程式碼生成的輸出。

⟨IMG-28-BG⟩Quartz .NET(如何為開發者工作):圖2 - IronPDF和Quartz.NET程式碼範例的輸出⟨IMG-28-EG⟩

結論

總而言之,Quartz.NET和IronPDF的組合提供了一種強大的方法來自動化在.NET應用程式中生成PDF的相關運作。 通過Quartz.NET強大且靈活的排程系統,開發人員可以建立任務和觸發器,以在預定時段或時間執行操作。 另一方面,IronPDF為開發人員提供了他們需要的所有工具來建立和處理PDF文件。 使用HTML、圖形或原始資料,開發人員可以建立專業外觀的PDF。

開發人員可以利用IronPDF的PDF建立功能與Quartz.NET的排程功能,通過在分佈式應用中在預定時間或對觸發器做出反應的情況下自動化典型的PDF生成操作(例如:建立報告、發票或文件)。 此結合通過簡化文件生成工作流程提高了生產力,並減少了手動勞動,使開發人員能夠更輕鬆地生成和發送高品質的PDF文件給客戶或客戶。

IronPDF價格合理,並且在購買套餐時附帶終身許可證。 此套件僅需單次收費$999,即可為多個系統提供極高的價值。 它為許可證持有人提供全天候的線上工程支援。 要了解更多有關Iron Software製造的產品,請存取Iron Software網站上Iron Software產品頁面。

常見問題

我可以如何在.NET應用程式中自動化生成PDF?

您可以通過將Quartz.NET與IronPDF整合來自動化PDF建立。Quartz.NET處理排程任務,而IronPDF允許您從HTML、圖片或原始資料生成PDF。

使用Quartz.NET進行任務排程有什麼好處?

Quartz.NET提供一個堅固的框架來排程任務,具備彈性的排程、依觸發條件執行、任務持久化、並行控制、任務鏈結、錯誤處理、重試技術以及用於擴展的集群等功能。

IronPDF如何簡化.NET中的PDF生成過程?

IronPDF藉由提供一個使用者友好的API,把HTML、圖片或原始資料轉換為PDF文件,簡化了PDF生成過程,適合製作報告、發票和文件。它保持原始佈局和樣式,確保高品質輸出。

Quartz.NET和PDF工具可以整合以增強工作流程自動化嗎?

是的,將Quartz.NET與像IronPDF這樣的PDF工具整合,可以透過在.NET應用程式中排程和自動化PDF生成任務,提高清效率和生產力。

什麼是Quartz.NET中的任務持久性,為什麼它很重要?

Quartz.NET中的任務持久性是指能夠將排程任務及其歷史記錄儲存在資料庫中,確保能夠抵禦應用程式故障或重啟的恢復能力。對於維持任務排程及啟用任務集群來說至關重要。

我如何在.NET應用程式中將HTML轉換為PDF?

您可以使用IronPDF的RenderHtmlAsPdf方法將HTML字串轉換為PDF,或使用RenderHtmlFileAsPdf直接將HTML文件轉換為PDF。

Quartz.NET支援哪些型別的排程模式?

Quartz.NET支持各種排程模式,包括cron 表達式,提供對執行時間的精確控制,並能夠實現複雜的排程方案。

我如何在我的.NET專案中安裝Quartz.NET和IronPDF?

使用Visual Studio封裝管理員主控台安裝Quartz.NET和IronPDF,命令為:Install-Package QuartzInstall-Package IronPdf

IronPDF的PDF操作核心功能有哪些?

IronPDF提供的功能包括從HTML、圖片或原始資料建立PDF,提取文字和圖片,新增標頭、頁尾和水印,以及像密碼保護這樣的安全選項。

Quartz.NET與IronPDF的整合如何增強.NET應用程式?

整合Quartz.NET與IronPDF可以自動化PDF生成和任務排程,簡化工作流程,提升.NET應用程式的生產力。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話