display pdf winform c# : Rotate pages in pdf SDK application service wpf azure asp.net dnn 7053154973-Excel%202007%20VBA%20Programmers%20Reference%20-%20Wrox%20200742-part669

Introducing the IDTExtensibility2 Interface
The simple Add-In shown in the previous section is simple for one reason—it’s self-contained and doesn’t
need to use Excel at all. In most real-world examples, you will want to use the Excel Applicationobject
in a number of ways:
Use Application.Callerto identify the range that the function was called from
Use Application.Volatileto mark an Automation Add-In function as volatile, and hence
that Excel should call the function every time it recalculates the worksheet
Use Excel’s built-in functions within your Add-In
To use the Excel Applicationobject within your Automation Add-In, you need to get (or be given) a
reference to it, which you can store in a private variable within your Add-In class. This is achieved by
implementing a specific interface within your Add-In class.
An interfaceis simply a predefined and fixed set of sub procedures, functions, and properties. Implementing
an interfacemeans that you are including all those predefined sub procedures, functions, and properties
within your class. By doing this you are providing fixed, known, and predictable entry points through
which Excel can call into your class.
When Excel loads an Automation Add-In, it checks to see if the Add-In has implemented an interface
called IDTExtensibility2. If that interface has been implemented, Excel calls the OnConnection
method defined in the interface, passing a reference to itself (that is, to the Excel Applicationobject). In
VBAterms, Excel is doing something like the following (don’t type this in):
Dim oIDT2 As IDTExtensibility2
Dim oAutoAddIn As Object
‘ Create an instance of the Automation Add-In
Set oAutoAddIn = CreateObject(“Excel2007ProgRef.Simple”)
‘ Does it implement the special interface?
If TypeOf oAutoAddIn Is IDTExtensibility2 Then
‘ Yes it does, so get a reference to that 
‘ interface within the Add-In class
Set oIDT2 = oAutoAddIn
‘ And call the interface’s OnConnection method, 
‘ passing the Application
oIDT2.OnConnection Me
End If
Within the Add-In’s class, you can respond to the call to OnConnectionby storing the reference to the
Applicationobject in a class-level variable, and using it in the Add-In’s functions.
The IDTExtensibility2interface has five methods, each called at specific points in Excel’s lifetime,
though only two are used by Automation Add-Ins (the others are used by COM Add-Ins and are dis-
cussed later in the chapter). OnConnectionhas already been mentioned; the other method used here is
OnDisconnection. Even though they are not used, you have to include code for every routine defined
in the interface, as shown a bit later.
388
Chapter 18: Automation Add-Ins and COM Add-Ins
Rotate pages in pdf - rotate PDF page permanently in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Users to Change the Rotation Angle of PDF File Page Using C#
rotate pages in pdf and save; how to rotate one page in a pdf file
Rotate pages in pdf - VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
PDF Document Page Rotation in Visual Basic .NET Class Application
rotate pdf page; rotate pdf page few degrees
The first task in implementing an interface is to create a reference to the library in which the interface is
defined. In this case, the IDTExtensibility2interface is defined in the Microsoft Add-In Designer
library.
Open the Excel2007ProgRef project in Visual Basic, select Project➪References, and put a check mark
next to the Microsoft Add-In Designer item. Because you’re interacting with Excel, you also need a refer-
ence to the Excel object library, so find the entry for Microsoft Excel 12.0 Object Library and check that
one too. Now select Project➪Excel2007ProgRef Properties and select the Component tab. Choose Binary
Compatibility and select the file Excel2007ProgRef.dllthat you created in the previous section
(which might already be selected). This ensures that VB updates the current DLLregistry entries rather
than creating new ones each time you recompile.
Then add a new class module to the project, call it Complex, set its Instancingproperty to 5-
MultiUse, and copy in the following code to implement the IDTExtensibility2interface and
respond to Excel calling its entry points:
‘ Implement the IDTExtensibility2 interface, so Excel can call into the class
Implements IDTExtensibility2
‘ Declare a private reference to the Excel application
Private moXL As Excel.Application
‘ Called by Excel when the class is loaded, passing a reference to the
‘ Excel object
Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, custom() As Variant)
‘ Set a reference to the Excel application, for use in the functions
Set moXL = Application
End Sub
‘ Called by Excel when the class is unloaded, so destroy the reference
‘ to Excel
Private Sub IDTExtensibility2_OnDisconnection( _
ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, _
custom() As Variant)
Set moXL = Nothing
End Sub
‘ Not used by Automation Add-Ins, but have to be included in the class to 
‘ implement the interface
Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
‘ Have a comment to stop VB removing the routine when doing its tidy-up
End Sub
‘ Not used by Automation Add-Ins, but have to be included in the class to 
‘ implement the interface
Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
‘ Have a comment to stop VB removing the routine when doing its tidy-up
389
Chapter 18: Automation Add-Ins and COM Add-Ins
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
doc.Save(outPutFilePath). How to VB.NET: Delete Consecutive Pages from PDF. doc.Save(outPutFilePath). How to VB.NET: Delete Specified Pages from PDF.
rotate pdf pages in reader; saving rotated pdf pages
VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Page: Insert PDF Pages. |. Home ›› XDoc.PDF ›› VB.NET PDF: Insert PDF Page. Add and Insert Multiple PDF Pages to PDF Document Using VB.
how to change page orientation in pdf document; change orientation of pdf page
End Sub
‘ Not used by Automation Add-Ins, but have to be included in the class to 
‘ implement the interface
Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
‘ Have a comment to stop VB removing the routine when doing its tidy-up
End Sub
A Complex Add-In—RandUnique
Now that you have a reference to the Excel Applicationobject, you can use it in a more complex func-
tion. The RandUniquefunction shown next returns a random set of integers between two limits, without
any duplicates in the set. It uses the Excel Applicationobject in two ways:
It uses Application.Callerto identify the range containing the function, and hence the size
and shape of the array to create and return.
It uses Application.Volatileto ensure the function is recalculated each time Excel calculates
the sheet.
The routine works by doing the following:
It creates an array of all the integers between the given limits, with a random number associated
with each item.
It sorts the array by the random number, effectively putting the array into a random order.
It reads the first nitems from the jumbled-up array to fill the required range.
The function has also been written to take an optional Itemsparameter, enabling it to be called from VBA
as well as from the worksheet. If the Itemsparameter is provided, the function returns a 2D array (1, n) of
unique integers. If the Itemsparameter is not provided, the function uses Application.Callerto iden-
tify the size of array to create. Because you’re using VB’s random number generator, it’s a good idea to add
Randomizestatement in the initial OnConnectioncall to ensure that you get different numbers each time
(type in the shaded rows):
‘ Called by Excel when the class is loaded, passing a reference to the
‘ Excel object
Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, custom() As Variant)
‘ Set a reference to the Excel application, for use in the functions
Set moXL = Application
‘ Initialize the VB random number generator
Randomize
End Sub
‘***************************************************************************
‘*
‘* FUNCTION NAME:  RandUnique
‘*
390
Chapter 18: Automation Add-Ins and COM Add-Ins
C# PDF Page Insert Library: insert pages into PDF file in C#.net
how to merge PDF document files by C# code, how to rotate PDF document page, how to delete PDF page using C# .NET, how to reorganize PDF document pages and how
pdf rotate just one page; how to rotate pdf pages and save
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
doc.Save(outPutFilePath); Demo Code: How to Delete Consecutive Pages from PDF in C#.NET. Demo Code: How to Delete Specified Pages from PDF in C#.NET.
pdf reverse page order preview; rotate pages in pdf online
‘* DESCRIPTION:    Returns an array of random integers between two limits, 
‘*                 without duplication
‘*
‘* PARAMETERS:     Min       The lower limit for the random numbers
‘*                 Max       The upper limit for the random numbers
‘*
‘***************************************************************************
Public Function RandUnique(Min As Long, Max As Long, _
Optional Items As Long) As Variant
Dim oRng As Range
Dim vaValues() As Double, vaResult() As Double
Dim iItems As Long, i As Long, iValue As Long
Dim iRows As Long, iCols As Long, iRow As Long, iCol As Long
‘ Tell Excel that this function is volatile, and should be called
‘ every time the sheet is recalculated
moXL.Volatile
‘ If we’ve been given the number of items required, use it...
If Items > 0 Then
iRows = 1
iCols = Items
Else
‘... Otherwise get the range of cells that this function is in 
‘    (as an array formula)
Set oRng = moXL.Caller
iRows = oRng.Rows.Count
iCols = oRng.Columns.Count
End If
‘ How many cells in the range
iItems = iRows * iCols
‘ We can’t generate a unique set of numbers if there are more
‘ cells to fill than there are numbers to choose from, 
‘ so return an error value in that case
If iItems > (Max - Min + 1) Then
RandUnique = CVErr(xlErrValue)
Exit Function
End If
‘ Fill an array with all the possible numbers to choose from,
‘ and a column of random numbers to sort on
ReDim vaValues(Min To Max, 1 To 2)
For i = Min To Max
vaValues(i, 1) = i
vaValues(i, 2) = Rnd()
Next
‘ Sort by the array by the column of random numbers,
‘ jumbling up the array
391
Chapter 18: Automation Add-Ins and COM Add-Ins
C# TIFF: How to Rotate TIFF Using C# Code in .NET Imaging
C#.NET convert PDF to text, C#.NET convert PDF to images, C#.NET PDF file & pages edit, C#.NET PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET
rotate pages in pdf permanently; rotate pages in pdf
VB.NET PDF - WPF PDF Viewer for VB.NET Program
C#.NET convert PDF to text, C#.NET convert PDF to images, C#.NET PDF file & pages edit, C#.NET PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET
pdf rotate page; how to rotate page in pdf and save
Sort2DVert vaValues, 2, “A”
‘ Dimension an array to be the same size as the range we’re called from
ReDim vaResult(1 To iRows, 1 To iCols)
‘ Start the counter at the beginning of the jumbled array
iValue = Min
‘ Fill the result array from the jumbled array of all values
For iRow = 1 To iRows
For iCol = 1 To iCols
vaResult(iRow, iCol) = vaValues(iValue, 1)
iValue = iValue + 1
Next
Next
‘ Return the result
RandUnique = vaResult
End Function
A QuickSort Routine
The RandUniquefunction uses a standard QuickSortalgorithm to sort the array, reproduced next. This
is one of the fastest sorting algorithms and uses a recursive divide-and-conquer approach to sorting:
Choose one of the numbers in the array (usually the middle one).
Group all the numbers less than it at the top of the array, and all the numbers greater than it at
the bottom.
Repeat for the top half of the array, then for the bottom half.
‘***************************************************************************
‘*
‘* FUNCTION NAME:  SORT ARRAY - 2D Vertically
‘*
‘* DESCRIPTION:    Sorts the passed array into required order, using the
‘*                 given key. The array must be a 2D array of any size.
‘*
‘* PARAMETERS:     avArray   The 2D array of values to sort
‘*                 iKey      The column to sort by
‘*                 sOrder    A-Ascending, D-Descending
‘*                 iLow1     The first item to sort between
‘*                 iHigh1    The last item to sort between
‘*
‘***************************************************************************
Private Sub Sort2DVert(avArray As Variant, iKey As Integer, _
sOrder As String, Optional iLow1, Optional iHigh1)
Dim iLow2 As Integer, iHigh2 As Integer, i As Integer
Dim vItem1, vItem2 As Variant
On Error GoTo PtrExit
If IsMissing(iLow1) Then iLow1 = LBound(avArray)
392
Chapter 18: Automation Add-Ins and COM Add-Ins
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
C#.NET PDF Library - Copy and Paste PDF Pages in C#.NET. Easy to C#.NET Sample Code: Copy and Paste PDF Pages Using C#.NET. C# programming
how to rotate a page in pdf and save it; pdf rotate single page and save
C# WPF PDF Viewer SDK to view PDF document in C#.NET
C#.NET convert PDF to text, C#.NET convert PDF to images, C#.NET PDF file & pages edit, C#.NET PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET
rotate a pdf page; how to rotate all pages in pdf at once
If IsMissing(iHigh1) Then iHigh1 = UBound(avArray)
‘ Set new extremes to old extremes
iLow2 = iLow1
iHigh2 = iHigh1
‘ Get value of array item in middle of new extremes
vItem1 = avArray((iLow1 + iHigh1) \ 2, iKey)
‘ Loop for all the items in the array between the extremes
Do While iLow2 < iHigh2
If sOrder = “A” Then
‘ Find the first item that is greater than the mid-point item
Do While avArray(iLow2, iKey) < vItem1 And iLow2 < iHigh1
iLow2 = iLow2 + 1
Loop
‘ Find the last item that is less than the mid-point item
Do While avArray(iHigh2, iKey) > vItem1 And iHigh2 > iLow1
iHigh2 = iHigh2 - 1
Loop
Else
‘ Find the first item that is less than the mid-point item
Do While avArray(iLow2, iKey) > vItem1 And iLow2 < iHigh1
iLow2 = iLow2 + 1
Loop
‘ Find the last item that is greater than the mid-point item
Do While avArray(iHigh2, iKey) < vItem1 And iHigh2 > iLow1
iHigh2 = iHigh2 - 1
Loop
End If
‘ If the two items are in the wrong order, swap the rows
If iLow2 < iHigh2 Then
For i = LBound(avArray, 2) To UBound(avArray, 2)
vItem2 = avArray(iLow2, i)
avArray(iLow2, i) = avArray(iHigh2, i)
avArray(iHigh2, i) = vItem2
Next
End If
‘ If the pointers are not together, advance to the next item
If iLow2 <= iHigh2 Then
iLow2 = iLow2 + 1
iHigh2 = iHigh2 - 1
End If
Loop
‘ Recurse to sort the lower half of the extremes
If iHigh2 > iLow1 Then Sort2DVert avArray, iKey, sOrder, iLow1, iHigh2
‘ Recurse to sort the upper half of the extremes
393
Chapter 18: Automation Add-Ins and COM Add-Ins
If iLow2 < iHigh1 Then Sort2DVert avArray, iKey, sOrder, iLow2, iHigh1
PtrExit:
End Sub
You must now save and recompile your project by using File➪Make Excel2007ProgRef.dll to create the
updated DLL.
The complex Add-In is used in the same way as the simple Sequencefunction shown previously. The only
difference is that you have to tell Excel to load the Excel2007ProgRef.Complex Add-In, by clicking Office
Menu➪Excel Options➪Add-Ins➪Manage: Excel Add-Ins➪Automation Add-Ins and selecting it from
the list. When entered as an array formula, the RandUniquefunction looks something like Figure 18-2.
Figure 18-2
COM Add-Ins
Whereas Automation Add-Ins enable you to create your own worksheet functions, COM Add-Ins pro-
vide a way to extend the user interface of Excel and all the other Office applications. They have a num-
ber of advantages over normal xlaor xlamAdd-Ins, including:
They’re much faster to open.
They’re less obtrusive (not showing up in the VBE Project Explorer).
They’re more secure (being compiled DLLs).
They’re not specific to a single application—the same mechanism works with all the Office
applications and the VBE itself (and any other application that uses VBA6), allowing you to cre-
ate a single Add-In that can extend all the Office applications.
Due to a bug in some versions of VB, you may be presented with an error message
stating that there is a sharing violation with the file you are trying to replace. If this
occurs, try closing VB (making sure you have saved your project) and then reopen-
ing it. You will also get an error if the Add-In is currently loaded in an Excel session,
so you’ll need to close your Excel session(s) before rebuilding the Add-In. 
394
Chapter 18: Automation Add-Ins and COM Add-Ins
The IDTExtensibility2 Interface (Continued)
The previous section introduced the IDTExtensibility2interface, where you used the OnConnection
and OnDisconnectionmethods to obtain a reference to the Excel Application. The remaining methods
defined in the interface can be used by COM Add-Ins to respond to specific events in Excel’s lifetime.
The methods are outlined in the following table.
Method
Occurs
Typical Usage
OnConnection
When the COM Add-In 
Store a reference to the Excel 
is loaded by Excel.
application, add menu items to
Excel’s CommandBars, and set up
event hooks.
OnStartupComplete
After Excel has finished 
Show a startup dialog (such as 
loading all Add-Ins and 
those in Access and PowerPoint) 
initial files.
or change behavior depending on
whether other Add-Ins are loaded.
OnAddInsUpdate
Whenever any other 
If the COM Add-In depends on 
COM Add-Ins are 
another Add-In being loaded, this 
loaded or unloaded.
Add-In can unload itself.
OnBeginShutdown
When Excel starts its 
Stop the shutdown in certain 
shutdown process.
circumstances or perform any 
pre-shutdown tidy-up routines.
OnDisconnection
When the COM Add-In 
Save settings. If unloaded by the 
is unloaded, either by 
user, delete any CommandBar 
the user or by Excel 
items that were created at 
shutting down.
connection.
Most COM Add-Ins use only the OnConnectionmethod (to add their menu items) and
OnDisconnectionmethod (to remove them), though code has to exist in the class module for all 
five methods to correctly implement the interface.
Registering a COM Add-In with Excel
For Automation Add-Ins, you told Excel that the Add-In exists by selecting it in the Automation Add-Ins
dialog (resulting in some entries being written to the registry). You tell Excel that a COM Add-In exists
by writing specific keys and values to specific places in the registry. When Excel starts, it looks in those
keys to see which COM Add-Ins exist, then checks the values in those keys to see how to display them in
the COM Add-Ins list, whether or not to load them, and so on. The keys for COM Add-Ins targeted to
Excel are:
Registered for the current user:
HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\AddInProgID
Registered for all users:
HKEY_USERS\.DEFAULT\Software\Microsoft\Office\Excel\Addins\AddInProgID
395
Chapter 18: Automation Add-Ins and COM Add-Ins
Registered for the machine:
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Excel\Addins\AddInProgID
The values are as follows.
Name
Type
Use
FriendlyName
String
The name shown in the COM Add-Ins list.
Description
String
The description shown in the COM Add-Ins dialog.
LoadBehavior
Number
Whether it is unloaded, loaded at startup, or
demand-loaded.
SatelliteDllName
Number
The name of a resource DLLthat contains localized
names and descriptions. If used, the name and
description will be #Num, where Num is the
numeric resource ID in the Satellite DLL. Most of the
standard Office Add-Ins use this technique for their
localization.
CommandLineSafe
String
Whether the DLLcould be called from the command
line (not applicable to Office COM Add-Ins).
Once registered correctly, the COM Add-In will show up in Excel’s COM Add-Ins dialog, where it can 
be loaded and unloaded like any other Add-In. You can find the COM Add-Ins dialog by clicking Office
Menu➪Excel Options➪Add-Ins➪Manage: COM Add-Ins➪Go.
The COM Add-In Designer
Microsoft has provided a COM Add-In Designer class to assist in the creation and registration of COM
Add-Ins. It provides the following benefits:
Implements the IDTExtensibility2 interface, exposing the methods as events that you can either
hook or ignore. You don’t, therefore, have to include code for unused interface methods in your
class module.
Provides a form to fill in to provide the values for the registry entries used to register the COM
Add-In, and to select which application to target.
When compiled, it adds code to the standard DllRegisterServerentry point in the DLLthat
writes all the registry entries for you when the DLLis registered on the system (though only for
the Current User key). This greatly simplifies installation, because you can install the Add-In by
running the following command: RegSvr32ºc:\MyPath\MyComAddIn.DLL.
By way of an example, you’ll create a COM Add-In that provides a Wizard for entering the RandUnique
Automation Add-In function created in the previous section. You will continue to use Visual Basic,
building on the Excel2007ProgRefDLLfrom the previous section.
Open the Excel2007ProgRefproject in Visual Basic. Add a new Add-In class to the project by clicking
Project➪Add Addin Class (if that menu item doesn’t exist, click Project➪Components➪Designers and
396
Chapter 18: Automation Add-Ins and COM Add-Ins
check the Addin Class entry). This adds a new Designerclass and gives it the name AddInDesigner1.
Using the Properties window, change the name to COMAddInand set the Publicproperty to True
(ignoring any warnings). Fill in the Designer form as follows:
Add-In Display Name
Excel 2007 Prog Ref Wizards
Addin Description
Displays a Wizard dialog for entering the Sequenceand 
RandUniqueAutomation Addin functions, documented in the
Excel 2007 VBAProgrammers Reference
Application
Microsoft Excel
Application Version
Microsoft Excel 12.0
Initial Load Behavior
Startup
Linking to Excel
Click View➪Code to get to the Designer’s code module, and copy in the following code to hook into the
IDTExtensibility2interface and link the COM Add-In to Excel by storing a reference to the Excel
Applicationobject, passed to the Add-In in the OnConnectionmethod:
Dim WithEvents moXL As Excel.Application
‘ The IDTExtensibility2_OnConnection method is handled by the Designer,
‘ and exposed to us through the AddInInstance_OnConnection method
Private Sub AddInInstance_OnConnection( _
ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, custom() As Variant)
Set moXL = Application
MsgBox “Connected”    
End Sub
‘ The IDTExtensibility2_OnDisconnection method is handled by the Designer,
‘ and exposed to us through the AddInInstance_OnDisconnection method
Private Sub AddInInstance_OnDisconnection( _
ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, _
custom() As Variant)
Set moXL = Nothing
MsgBox “Disconnected”    
End Sub
The Designer only creates registry entries for the current user. If you wish to install
the Add-In for all users on the machine, you will need to add your own registry
entries in the Advanced tab of the Designer form, as documented in Microsoft
KnowledgeBase article Q290868 at http://support.microsoft.com/kb/q290868/.
397
Chapter 18: Automation Add-Ins and COM Add-Ins
Documents you may be interested
Documents you may be interested