The Progress Event is available as an add-on to the LEADTOOLS Document and Medical Imaging toolkits.
Document writer progress notification event.Visual Basic (Declaration) | |
---|---|
Public Event Progress As EventHandler(Of DocumentProgressEventArgs) |
Visual Basic (Usage) | Copy Code |
---|---|
Dim instance As DocumentWriter Dim handler As EventHandler(Of DocumentProgressEventArgs) AddHandler instance.Progress, handler |
C# | |
---|---|
public event EventHandler<DocumentProgressEventArgs> Progress |
C++/CLI | |
---|---|
public: event EventHandler<DocumentProgressEventArgs^>^ Progress |
The event handler receives an argument of type DocumentProgressEventArgs containing data related to this event. The following DocumentProgressEventArgs properties provide information specific to this event.
Property | Description |
---|---|
Cancel | Gets or sets a value to allow the user to cancel the current operation. |
Percentage | Gets the value of the completion for the current operation as a percentage. |
This example will show how to use the Progress event to create a Windows Forms dialog box with a progress bar and a cancel button.
Visual Basic | Copy Code |
---|---|
' Windows API functions needed to load/delete an EMF <DllImport("gdi32.dll")> _ Private Shared Function GetEnhMetaFile(ByVal lpszMetaFile As String) As IntPtr End Function <DllImport("gdi32.dll")> _ Private Shared Function DeleteEnhMetaFile(ByVal hemf As IntPtr) As Boolean End Function Private Sub DocumentWriterProgressExample() ' Unlock the support needed for LEADTOOLS Document Writers (with PDF output) RasterSupport.Unlock(RasterSupportType.DocumentWriters, "Replace with your own key here") RasterSupport.Unlock(RasterSupportType.DocumentWritersPdf, "Replace with your own key here") ' Create a new instance of the LEADTOOLS Document Writer Dim docWriter As New DocumentWriter() ' Get the file names to use Dim pdfFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "DocumentWriter.pdf") Dim emfFileNames() As String = _ { _ Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.emf"), _ Path.Combine(LEAD_VARS.ImagesDir, "Ocr2.emf"), _ Path.Combine(LEAD_VARS.ImagesDir, "Ocr3.emf"), _ Path.Combine(LEAD_VARS.ImagesDir, "Ocr4.emf") _ } ' Show the progress dialog Using dlg As New MyProgressDialog(docWriter, emfFileNames, pdfFileName) If (dlg.ShowDialog() = DialogResult.OK) Then MessageBox.Show("Done!") Else MessageBox.Show("User has canceled the operation or an error occured.") End If End Using End Sub ' Dialog box to show the Private Class MyProgressDialog Inherits Form ' The controls on the dialog Private _descriptionLabel As Label Private _progressBar As ProgressBar Private _cancelButton As Button Private _operation As String ' Conversion properties Private _docWriter As DocumentWriter Private _emfFileNames() As String Private _pdfFileName As String ' Has the operation been canceled? Private _isCanceled As Boolean ' Is the dialog working? Private _isWorking As Boolean Public Sub New(ByVal docWriter As DocumentWriter, ByVal emfFileNames() As String, ByVal pdfFileName As String) InitializeComponent() _docWriter = docWriter _emfFileNames = emfFileNames _pdfFileName = pdfFileName _isCanceled = False _isWorking = True End Sub Protected Overrides Sub OnLoad(ByVal e As EventArgs) ' To keep the UI functioning, do the conversion in a separate thread BeginInvoke(New MethodInvoker(AddressOf DoWork)) MyBase.OnLoad(e) End Sub Private Sub DoWork() ' Subscribe to the progress event AddHandler _docWriter.Progress, AddressOf _docWriter_Progress ' Create the document _operation = "Creating the document..." _docWriter.BeginDocument(_pdfFileName, DocumentFormat.Pdf) ' Add the pages For i As Integer = 0 To _emfFileNames.Length - 1 ' Use the Windows API to load the EMF Dim emfHandle As IntPtr = GetEnhMetaFile(_emfFileNames(i)) ' Add the page, notice we will not be using image/text feature (the default) Dim page As DocumentPage = DocumentPage.Empty page.EmfHandle = emfHandle page.Image = Nothing _operation = String.Format("Adding page {0} of {1}...", i + 1, _emfFileNames.Length) _docWriter.AddPage(page) ' Use the Windows API to delete the EMF DeleteEnhMetaFile(emfHandle) Next ' Finally finish writing the PDF file on disk _operation = "Finishing the document..." _docWriter.EndDocument() RemoveHandler _docWriter.Progress, AddressOf _docWriter_Progress ' Set the dialog results based on whether the user has canceled the operation If (_isCanceled) Then DialogResult = DialogResult.Cancel Else DialogResult = DialogResult.OK End If ' The dialog can be closed now _isWorking = False ' We are done Close() End Sub Private Sub _docWriter_Progress(ByVal sender As Object, ByVal e As DocumentProgressEventArgs) ' Update the description label progress bar _descriptionLabel.Text = _operation _progressBar.Value = e.Percentage ' Check if the user clicked the Cancel button, if so, abort the operation If (_isCanceled) Then e.Cancel = True End If Application.DoEvents() End Sub Private Sub _cancelButton_Click(ByVal sender As Object, ByVal e As EventArgs) ' Set the isCanceled variable to true, this will break from the ' progress callback and closes the dialog _isCanceled = True End Sub Protected Overrides Sub OnFormClosing(ByVal e As FormClosingEventArgs) ' Dont allow the form to close while the callback is still working ' Instead, cancel the operation If (_isWorking) Then e.Cancel = True End If MyBase.OnFormClosing(e) End Sub Private Sub InitializeComponent() ' Create the controls in this form, a text label, a progress bar and a cancel button SuspendLayout() ' Text label _descriptionLabel = New Label() _descriptionLabel.Location = New Point(26, 21) _descriptionLabel.Name = "_descriptionLabel" _descriptionLabel.Size = New Size(367, 23) _descriptionLabel.TabIndex = 0 _descriptionLabel.TextAlign = ContentAlignment.MiddleLeft _descriptionLabel.Text = "Creating final document..." ' Progress bar _progressBar = New ProgressBar() _progressBar.Location = New Point(27, 47) _progressBar.Name = "_progressBar" _progressBar.Size = New Size(364, 23) _progressBar.TabIndex = 1 ' Cancel button _cancelButton = New Button() _cancelButton.DialogResult = DialogResult.Cancel _cancelButton.Location = New Point(172, 76) _cancelButton.Name = "_cancelButton" _cancelButton.Size = New Size(75, 23) _cancelButton.TabIndex = 2 _cancelButton.Text = "Cancel" _cancelButton.UseVisualStyleBackColor = True AddHandler _cancelButton.Click, AddressOf _cancelButton_Click ' Add the controls Controls.Add(_descriptionLabel) Controls.Add(_progressBar) Controls.Add(_cancelButton) ' Initialize the dialog AutoScaleDimensions = New SizeF(6.0F, 13.0F) AutoScaleMode = AutoScaleMode.Font CancelButton = _cancelButton ClientSize = New Size(420, 118) FormBorderStyle = FormBorderStyle.FixedDialog MaximizeBox = False MinimizeBox = False Name = "MyProgressDialog" ShowInTaskbar = False StartPosition = FormStartPosition.CenterParent Text = "DocumentWriter Progress Example" ResumeLayout() End Sub End Class Public NotInheritable Class LEAD_VARS Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" End Class |
C# | Copy Code |
---|---|
// Windows API functions needed to load/delete an EMF [DllImport("gdi32.dll")] private static extern IntPtr GetEnhMetaFile(string lpszMetaFile); [DllImport("gdi32.dll")] private static extern bool DeleteEnhMetaFile(IntPtr hemf); private void DocumentWriterProgressExample() { // Unlock the support needed for LEADTOOLS Document Writers (with PDF output) RasterSupport.Unlock(RasterSupportType.DocumentWriters, "Replace with your own key here"); RasterSupport.Unlock(RasterSupportType.DocumentWritersPdf, "Replace with your own key here"); // Create a new instance of the LEADTOOLS Document Writer DocumentWriter docWriter = new DocumentWriter(); // Get the file names to use string pdfFileName = Path.Combine(LEAD_VARS.ImagesDir, "DocumentWriter.pdf"); string[] emfFileNames = { Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.emf"), Path.Combine(LEAD_VARS.ImagesDir, "Ocr2.emf"), Path.Combine(LEAD_VARS.ImagesDir, "Ocr3.emf"), Path.Combine(LEAD_VARS.ImagesDir, "Ocr4.emf") }; // Show the progress dialog using(MyProgressDialog dlg = new MyProgressDialog(docWriter, emfFileNames, pdfFileName)) { if(dlg.ShowDialog() == DialogResult.OK) MessageBox.Show("Done!"); else MessageBox.Show("User has canceled the operation or an error occured."); } } // Dialog box to show the private class MyProgressDialog : Form { // The controls on the dialog private Label _descriptionLabel; private ProgressBar _progressBar; private Button _cancelButton; private string _operation; // Conversion properties private DocumentWriter _docWriter; private string[] _emfFileNames; private string _pdfFileName; // Has the operation been canceled? private bool _isCanceled; // Is the dialog working? private bool _isWorking; public MyProgressDialog(DocumentWriter docWriter, string[] emfFileNames, string pdfFileName) { InitializeComponent(); _docWriter = docWriter; _emfFileNames = emfFileNames; _pdfFileName = pdfFileName; _isCanceled = false; _isWorking = true; } protected override void OnLoad(EventArgs e) { // To keep the UI functioning, do the conversion in a separate thread BeginInvoke(new MethodInvoker(DoWork)); base.OnLoad(e); } private void DoWork() { // Subscribe to the progress event _docWriter.Progress += new EventHandler<DocumentProgressEventArgs>(_docWriter_Progress); // Create the document _operation = "Creating the document..."; _docWriter.BeginDocument(_pdfFileName, DocumentFormat.Pdf); // Add the pages for(int i = 0; i < _emfFileNames.Length; i++) { // Use the Windows API to load the EMF IntPtr emfHandle = GetEnhMetaFile(_emfFileNames[i]); // Add the page, notice we will not be using image/text feature (the default) DocumentPage page = DocumentPage.Empty; page.EmfHandle = emfHandle; page.Image = null; _operation = string.Format("Adding page {0} of {1}...", i + 1, _emfFileNames.Length); _docWriter.AddPage(page); // Use the Windows API to delete the EMF DeleteEnhMetaFile(emfHandle); } // Finally finish writing the PDF file on disk _operation = "Finishing the document..."; _docWriter.EndDocument(); _docWriter.Progress -= new EventHandler<DocumentProgressEventArgs>(_docWriter_Progress); // Set the dialog results based on whether the user has canceled the operation if(_isCanceled) DialogResult = DialogResult.Cancel; else DialogResult = DialogResult.OK; // The dialog can be closed now _isWorking = false; // We are done Close(); } private void _docWriter_Progress(object sender, DocumentProgressEventArgs e) { // Update the description label progress bar _descriptionLabel.Text = _operation; _progressBar.Value = e.Percentage; // Check if the user clicked the Cancel button, if so, abort the operation if(_isCanceled) e.Cancel = true; Application.DoEvents(); } private void _cancelButton_Click(object sender, EventArgs e) { // Set the isCanceled variable to true, this will break from the // progress callback and closes the dialog _isCanceled = true; } protected override void OnFormClosing(FormClosingEventArgs e) { // Dont allow the form to close while the callback is still working // Instead, cancel the operation if(_isWorking) e.Cancel = true; base.OnFormClosing(e); } private void InitializeComponent() { // Create the controls in this form, a text label, a progress bar and a cancel button SuspendLayout(); // Text label _descriptionLabel = new Label(); _descriptionLabel.Location = new Point(26, 21); _descriptionLabel.Name = "_descriptionLabel"; _descriptionLabel.Size = new Size(367, 23); _descriptionLabel.TabIndex = 0; _descriptionLabel.TextAlign = ContentAlignment.MiddleLeft; _descriptionLabel.Text = "Creating final document..."; // Progress bar _progressBar = new ProgressBar(); _progressBar.Location = new Point(27, 47); _progressBar.Name = "_progressBar"; _progressBar.Size = new Size(364, 23); _progressBar.TabIndex = 1; // Cancel button _cancelButton = new Button(); _cancelButton.DialogResult = DialogResult.Cancel; _cancelButton.Location = new Point(172, 76); _cancelButton.Name = "_cancelButton"; _cancelButton.Size = new Size(75, 23); _cancelButton.TabIndex = 2; _cancelButton.Text = "Cancel"; _cancelButton.UseVisualStyleBackColor = true; _cancelButton.Click += new System.EventHandler(_cancelButton_Click); // Add the controls Controls.Add(_descriptionLabel); Controls.Add(_progressBar); Controls.Add(_cancelButton); // Initialize the dialog AutoScaleDimensions = new SizeF(6F, 13F); AutoScaleMode = AutoScaleMode.Font; CancelButton = _cancelButton; ClientSize = new Size(420, 118); FormBorderStyle = FormBorderStyle.FixedDialog; MaximizeBox = false; MinimizeBox = false; Name = "MyProgressDialog"; ShowInTaskbar = false; StartPosition = FormStartPosition.CenterParent; Text = "DocumentWriter Progress Example"; ResumeLayout(); } } static class LEAD_VARS { public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images"; } |
The Progress event allows you to monitor the progress of a document writer operation as well as cancel the operation if required. This event occur when calling the following methods of the DocumentWriter class:
- DocumentWriter.BeginDocument
- DocumentWriter.AddPage
- DocumentWriter.EndDocument
- DocumentWriter.Convert
The DocumentProgressEventArgs class defines the data for the Progress event. It contains the following:
- DocumentProgressEventArgs.Percentage property. The value of this property will go from 0 to 100 during an operation. This property is read-only.
- DocumentProgressEventArgs.Cancel property. Setting The value of this property to true will cancel the current operation.
Target Platforms: Microsoft .NET Framework 2.0, Windows 2000, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7