crystal report export to pdf without viewer c# : Cut pages from pdf online application Library cloud windows asp.net .net class 0100GS3-GettingStartedOOo337-part44

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem -------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "Andrew Pitonyak"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
end sub
The macro in Listing 1 is not as complicated as it first appears. 
Learning a few things helps significantly in understanding the 
generated macros. The discussion starts with features near the top of 
the macro listing and describes them. If you like to avoid details, then 
simply change the text “Andrew Pitonyak” to what you want to insert at 
the current cursor position.
Comments start with REM
The keyword REM, short for 
remark
, starts a macro comment. All text 
after REM (on the same line) is ignored. As a short cut, the single 
quote character can also be used to start a comment.
Tip
StarBasic is not case-sensitive for keywords, so REM, Rem, 
and rem all start a comment. If you use symbolic constants 
defined by the API, it is safer to assume that the names are 
case-sensitive—symbolic constants are an advanced topic not 
usually needed by people that use the macro recorder.
Defining subroutines with SUB
Individual macros are stored in subroutines defined with the keyword 
SUB. The end of a subroutine is indicated by the words END SUB. The 
code starts by defining the subroutine named Main, which is empty 
and does nothing. The next subroutine, EnterMyName, contains the 
generated code.
Tip
OpenOffice.org creates an empty subroutine named Main 
when it creates a module.
There are advanced topics that are beyond the scope of this document, 
but knowing about them might be of interest:
You can write a macro so that values can be passed to the 
subroutine. The values are called arguments. Recorded macros do 
not accept arguments.
Chapter 13  Getting Started with Macros
371
Cut pages from pdf online - copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
cut pages out of pdf online; extract one page from pdf online
Cut pages from pdf online - VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
export pages from pdf reader; extract pages from pdf without acrobat
Another kind of subroutine is called a function. A function is a 
subroutine that returns a value. The keyword FUNCTION is used 
rather than SUB to define a function. Generated macros are 
always of type SUB.
Defining variables using DIM
You can write information on a piece of paper so that you can look at it 
later. A variable, like a piece of paper, contains information that can be 
changed and read. The DIM statement is similar to setting aside a 
piece of paper to be used to store a message or note.
The EnterMyName macro defines the variables 
document
and 
dispatcher
as type 
object
. Other common variable types include 
string
integer
, and 
date
. A third variable, named 
args1,
is an array of 
property values. A variable of type 
array
allows a single variable to 
contain multiple values, similar to storing multiple pages in a single 
book. Values in an array are usually numbered starting from zero. The 
number in the parentheses indicates the highest usable number to 
access a storage location. In this example, there is only one value, and 
it is numbered zero.
Pulling the macro together
The following details are very complete; it is not important to 
understand all of the details. The first line defines the start of the 
macro.
sub EnterMyName
Declare two variables:
dim document   as object
dim dispatcher as object
ThisComponent refers to the current document.
The CurrentController property of a document refers to a service that 
“controls” the document. For example, when you type, it is the current 
controller that notices. The current controller then dispatches the 
changes to the document’s frame.
The Frame property of a controller returns a main frame for a 
document. Therefore, the variable named 
document
refers to a 
document’s frame, which receives dispatched commands.
document = ThisComponent.CurrentController.Frame
Most tasks in OpenOffice.org are accomplished by dispatching a 
command. OOo version 2.0 introduced the dispatch helper service, 
which does most of the work to use dispatches in macros. The method 
372
Getting Started with OpenOffice.org 3
VB.NET PDF copy, paste image library: copy, paste, cut PDF images
Copy, paste and cut PDF image while preview without adobe Free Visual Studio .NET PDF library, easy to be Online source codes for quick evaluation in VB.NET
convert selected pages of pdf to word online; delete pages from pdf in reader
C# PDF copy, paste image Library: copy, paste, cut PDF images in
C#.NET PDF SDK - Copy, Paste, Cut PDF Image in C#.NET. C#.NET Demo Code: Cut Image in PDF Page in C#.NET. PDF image cutting is similar to image deleting.
delete pages from pdf acrobat; delete pages from pdf in preview
CreateUnoService accepts the name of a service and it tries to create 
an instance of that service. On completion, the dispatcher variable 
contains a reference to a DispatchHelper.
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Declare an array of properties. Each property has a name and a value. 
In other words, it is a name/value pair. The created array has one 
property at index zero.
dim args1(0) as new com.sun.star.beans.PropertyValue
Give the property the name “Text” and the value “Andrew Pitonyak”, 
which is the text that is inserted when the macro is run.
args1(0).Name = "Text"
args1(0).Value = "Andrew Pitonyak"
This is where the magic happens. The dispatch helper sends a dispatch 
to the document’s frame (stored in the variable named document) with 
the command .uno:InsertText. The next two arguments, 
frame name
and 
search flags
, are beyond the scope of this document. The last 
argument is the array of property values to be used while executing 
the command InsertText.
dispatcher.executeDispatch(document, ".uno:InsertText""", 0, args1())
Finally, the end of the subroutine.
end sub
Creating a macro
I usually ask two questions before recording a macro:
1) Can the task be written as a simple set of commands?
2) Can the steps be arranged such that the last command leaves the 
cursor ready for the next command?
A complicated example
I frequently copy rows and columns of data from a web site and format 
them as a table in a text document. First, I copy the table from the web 
site to the clipboard. To avoid strange formatting and fonts, I paste the 
text into a Writer document as unformatted text. I reformat the text 
with tabs between columns so that I can use Table > Convert > Text 
to Table to convert to a table.
I inspect the text to see if I can record a macro to format the text 
(remember the two questions that I ask). As an example, I copied the 
FontWeight constants group from the OpenOffice.org web site. The 
Chapter 13  Getting Started with Macros
373
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Enable specified pages deleting from PDF in Visual Basic .NET class. Free trial SDK library download for Visual Studio .NET program. Online source codes for
deleting pages from pdf file; cut pages from pdf
VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
add and insert one or multiple pages to existing adobe PDF document in VB.NET. Ability to create a blank PDF page with related by using following online VB.NET
a pdf page cut; delete pages from pdf acrobat reader
first column indicates the constant name. Each name is followed by a 
space and a tab.
DONTKNOW  The font weight is not specified/known.
THIN 
specifies a 50% font weight.
ULTRALIGHT  specifies a 60% font weight.
LIGHT 
specifies a 75% font weight.
SEMILIGHT  specifies a 90% font weight.
NORMAL 
specifies a normal font weight.
SEMIBOLD 
specifies a 110% font weight.
BOLD 
specifies a 150% font weight.
ULTRABOLD  specifies a 175% font weight.
BLACK 
specifies a 200% font weight.
I want the first column to contain the numeric value, the second 
column the name, and the third column the description. The desired 
work is easily accomplished for every row except for DONTKNOW and 
NORMAL, which do not contain a numeric value—but I know that the 
values are 0 and 100, so I will enter those manually.
The data can be cleaned in multiple ways—all of them easy. The first 
example uses keystrokes that assume the cursor is at the start of the 
line with the text THIN.
1) Use Tools > Macros > Record Macro to start recording.
2) Press 
Ctrl+Right Arrow
to move the cursor to the start of 
“specifies”.
3) Press 
Backspace
twice to remove the tab and the space.
4) Press 
Tab
to add the tab without the space after the constant 
name.
5) Press 
Delete
to delete the lower case s and then press 
S
to add an 
upper case S.
6) Press 
Ctrl+Right Arrow
twice to move the cursor to the start of 
the number.
7) Press 
Ctrl+Shift+Right Arrow
to select and move the cursor 
before the % sign.
8) Press 
Ctrl+C
to copy the selected text to the clipboard.
9) Press 
End
to move the cursor to the end of the line.
374
Getting Started with OpenOffice.org 3
C# PDF Page Insert Library: insert pages into PDF file in C#.net
adding and inserting one or multiple pages to existing Offer PDF page break inserting function. Free components and online source codes for .NET framework 2.0+.
deleting pages from pdf in preview; extract pdf pages for
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Image: Copy, Paste, Cut Image in Page. Link: Edit Redact Text Content. Redact Images. Redact Pages. Annotation & Text. Add Text Box. Drawing Markups. PDF Print. Work
extract pdf pages online; copy pages from pdf to another pdf
10) Press 
Backspace
twice to remove the two trailing spaces.
11) Press 
Home
to move the cursor to the start of the line.
12) Press 
Ctrl+V
to paste the selected number to the start of the line.
13) Pasting the value also pasted an extra space, so press 
Backspace
to remove the extra space.
14) Press 
Tab
to insert a tab between the number and the name.
15) Press 
Home
to move to the start of the line.
16) Press 
down arrow
to move to the next line.
17) Stop recording the macro and save the macro.
It takes much longer to read and write the steps than to record the 
macro. Work slowly and think about the steps as you do them. With 
practice this becomes second nature.
The generated macro has been modified to contain the step number in 
the comments to match the code to the step above.
Listing 
2
: Copy the numeric value to the start of the column.
sub CopyNumToCol1
rem -------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem -------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem (2) Press Ctrl+Right Arrow to move the cursor to the start of “specifies”.
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem (3) Press Backspace twice to remove the tab and the space.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (4) Press Tab to add the tab without the space after the constant name.
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Text"
args4(0).Value = CHR$(9)
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())
rem (5) Press Delete to delete the lower case s ....
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
rem (5) ... and then press S to add an upper case S.
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Text"
args6(0).Value = "S"
Chapter 13  Getting Started with Macros
375
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
from PDF Page. Image: Copy, Paste, Cut Image in Redact Text Content. Redact Images. Redact Pages. Annotation & Add Text. Add Text Box. Drawing Markups. PDF Print.
export one page of pdf preview; extract page from pdf online
VB.NET PDF: Basic SDK Concept of XDoc.PDF
example, you may easily create, load, combine, and split PDF file(s), and add, create, insert, delete, re-order, copy, paste, cut, rotate, and save PDF page(s
acrobat remove pages from pdf; deleting pages from pdf document
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6())
rem (6) Press Ctrl+Right Arrow twice to move the cursor to the number.
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem (7) Press Ctrl+Shift+Right Arrow to select the number.
dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
rem (8) Press Ctrl+C to copy the selected text to the clipboard.
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem (9) Press End to move the cursor to the end of the line.
dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())
rem (10) Press Backspace twice to remove the two trailing spaces.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (11) Press Home to move the cursor to the start of the line.
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
rem (12) Press Ctrl+V to paste the selected number to the start of the line.
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem (13) Press Backspace to remove the extra space.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (14) Press Tab to insert a tab between the number and the name.
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "Text"
args17(0).Value = CHR$(9)
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args17())
rem (15) Press Home to move to the start of the line.
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
rem (16) Press down arrow to move to the next line.
dim args19(1) as new com.sun.star.beans.PropertyValue
args19(0).Name = "Count"
args19(0).Value = 1
args19(1).Name = "Select"
args19(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args19())
end sub
376
Getting Started with OpenOffice.org 3
Cursor movements are used for all operations (as opposed to 
searching). If run on the DONTKNOW line, the word 
weight
is moved 
to the front of the line, and the first “The” is changed to “She”. This is 
not perfect, but I should not have run the macro on the lines that did 
not have the proper format; I need to do these manually.
Running the macro quickly
It is tedious to repeatedly run the macro using Tools > Macros > Run 
Macro (see Figure 316). The macro can be run from the IDE. Use 
Tools > Macros > Organize Macros > OpenOffice.org Basic to 
open the Basic Macro dialog. Select your macro and click Edit to open 
the macro in the IDE.
The IDE has a Run Basic icon in the toolbar that runs the first macro 
in the IDE. Unless you change the first macro, it is the empty macro 
named Main. Modify Main so that it reads as shown in Listing 3.
Listing 
3
: Modify Main to call CopyNumToCol1.
Sub Main
CopyNumToCol1
End Sub
Now, you can run CopyNumToCol1 by repeatedly clicking the Run 
Basic icon in the toolbar of the IDE. This is very fast and easy, 
especially for temporary macros that will be used a few times and then 
discarded.
Sometimes the macro recorder fails
Understanding the OpenOffice.org internals helps to understand how 
and why the macro recorder frequently fails. The primary offender is 
related to the dispatch framework and its relationship to the macro 
recorder.
The dispatch framework
The purpose of the dispatch framework is to provide a uniform access 
to components (documents) for commands that usually correspond to 
menu items. I can use File > Save from the menu, the shortcut keys 
Ctrl+S
, or click on the Save toolbar icon. All of these commands are 
translated into the same “dispatch command”, which is sent to the 
current document.
Chapter 13  Getting Started with Macros
377
The dispatch framework can also be used to send “commands” back to 
the UI (User Interface). For example, after saving the document, the 
File Save command is disabled. As soon as the document has been 
changed, the File Save command is enabled.
If we see a dispatch command, it is text such as .uno:InsertObject or 
.uno:GoToStartOfLine. The command is sent to the document’s frame, 
and the frame passes on the command until an object is found that can 
handle the command.
How the macro recorder uses the dispatch 
framework
The macro recorder records the generated dispatches. The recorder is 
relatively simple to implement and the same commands that are issued 
are recorded for later use. The problem is that not all dispatched 
commands are complete. For example, inserting an object generates 
the following code:
dispatcher.executeDispatch(document, ".uno:InsertObject""", 0, Array())
It is not possible to specify what kind of object to create or insert. If an 
object is inserted from a file, you cannot specify which file to insert.
I recorded a macro and used Tools > Options to open and modify 
configuration items. The generated macro does not record any 
configuration changes; in fact, the generated code is commented so it 
will not even be run.
rem dispatcher.executeDispatch(document,
".uno:OptionsTreeDialog", "", 0, Array())
If a dialog is opened, the command to open the dialog is likely to be 
generated. Any work done inside the dialog is not usually recorded. 
Examples include macro organization dialogs, inserting special 
characters, and similar types of dialogs. Other possible problems using 
the macro recorder include things such as inserting a formula, setting 
user data, setting filters in Calc, actions in database forms, and 
exporting a document to an encrypted PDF file. You never know for 
certain what will work unless you try it, however. The actions from the 
search dialog are properly captured, for example.
Other options
When the macro recorder is not able to solve a specific problem, the 
usual solution is to write code using the OpenOffice.org objects. 
Unfortunately, there is a steep learning curve for the OOo objects. It is 
usually best to start with simple examples and then branch out slowly 
378
Getting Started with OpenOffice.org 3
as you learn more. Learning to read generated macros is a good place 
to start.
If you record Calc macros, and the recorder 
can
correctly generate a 
macro, there is an add-in created by Paolo Mantovani, which converts 
Calc macros when they are recorded. The final code manipulates 
OpenOffice.org objects rather than generating dispatches. This can be 
very useful for learning the object model.
You can download the macro recorder from Paolo’s web site directly or 
from the OOo Macros web site. You should check both places to see 
which contains the latest version.
http://www.paolo-mantovani.org/downloads/ DispatchToApiRecorder/ 
http://www.ooomacros.org/user.php 
Macro organization
In OpenOffice.org, macros are grouped in modules, modules are 
grouped in libraries, and libraries are grouped in library containers. A 
library is usually used as a major grouping for either an entire 
category of macros, or for an entire application. Modules usually split 
functionality, such as user interaction and calculations. Individual 
macros are subroutines and functions.
Figure 317: Macro Library hierarchy
A computer scientist would use Figure 318 to precisely describe the 
situation. The text “1..*” means one or more, and “0..*” means zero or 
more. The black triangle means composed of or contains. 
Chapter 13  Getting Started with Macros
379
A library container contains one or more libraries, and each 
library is contained in one library container.
A library contains zero or more modules, and each module is 
contained in one library.
A module contains zero or more macros, and each macro is 
contained in one module.
Figure 318: Macro Library hierarchy
Use Tools > Macros > Organize Macros > OpenOffice.org Basic 
to open the OpenOffice.org Basic Macros dialog (see Figure 319). All 
available library containers are shown in the 
Macro from
list. Every 
document is a library container, capable of containing multiple 
libraries. The application itself acts as two library containers, one 
container for macros distributed with OpenOffice.org called 
OpenOffice.org Macros, and one container for personal macros called 
My Macros. As shown in Figure 319, only two documents are currently 
open.
Figure 319: Library containers are shown on the left
The OpenOffice.org Macros are stored with the application runtime 
code, which may not be editable to you unless you are an 
administrator. This is just as well since these macros should not be 
changed and you should not store your own macros in the OOo 
container.
Unless your macros are applicable to a single document, and only to a 
single document, your macros will probably be stored in the My 
380
Getting Started with OpenOffice.org 3
Documents you may be interested
Documents you may be interested