Initialize the annotation automations used by this DocumentViewerAnnotations.
public void Initialize()
Initialize must be called by the application after this object finishes loading all the annotations containers of the current LEADDocument and the user has created the necessary annotation rendering engine and any other optional automation componets in response to DocumentViewerOperation.CreateAutomation. Refer to DocumentViewerAnnotations for more information.
The following occurs during Initialize
AnnAutomationManager.CreateDefaultObjects is called to create the automation objects for all AnnAutomationManager.Objects
The AnnAutomationObject.DrawDesignerType of all objects that derive from AnnTextReviewObject is replaced with an internal class that handles proper text selection (using DocumentViewerSelectTextInteractiveMode)
The DrawDesignerType of SelectObjectId object type is set to null. This will remove the support for selecting annotations objects using rubber-banding. This mode does not work with other image viewer interactive modes
using Leadtools;
using Leadtools.Controls;
using Leadtools.Document;
using Leadtools.Document.Viewer;
using Leadtools.Document.Converter;
using Leadtools.Codecs;
using Leadtools.Caching;
using Leadtools.Annotations.Engine;
using Leadtools.Annotations.Automation;
using Leadtools.Annotations.WinForms;
using Leadtools.Annotations.Designers;
using Leadtools.Document.Writer;
using Leadtools.Ocr;
public void DocumentViewerWithAnnotations_Example()
{
// New Form to be used as our application
var form = new MyForm();
form.ShowDialog();
}
class MyForm : Form
{
public MyForm()
{
this.Size = new Size(800, 800);
this.Text = "LEADTOOLS Document Viewer Example";
}
protected override void OnLoad(EventArgs e)
{
if (!DesignMode)
Init();
base.OnLoad(e);
}
// Our document viewer instance
private DocumentViewer _documentViewer;
private void Init()
{
// Initialize the user interface
InitUI();
// Init the cache. This is optional, but it can speed up viewing of large documents
// if not needed, remove this section
DocumentFactory.Cache = new FileCache();
// Init the document viewer, pass along the panels
var createOptions = new DocumentViewerCreateOptions
{
// The middle panel for the view
ViewContainer = this.Controls.Find("middlePanel", false)[0],
// The left panel for the thumbnails
ThumbnailsContainer = this.Controls.Find("leftPanel", false)[0],
// Using annotations in this example
UseAnnotations = true
};
// Create the document viewer
_documentViewer = DocumentViewerFactory.CreateDocumentViewer(createOptions);
// We prefer SVG viewing
_documentViewer.View.PreferredItemType = DocumentViewerItemType.Svg;
// Initalize the annotations
InitAnnotations();
// Load a document
var fileName = @"C:\LEADTOOLS22\Resources\Images\Leadtools.pdf";
var document = DocumentFactory.LoadFromFile(
fileName,
new LoadDocumentOptions { UseCache = DocumentFactory.Cache != null });
// Set it in the viewer
_documentViewer.SetDocument(document);
// Run pan/zoom
var interactiveComboBox = this.Controls.Find("interactiveComboBox", true)[0] as ComboBox;
interactiveComboBox.SelectedItem = DocumentViewerCommands.InteractivePanZoom;
}
private void InitAnnotations()
{
// The annotations toolbar will be added here
var rightPanel = this.Controls.Find("rightPanel", true)[0];
// Get the automation manager from the document viewer
var automationManager = _documentViewer.Annotations.AutomationManager;
// Create the manager helper. This sets the rendering engine
var automationManagerHelper = new AutomationManagerHelper(automationManager);
// Tell the document viewer that automation manager helper is created
_documentViewer.Annotations.Initialize();
// Craete the toolbar
automationManagerHelper.ModifyToolBarParentVisiblity = true;
automationManagerHelper.CreateToolBar();
var toolBar = automationManagerHelper.ToolBar;
toolBar.Dock = DockStyle.Fill;
toolBar.AutoSize = true;
toolBar.BorderStyle = BorderStyle.None;
toolBar.Appearance = ToolBarAppearance.Flat;
rightPanel.Controls.Add(toolBar);
toolBar.BringToFront();
// Handler for showing the context menu when the user right clicks on an annotation object
EventHandler<AnnAutomationEventArgs> onShowContextMenu = (sender, e) =>
{
// Get the object type
var automationObject = e.Object as AnnAutomationObject;
if (automationObject == null)
return;
// Convert the point to client coordinates
var imageViewer = _documentViewer.View.ImageViewer;
var position = imageViewer.PointToClient(Cursor.Position);
var automation = _documentViewer.Annotations.Automation;
// Show its context menu
var contextMenu = automationObject.ContextMenu as ObjectContextMenu;
if (contextMenu != null)
{
contextMenu.Automation = automation;
contextMenu.Show(imageViewer, position);
}
};
// Handler for show the object properties dialog
EventHandler<AnnAutomationEventArgs> onShowObjectProperties = (sender, e) =>
{
// Get the automation object from the document viewer
using (var dlg = new AutomationUpdateObjectDialog())
{
dlg.UserName = _documentViewer.UserName;
dlg.Automation = sender as AnnAutomation;
dlg.ShowDialog(this);
e.Cancel = !dlg.IsModified;
}
};
// Handle extra annotations using the Operation event
_documentViewer.Operation += (sender, e) =>
{
switch (e.Operation)
{
case DocumentViewerOperation.LoadingAnnotations:
// Disable the panel where we put the toolbar when we are loading, enable when we are done
rightPanel.Enabled = e.IsPostOperation;
break;
case DocumentViewerOperation.CreateAutomation:
if (e.IsPostOperation)
{
// Automation object has been created, use it to perform any extra task not handled by the
// document viewer by default
// We will handle showing the context menu when the user right clicks on an object and when they
// select properties
_documentViewer.Annotations.Automation.OnShowContextMenu += onShowContextMenu;
_documentViewer.Annotations.Automation.OnShowObjectProperties += onShowObjectProperties;
}
break;
case DocumentViewerOperation.DestroyAutomation:
if (!e.IsPostOperation)
{
// Automation is about to be destroyed, remove any events we used
_documentViewer.Annotations.Automation.OnShowContextMenu -= onShowContextMenu;
_documentViewer.Annotations.Automation.OnShowObjectProperties -= onShowObjectProperties;
}
break;
default:
break;
}
};
}
private void InitUI()
{
// Add a panel on the left for the document viewer thumbnails part
var leftPanel = new Panel();
leftPanel.Name = "leftPanel";
leftPanel.Width = 200;
leftPanel.Dock = DockStyle.Left;
leftPanel.BackColor = Color.Gray;
leftPanel.BorderStyle = BorderStyle.FixedSingle;
this.Controls.Add(leftPanel);
// Add a panel to the right, this will work for the bookmarks or annotations part
var rightPanel = new Panel();
rightPanel.Name = "rightPanel";
rightPanel.Width = 200;
rightPanel.Dock = DockStyle.Right;
rightPanel.BackColor = Color.LightBlue;
rightPanel.BorderStyle = BorderStyle.FixedSingle;
this.Controls.Add(rightPanel);
// Add a panel to fill the rest, for the document viewer
var middlePanel = new Panel();
middlePanel.Name = "middlePanel";
middlePanel.BackColor = Color.DarkGray;
middlePanel.BorderStyle = BorderStyle.None;
middlePanel.Dock = DockStyle.Fill;
this.Controls.Add(middlePanel);
// Add a top panel to host our application controls
var topPanel = new Panel();
topPanel.Name = "topPanel";
topPanel.Height = 100;
topPanel.Dock = DockStyle.Top;
topPanel.BorderStyle = BorderStyle.FixedSingle;
this.Controls.Add(topPanel);
middlePanel.BringToFront();
// Add buttons for the UI
// Combo box for interactive modes
var interactiveComboBox = new ComboBox();
interactiveComboBox.Name = "interactiveComboBox";
interactiveComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
// The command names for the items so we can just run them
interactiveComboBox.Items.Add(DocumentViewerCommands.InteractivePanZoom);
interactiveComboBox.Items.Add(DocumentViewerCommands.InteractiveSelectText);
interactiveComboBox.SelectedIndexChanged += (sender, e) =>
{
var commandName = interactiveComboBox.SelectedItem as string;
_documentViewer.Commands.Run(commandName);
};
topPanel.Controls.Add(interactiveComboBox);
// Generic label for information used by the examples
var infoLabel = new Label();
infoLabel.Name = "infoLabel";
infoLabel.Text = "Info...";
infoLabel.AutoSize = false;
infoLabel.Width = 400;
infoLabel.Left = interactiveComboBox.Right + 20;
topPanel.Controls.Add(infoLabel);
var exampleButton = new Button();
exampleButton.Top = interactiveComboBox.Bottom + 2;
exampleButton.Name = "exampleButton";
exampleButton.Text = "&Example";
exampleButton.Click += (sender, e) => Example(exampleButton);
topPanel.Controls.Add(exampleButton);
}
private void Example(Button exampleButton)
{
// Add the example code here
Console.WriteLine(this + " Ready");
}