←Select platform

Progress Event

Summary

Document writer progress notification event.

Syntax
C#
VB
Objective-C
C++
Java
public event EventHandler<DocumentProgressEventArgs> Progress 
Public Event Progress As EventHandler(Of DocumentProgressEventArgs) 
typedef void (^LTDocumentWriterProgressHandler)(NSInteger percentage, BOOL *stop) 
public void addProgressListener(ProgressListener listener) 
public void removeProgressListener(ProgressListener listener) 
public: 
event EventHandler<DocumentProgressEventArgs^>^ Progress 

Event Data

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.

PropertyDescription
Cancel Gets or sets a value to allow the user to cancel the current operation.

Remarks

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:

The DocumentProgressEventArgs class defines the data for the Progress event. It contains the following:

Example

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.

C#
VB
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.Document.Writer; 
 
public void DocumentWriterProgressExample() 
{ 
   // Get the input and output file names to use 
   var inputFileName = Path.Combine(LEAD_VARS.ImagesDir, "Leadtools.docx"); 
   var outputFileName = Path.Combine(LEAD_VARS.ImagesDir, "Example.pdf"); 
 
   // Show the progress dialog 
   using (var dlg = new MyProgressDialog(inputFileName, outputFileName)) 
   { 
      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 
{ 
   // Files 
   private string _inputFileName; 
   private string _outputFileName; 
 
   // The controls on the dialog 
   private Label _descriptionLabel; 
   private ProgressBar _progressBar; 
   private Button _cancelButton; 
 
   // Has the operation been canceled? 
   private bool _isCancelPending; 
   // Is the dialog working? 
   private bool _isWorking; 
 
   public MyProgressDialog(string inputFileName, string outputFileName) 
   { 
      InitializeComponent(); 
 
      _inputFileName = inputFileName; 
      _outputFileName = outputFileName; 
      _isCancelPending = 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() 
   { 
      DocumentWriter docWriter; 
      string operation = string.Empty; 
 
      EventHandler<DocumentProgressEventArgs> progressHandler = (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 (_isCancelPending) 
            e.Cancel = true; 
 
         Application.DoEvents(); 
      }; 
 
      // Get the number of pages 
      var codecs = new RasterCodecs(); 
      codecs.Options.RasterizeDocument.Load.Resolution = 300; 
      var pageCount = codecs.GetTotalPages(_inputFileName); 
 
      // Create the document writer 
      docWriter = new DocumentWriter(); 
 
      // Create the document 
      operation = "Creating the document..."; 
 
      // Subscribe to the progress event 
      docWriter.Progress += new EventHandler<DocumentProgressEventArgs>(progressHandler); 
      docWriter.BeginDocument(_outputFileName, DocumentFormat.Pdf); 
 
      // Add the pages 
      for (var pageNumber = 1; pageNumber <= pageCount && !_isCancelPending; pageNumber++) 
      { 
         // Load the page as SVG 
         var page = new DocumentWriterSvgPage(); 
         page.SvgDocument = codecs.LoadSvg(_inputFileName, pageNumber, null); 
 
         // Add the page, notice we will not be using image/text feature (the default) 
         operation = string.Format("Adding page {0} of {1}...", pageNumber, pageCount); 
         docWriter.AddPage(page); 
 
         // Delete the SVG 
         page.SvgDocument.Dispose(); 
      } 
 
      // Finally finish writing the PDF file on disk 
      operation = "Finishing the document..."; 
      docWriter.EndDocument(); 
 
      // Remove the progress handler 
      docWriter.Progress -= new EventHandler<DocumentProgressEventArgs>(progressHandler); 
 
      codecs.Dispose(); 
 
      // Set the dialog results based on whether the user has canceled the operation 
      if (_isCancelPending) 
         DialogResult = DialogResult.Cancel; 
      else 
         DialogResult = DialogResult.OK; 
 
      // The dialog can be closed now 
      _isWorking = false; 
 
      // We are done 
      Close(); 
   } 
 
   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 
      _isCancelPending = 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"; 
} 
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.Document.Writer 
 
Public Sub DocumentWriterProgressExample() 
   ' Get the input and output file names to use 
   Dim inputFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Leadtools.docx") 
   Dim outputFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Example.pdf") 
 
   ' Show the progress dialog 
   Using dlg As New MyProgressDialog(inputFileName, outputFileName) 
      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 
   ' Files 
   Private _inputFileName As String 
   Private _outputFileName As String 
 
   ' The controls on the dialog 
   Private _descriptionLabel As Label 
   Private _progressBar As ProgressBar 
   Private _cancelButton As Button 
 
   ' Has the operation been canceled? 
   Private _isCancelPending As Boolean 
   ' Is the dialog working? 
   Private _isWorking As Boolean 
 
   Public Sub New(inputFileName As String, outputFileName As String) 
      InitializeComponent() 
 
      _inputFileName = inputFileName 
      _outputFileName = outputFileName 
      _isCancelPending = 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() 
      Dim docWriter As DocumentWriter 
      Dim operation As String = String.Empty 
 
      Dim progressHandler As EventHandler(Of DocumentProgressEventArgs) = 
         Sub(sender As Object, 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 (_isCancelPending) Then 
               e.Cancel = True 
            End If 
 
            Application.DoEvents() 
         End Sub 
 
      ' Get the number of pages 
      Dim codecs As New RasterCodecs() 
      codecs.Options.RasterizeDocument.Load.Resolution = 300 
      Dim pageCount As Integer = codecs.GetTotalPages(_inputFileName) 
 
      ' Create the document writer 
      docWriter = New DocumentWriter() 
 
      ' Create the document 
      operation = "Creating the document..." 
 
      ' Subscribe to the progress event 
      AddHandler docWriter.Progress, progressHandler 
      docWriter.BeginDocument(_outputFileName, DocumentFormat.Pdf) 
 
      ' Add the pages 
      For pageNumber As Integer = 1 To pageCount 
 
         If _isCancelPending Then 
            Exit For 
         End If 
 
         ' Load the page as SVG 
         Dim page As New DocumentWriterSvgPage() 
         page.SvgDocument = codecs.LoadSvg(_inputFileName, pageNumber, Nothing) 
 
         ' Add the page, notice we will not be using image/text feature (the default) 
         operation = String.Format("Adding page {0} of {1}...", pageNumber, pageCount) 
         docWriter.AddPage(page) 
 
         ' Delete the SVG 
         page.SvgDocument.Dispose() 
      Next 
 
      ' Finally finish writing the PDF file on disk 
      operation = "Finishing the document..." 
      docWriter.EndDocument() 
 
      ' Remove the progress handler 
      RemoveHandler docWriter.Progress, progressHandler 
 
      codecs.Dispose() 
 
      ' Set the dialog results based on whether the user has canceled the operation 
      If _isCancelPending 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 _cancelButton_Click(sender As Object, e As EventArgs) 
      ' Set the isCanceled variable to true, this will break from the 
      ' progress callback and closes the dialog 
      _isCancelPending = 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 

Requirements

Target Platforms

Help Version 20.0.2020.3.31
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2020 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Document.Writer Assembly