Vpec Bundle ProgrammersManual
Vpec Bundle ProgrammersManual
Programmer's Manual
Programmer's
Manual
Programmer's Manual
Virtual Print Engine
www.idealsoftware.com
support@idealsoftware.com
Information in this document is subject to change without notice and does not represent a commitment on
the part of IDEAL Software. The software described in this document is furnished under a license
agreement or nondisclosure agreement. The software may be used or copied only in accordance with the
terms of the agreement. It is against the law to copy the software on any medium except as specifically allowed
in the license or nondisclosure agreement. No part of this documentation may be reproduced or transmitted
in any form or by any means, electronic or mechanical, including photocopying and recording, for any
purpose without the prior express written permission of IDEAL Software.
IDEAL Software, the IDEAL Software logo, DYCODOC and Virtual Print Engine are
registered trademarks, FieldStudio is a trademark of IDEAL Software, Neuss/Germany.
Microsoft, MS, Windows, Visual C++, Visual Basic, Visual FoxPro, MFC, ActiveX and .NET are
trademarks or registered trademarks of Microsoft Corporation in the United States and other countries.
Borland, the Borland Logo, C++Builder and Delphi are trademarks or registered trademarks of Borland
Software Corporation in the United States and other countries.
Adobe, Acrobat and PostScript are registered trademarks of Adobe Systems Inc.
Other product and company names mentioned herein may be the trademarks of their respective owners.
Contents
1 Installation 1
1.1 System Requirements .....................................................................................................................1
1.2 Windows Installation ......................................................................................................................1
1.2.1 Installing Different Versions Or Editions ................................................................................3
1.2.2 Demo Source Codes ...............................................................................................................3
1.2.3 64-bit Development................................................................................................................3
1.2.4 How is the Windows System Directory affected by SETUP?...................................................3
1.2.5 Installing the VPE .NET Component ......................................................................................3
1.2.6 Installing the VPE - ActiveX ..................................................................................................4
1.2.7 Installing the VPE VCL for RAD Studio / Delphi / C++ Builder .............................................5
1.3 Non-Windows Installation ..............................................................................................................7
1.3.1 Uninstalling VPE on Non-Windows Platforms........................................................................8
2 Getting Started 9
2.1 VPE Control (.NET / ActiveX / VCL).............................................................................................9
2.2 VPE Control (Java).......................................................................................................................10
2.3 VPE DLL on Windows.................................................................................................................12
2.4 VPE Shared Object / Dylib ...........................................................................................................13
3 Introduction 14
3.1 Overview......................................................................................................................................14
3.1.1 VPE In Short (all Editions) ...................................................................................................15
3.1.2 Community Edition ..............................................................................................................16
3.1.3 Enhanced Edition .................................................................................................................17
3.1.4 Professional Edition .............................................................................................................18
3.1.5 Enterprise Edition.................................................................................................................19
3.1.6 Interactive Edition ................................................................................................................19
3.2 The Demo VPEDEMO.EXE.........................................................................................................20
4 Programming Techniques 21
4.1 Introduction..................................................................................................................................21
4.1.1 Note on Source Codes Shipped with VPE .............................................................................21
4.1.2 Basics ..................................................................................................................................21
4.2 Using the VPE DLL / Shared Object .............................................................................................22
4.3 Preview ........................................................................................................................................24
4.3.1 The GUI is themeable...........................................................................................................27
4.4 The Object-Oriented Style ............................................................................................................29
4.4.1 VPE knows the following objects: ........................................................................................29
4.4.2 The inheritance order is ........................................................................................................30
4.4.3 Assigning Styles and Properties to Objects............................................................................31
4.5 Dynamic Positioning ....................................................................................................................33
4.5.1 The Basic Conception - Absolute Coordinates.......................................................................33
4.5.2 Dynamic Positioning ............................................................................................................34
4.5.3 Dynamic Text.......................................................................................................................35
4.5.4 Page Margins .......................................................................................................................38
4.5.5 Advanced Dynamic Positioning............................................................................................41
4.5.6 Rendering Objects ................................................................................................................42
4.5.7 Automatic Text Break ..........................................................................................................44
4.6 Rotation of Text, Images and Barcodes .........................................................................................46
4.7 Pictures ........................................................................................................................................48
4.7.1 Scaling.................................................................................................................................50
4.7.2 Image Type Identification.....................................................................................................51
4.7.3 Image Cache ........................................................................................................................51
4.7.4 Using BLOB's or other Temporary Images / Memory Streams ..............................................53
4.7.5 Scale-to-Gray Technology....................................................................................................54
4.7.6 Remarks...............................................................................................................................55
4.8 RTF - Rich Text Format ...............................................................................................................56
4.8.1 Features of VPE ...................................................................................................................56
4.8.2 Introduction to RTF..............................................................................................................58
4.8.3 Controlling RTF from VPE – ‘Easy RTF’ .............................................................................60
4.8.4 Overloading Mechanism.......................................................................................................65
4.8.5 RTF Demo Source Code.......................................................................................................65
4.8.6 Some Notes About VPE and RTF .........................................................................................66
4.8.7 RTF Properties processed by VPE ........................................................................................67
4.9 Barcodes (1D) ..............................................................................................................................71
4.9.1 Code 39 (3 of 9) ...................................................................................................................73
4.9.2 Code 39 extended (3 of 9 extended) ......................................................................................74
4.9.3 Code 93 (9 of 3) ...................................................................................................................75
4.9.4 Code 93 extended.................................................................................................................76
4.9.5 Code-128 and GS1-128 / EAN-128 / UCC-128.....................................................................77
4.9.6 Code 2 of 5 Interleaved.........................................................................................................80
4.9.7 Code 2 of 5 Industrial ...........................................................................................................81
4.9.8 Code 2 of 5 Matrix ...............................................................................................................82
4.9.9 EAN - (European-Article-Numbering)..................................................................................83
4.9.10 EAN-2 and EAN-5 Add-On Codes for EAN and UPC.........................................................87
4.9.11 UPC (Universal Product Code) ...........................................................................................88
4.9.12 Codabar..............................................................................................................................90
4.9.13 Code 11..............................................................................................................................91
4.9.14 MSI Barcode ......................................................................................................................92
4.9.15 Telepen-A ..........................................................................................................................93
4.9.16 Intelligent Mail...................................................................................................................94
4.9.17 Postnet - Postal Numeric Encoding Technique ....................................................................95
4.9.18 RM4SCC - Royal Mail 4 State Customer Code ...................................................................96
4.9.19 ISBN (International Standard Book Number) ......................................................................97
4.9.20 Identcode Deutsche Post .....................................................................................................98
4.9.21 Leitcode Deutsche Post AG ..............................................................................................100
4.9.22 PZN (Pharma Zentral Nummer) Code ...............................................................................102
4.10 Barcodes (2D) ..........................................................................................................................103
4.10.1 Data Matrix......................................................................................................................104
4.10.2 QR Code ..........................................................................................................................106
4.10.3 MaxiCode ........................................................................................................................107
4.10.4 PDF417............................................................................................................................108
4.10.5 Aztec................................................................................................................................109
4.11 FormFields ...............................................................................................................................110
4.11.1 Using FormFields.............................................................................................................111
4.11.2 Using Alternative Dividers ...............................................................................................112
4.12 Important Note About Pens, Lines, Frames, Circles and Ellipses................................................114
4.13 Unicode....................................................................................................................................115
4.14 Multipage Documents...............................................................................................................116
4.14.1 Generating a Document while the Preview is open ............................................................116
4.14.2 Headers and Footers .........................................................................................................117
4.15 Watermarks ..............................................................................................................................120
4.16 Multi-Threading .......................................................................................................................121
4.17 Embedded Flag-Setting.............................................................................................................122
4.18 Predefined Color Constants.......................................................................................................126
4.19 Printer Control..........................................................................................................................128
4.19.1 Printer Setup.....................................................................................................................128
4.19.2 Sophisticated Device Control............................................................................................130
4.20 Printing From A Service Like IIS (Internet Information Server).................................................130
4.21 WYSIWYG..............................................................................................................................131
4.22 Positioning On the Printer.........................................................................................................131
4.22.1 Correcting Possible Misaligned Printer Output..................................................................132
4.23 Fonts and Font Handling...........................................................................................................133
4.23.1 Base 14 Post Script Fonts .................................................................................................134
4.23.2 True-Type / OpenType Fonts............................................................................................135
4.23.3 Font Substitution ..............................................................................................................136
4.23.4 Making a Decision, Which Type of Font to Use ................................................................137
4.24 VPE Document Files ................................................................................................................138
4.24.1 Assembling VPE Document Files .....................................................................................138
4.24.2 Editing VPE Document Files ............................................................................................139
4.24.3 Memory Streams ..............................................................................................................139
4.24.4 Pictures and VPE Document Files.....................................................................................140
4.24.5 UDO's and VPE Document Files ......................................................................................140
4.24.6 On-Disk Document Files ..................................................................................................141
4.25 VPE View: The Document Viewer............................................................................................142
4.25.1 Faxing Documents with the MailDoc() Method.................................................................143
4.26 Standards..................................................................................................................................143
15 Index 230
1 Installation
asp.net\ directory with demo sources for ASP.NET, using the VpeWebControl
There is an important Readme.txt file explaining the proper import of the demo project!
C++\ directory with header-files and demo sources for use with C/C++ compilers
cbuilder\ directory with VCL as souce code for Borland C++ Builder (installation see below)
delphi\ directory with VCL as souce code and demo sources for use with Borland Delphi
(installation see below)
deploy\ directory with redistributable files (see "License Agreement" in this manual)
deploy\VpeCtrl72.dep dependency file for the VPE ActiveX Control; used by some install utilities, so they can
automatically determine, which DLL's are needed by the ActiveX
deploy\vpe<?>3272.dll the engine DLL – where the <?> is to be substituted depending on the edition with:
‘C’ for the Community Edition
‘S’ for the Standard Edition
‘X’ for the Enhanced Edition
‘P’ for the Professional Edition
‘E’ for the Enterprise Edition
‘I’ for the Interactive Edition
deploy\Vpe*.dll the Winforms .NET Component - where the * is to be substituted depending on the edition
with:
‘Community’ for the Community Edition
‘Standard’ for the Standard Edition
‘Enhanced’ for the Enhanced Edition
‘Professional’ for the Professional Edition
‘Enterprise’ for the Enterprise Edition
deploy\VpeWeb*.dll the VPE .NET WebServerControl - where the * is to be substituted depending on the
edition with:
‘Community’ for the Community Edition
‘Standard’ for the Standard Edition
‘Enhanced’ for the Enhanced Edition
‘Professional’ for the Professional Edition
‘Enterprise’ for the Enterprise Edition
‘Interactive’ for the Interactive Edition
deploy\vpe.jar Non-GUI version of the Java class library, to use VPE with Java
deploy\vpejni<?>3272.dll the Non-GUI Java Native Interface (JNI) DLL – where the <?> is to be substituted
depending on the edition with:
‘C’ for the Community Edition
‘S’ for the Standard Edition
‘X’ for the Enhanced Edition
‘P’ for the Professional Edition
‘E’ for the Enterprise Edition
‘I’ for the Interactive Edition
deploy\vpegui.jar GUI version of the Java class library, to use VPE with Java (Windows only)
deploy\vpejnigui<?>3272.dll the GUI Java Native Interface (JNI) DLL – where the <?> is to be substituted depending on
the edition with:
‘C’ for the Community Edition
‘S’ for the Standard Edition
‘X’ for the Enhanced Edition
‘P’ for the Professional Edition
‘E’ for the Enterprise Edition
‘I’ for the Interactive Edition
images\ contains bitmaps, RTF and VPE documents used by the demos
imp_libs\ import libraries for C++ and other compilers, see readme.txt in this directory
internet\ HTML demo sources which show the use of the ActiveX within Internet Explorer.
The HTML file contains detailed instructions on how to use the VPE ActiveX.
Progress\ directory with demo sources for use with Progress 4GL
vb\ directory with demo sources for use with Microsoft Visual Basic (only 32-bit version)
vb net\ directory with demo sources for use with Microsoft Visual Basic .NET
relnotes.html release notes, contains a list of changes for users of previous versions
VPE Control Reference.chm helpfile for the control, i.e. VPE .NET / ActiveX / VCL Control Reference
NOTE: Some Containers (like for example Visual FoxPro) do not import the constants (like
VFREE, ALIGN_LEFT, etc.) defined in the ActiveX.
For some Containers we included definition files for import, please check the source code
directories.
The constants and their values are listed in this manual - and in the "Control Reference Manual"
(which is VPECTRL.HLP) - with the description of each function. Also the C-Header files ("*.H")
in the installation subdirectory "C" contain those definitions.
NOTE: Copy the directories to a place on your hard drive, where you have write
permissions (in the following called <vpe-source-path>).
64-Bit:
Up to XE6 the RAD Studio IDE is only available as 32-bit executable.
You can use the compilers to generate 64-bit code, but the 64-bit VCL components can not be
used on forms during design-time, i.e. when developing an application. You will require
additionally the 32-bit version of VPE, in order to use the components at design-time.
In the following explanation ".so" has to substituted with ".dylib" for Mac OS X platforms.
The installer copies libvpe<?>.so.<version> to the according lib directory at /usr.
This is the engine shared object - where the ? is to be substituted depending on the edition with:
‘c’ for the Community Edition
‘s’ for the Standard Edition
‘x’ for the Enhanced Edition
‘p’ for the Professional Edition
‘e’ for the Enterprise Edition
‘i’ for the Interactive Edition
Depending on the platform and processor, for which VPE is compiled, the target lib directory is
one of the following: lib, lib32, lib64, sparcv9, amd64.
bin Directory with utility software for licensing and uninstalling VPE, as well as demo
executables
bin/insthlp Version and license manager called by the installer and the license and uninstall utilities,
do not use.
bin/vpedemo and vppdemo Demo executables (vpedemo demonstrates the features of the Standard Edition, vppdemo
demonstrates the features of the Professional Edition).
c++ Directory with demo sources for use with C/C++ compilers
for each .cpp file there is a shell script (starting with the letter ‘b’) to build the executable
deploy/ Directory with redistributable files (see "License Agreement" in this manual)
deploy/libvpe<?> so.7.20.0 or The engine shared object - where the ? is to be substituted depending on the edition with:
deploy/libvpe<?>. dylib.7.20.0 ‘C’ for the Community Edition
‘S’ for the Standard Edition
‘X’ for the Enhanced Edition
‘P’ for the Professional Edition
‘E’ for the Enterprise Edition
‘I’ for the Interactive Edition
deploy/LicenseTool Server License Tool - use this tool to activate server licenses on target servers
(only Professional Edition or higher; only Solaris, OpenSolaris, Aix, AS/400)
doc/relnotes.html Release notes, contains a list of changes for users of previous versions
images/ Contains bitmaps, RTF and VPE documents used by the demos
Congratulations, this is your first program using VPE! Depending on the programming language
you are using, you must add semicolons ";" at the end of each line, or leave out the empty
parentheses "( )".
The source code is self-explanatory, the only thing to explain are the numbers in the calls to
WriteBox() and Line(): these are the coordinates in centimeters relative to the upper left corner of
the page. The coordinates are organized as (left, top, right, bottom).
Note: you can also switch to inch units, so the coordinates are not in centimeters, but in inches.
Please note that this is a very very simple demo. For example, VPE can compute the width and
height of a text object depending on the text-length and the chosen font. So you can position
objects dynamically at runtime relative to each other, in contrast to a static layout.
We recommend to continue with the tutorial created by running the "vpedemo" executable, which
comes with VPE. The demo named "Capabilities + Precision" creates a document with a handy 5-
page tutorial (beginning on page 2 of the document).
The very detailed and in-depth explanation of all aspects and features of VPE can be found in this
document in the chapter “Programming Techniques” on page 21.
class VpeTest {
class VpeGuiTest {
Congratulations, this is your first Java program using VPE! The source code is self-explanatory,
the only thing to explain are the numbers in the calls to writeBox() and line(): these are the
coordinates in centimeters relative to the upper left corner of the page. The coordinates are
organized as (left, top, right, bottom).
Note: you can also switch to inch units, so the coordinates are not in centimeters, but in inches.
Please note that this is a very very simple demo. For example, VPE can compute the width and
height of a text object depending on the text-length and the chosen font. So you can position
objects dynamically at runtime relative to each other, in contrast to a static layout.
We recommend to continue with the tutorial created by running the "vpedemo" executable, which
comes with VPE. The demo named "Capabilities + Precision" creates a document with a handy 5-
page tutorial (beginning on page 2 of the document).
You must link your application against the VPE library. For example, in Visual Studio put the
library into your solution. The library can be found in the installation directory of VPE, in the
subdirectory "imp_libs" under the name "vpe<version>.lib".
Congratulations, this is your first program using VPE! The source code is self-explanatory, the
only thing to explain are the numbers in the calls to WriteBox() and Line(): these are the
coordinates in centimeters relative to the upper left corner of the page. The coordinates are
organized as (left, top, right, bottom).
Note: you can also switch to inch units, so the coordinates are not in centimeters, but in inches.
Please note that this is a very very simple demo. For example, VPE can compute the width and
height of a text object depending on the text-length and the chosen font. So you can position
objects dynamically at runtime relative to each other, in contrast to a static layout.
We recommend to continue with the tutorial created by running the "vpedemo" executable, which
comes with VPE. The demo named "Capabilities + Precision" creates a document with a handy 5-
page tutorial (beginning on page 2 of the document).
The very detailed and in-depth explanation of all aspects and features of VPE can be found in this
document in the chapter “Programming Techniques” on page 21.
You must link your application against the VPE library, please consult the manuals of your linker
on how to do this. On Linux for example, provide to the linker the switch "-lvpep" (vpep for the
Professional Edition, vpex for the Enhanced Edition, vpes for the Standard Edition and vpec for
the Community Edition).
Congratulations, this is your first program using VPE! The source code is self-explanatory, the
only thing to explain are the numbers in the calls to WriteBox() and Line(): these are the
coordinates in centimeters relative to the upper left corner of the page. The coordinates are
organized as (left, top, right, bottom).
Note: you can also switch to inch units, so the coordinates are not in centimeters, but in inches.
Please note that this is a very very simple demo. For example, VPE can compute the width and
height of a text object depending on the text-length and the chosen font. So you can position
objects dynamically at runtime relative to each other, in contrast to a static layout.
We recommend to continue with the tutorial created by running the "vpedemo" executable, which
comes with VPE. The demo named "Capabilities + Precision" creates a document with a handy 5-
page tutorial (beginning on page 2 of the document).
The very detailed and in-depth explanation of all aspects and features of VPE can be found in this
document in the chapter “Programming Techniques” on page 21.
3.1 Overview
Congratulations on your purchase of Virtual Print Engine! With VPE you acquired a product of
superior quality in terms of performance, stability, well tought-out programming interface, multi-
platform support, in-depth documentation and support.
VPE is a very fast and powerful tool for the dynamic creation of documents. It offers broad
support in creating just any kind of document, like complex reports and lists, forms, diagrams,
drawings, labels and barcodes.
VPE provides a well thought-out set of functions to place objects (i.e. lines, text, images, etc.)
freely in a document. The basic conception is that your application calls these functions during
runtime to create dynamically the layout of entire documents.
VPE supports you by computing automatically word-breaks as well as page breaks, splitting up
long text over multiple pages. You can make objects like text, rich text and images dynamic, so
they extend accordingly to their content. You can pre-compute (render) the dimensions of such
dynamic objects before inserting them into a document and you can position other objects
relatively to the extents of such dynamic objects. You can add at any time new pages and you can
move at any time to any page to add new objects.
All this is done through a simple and intuitive API (Application Programming Interface). Whilst
the API is very extensive to provide full control over every aspect of the document creation
process, you only need to know a handful of methods and properties to start generating high-level
documents within minutes.
Since you control the layout of each object by code, there is no limit for the complexity of a
document: each object is positioned in a high resolution coordinate system with an internal
precision of 0.0001 mm.
VPE helps increasing your productivity by many times, having its position in the list of your tools
at the point, where you can't go further with standard report generators.
Windows platform:
• Built-in, zoomable preview with true WYSIWYG vector-graphics. In fact, VPE renders all
objects in a virtual high resolution and then transforms it to the specified device, be it the
screen, a printer, a fax or whatsoever. This gives best possible WYSIWYG results.
• The preview can be shown - and the user can scroll through it - while you are still generating a
document. Works with and without multi-threading!
• Direct printing and printer access. Enumerate all available printers, select a specific printer by
code, and modify nearly all possible printer properties by code. Specify the printer's paper bin
for each page separately.
• Don't worry about the printer, its resolution, or printing-offset (this is the part of the page the
printer cannot print on). Your documents will look the same on every printer as much as it is
technically possible.
• Send VPE- or PDF documents and other attachments by e-mail and fax easily through
Extended- or Simple MAPI. A royalty-free document viewer for VPE document files is
included.
NOTE: The Community Edition does only support Simple MAPI.
• The ActiveX offers full FTP- / HTTP-support to create server based reports. Therefore you can
plug it into browsers on the intra- and internet and even reference image and RTF files with for
example "ftp://ftp.my-server.com/image1.gif" in your source code (VB Script or Java(-script)).
On the other hand, you can create a VPE Document file in your native programming language
on the server (or transfer it there) and instruct the ActiveX in the browser to load and display a
specific document file from the server in the intra- or internet. Moreover the images contained
in the document may be linked to image files stored on the server.
• VPE's user interface (GUI) "speaks" eleven languages: VPE selects the right language for all
tooltips and dialogs automatically - depending on the country setting in the control panel of the
system VPE is currently running on. Supported languages are: English, Spanish, German,
French, Italian, Dutch, Danish, Swedish, Finnish, Norwegian, Portuguese. Optional you can
select the language by code. In addition you can define all text of the GUI elements by code, so
you can use any language.
Windows platform:
• UDO - Powerful User Defined Objects - This allows to print and preview any kind of drawing
or object, including OLE/COM objects!
• Clickable Objects - Objects can be made clickable. If the user clicks onto such an object your
application receives an event. This allows to implement drill-down reports or to show a
separate dialog, with more detailed information about the clicked text or image.
• Export of single pages or parts of pages as:
• BMP
• WMF (Windows platform only)
• EMF (Windows platform only)
• JPEG (compression ratio can be set freely)
• PNG (ZIP compressed)
• TIFF 6.0 (Fax G3, Fax G4, LZW, Packbits, Deflate, JPEG, Multipage)
• GIF (Multipage)
• For all bitmap formats you can specify the color depth and the resolution (in DPI). Additionally
dithering is possible.
• Scale-To-Gray Technology - a 300 or 600 DPI image scaled to a 96 DPI device (the screen) is
looking bad due to its nature. The Scale-To-Gray Technology uses 2 different images, one for
the screen (preview) and one for printing. The screen image is scaled down to 96 DPI while the
loss of visual information is transformed to gray-values. This means perfect readability of such
images on a 96 DPI device.
• PrintScale - The output to the printing device can be scaled
Welcome
An introduction.
Capabilities + Precision
This demo shows text formatting features, drawing features, bitmap handling, form filling and of
course printing. Important: the VPE-DLL "docks” its view inside of the window owned by
vpedemo.exe! This is very easily done by a few lines of C code!
The menu entry "Background” shows how to print without showing a preview and no setup-
dialog (default printer is used). The Preview sends the VPE_HELP message to the calling
application instead of showing the standard help dialog, so you see the message box "User
requested help" on the screen.
Speed + Tables
Here you can see how fast VPE builds a report with a size of about 110 - 130 pages:
A text file with random data is generated (journal.rpt). vpedemo.exe reads the text file line by line,
interpreting it and instructing VPE how to build the report.
Since it is random data, the number of pages differs from 110 - 130 pages. Note, this demo prints
the number of generated pages finally on the FIRST page of the report in the upper left corner.
This is done by the virtual processing of the document, where you can move to any page at any
time to draw on it. In this case the demo generates all pages and then jumps to the first page to
draw the message.
Colors
There you can see a fixed scaled window. Also, the toolbar has only the print and the e-mail
button, and the status bar is hidden. The user cannot close the document; it can only be closed
through vpedemo.exe by selecting the "Close Preview” menu entry. If you print the page to a color
printer, you will get a true-color result.
Report
This is another report, showing various colors and a pie chart on the second page. The source
code shows very fine, how easy creating reports is by encapsulating the different parts of the
report into functions.
4.1 Introduction
The following chapters explain all features of VPE and the VPE API (Application Programming
Interface).
If you are using the VPE Enterprise or Interactive Edition, you might want to skip this chapter and
jump directly to the introduction of “dycodoc Template Processing” on page 144. However, we
recommend to return to this chapter later in order to make yourself familiar with the underlying
VPE API. It will help you in getting a better insight into the internals of VPE and to make use of
the powerful VPE API.
4.1.2 Basics
All objects of VPE are positioned and sized with an internal precision of 0.0001 mm. You can
select programmatically, whether you supply coordinates to VPE in centimeter or inch units by
setting the property:
VPE.UnitTransformation = VUNIT_FACTOR_CM // centimeters
VPE.UnitTransformation = VUNIT_FACTOR_INCH // inch
Throughout this manual - as well as the reference manuals and the demo source codes - all
examples are using the centimeter unit coordinate system.
Most output functions need a starting coordinate (x, y) which specifies the upper left corner, and
some need an ending coordinate (x2, y2) for the lower right corner of an object - for example a
line or some text. X and X2 specify the offset to the left page margin. Y and Y2 specify the offset
to the top page margin.
Note: For the VPE Control (.NET / ActiveX / VCL) there are examples for the first basic
steps in using VPE in the "Control Reference" (VPE Control Reference.chm).
Please read the introductory sections there and continue with the section
“Preview” on page 24 in this manual.
NOTE: Preview and printing is only available for the Windows platform. On all other platforms
you can generate VPE document files, as well as PDF and HTML (HTML output requires
the Professional Edition or above).
You may open as many documents simultaneously as you like. The documents are identified by a
unique handle (VpeHandle, which is a 32-bit integer on 32-bit platforms and a 64-bit integer on
64-bit platforms) with a value different from NULL, which is returned by VpeOpenDoc(). Use this
handle in successive calls to the output functions.
Each document might send messages. The messages are received by the window, which is
specified as parent-window in the first parameter of VpeOpenDoc(). On non-Windows platforms
you can install a message callback function.
A VPE document can exist without showing a preview. But if a preview is shown, the document is
closed and removed from memory by default, when the preview is closed by the user or when the
parent window is closed. If you call VpeEnableAutoDelete(hDoc, false), the document is not
closed when the preview is closed.
The code above will bring up the preview window (without the "Monthly Report" text) shown in
the next chapter.
Generates a PDF file named "test.pdf". On non-Windows platforms you must always call
VpeCloseDoc() to remove a document from memory.
The Zoom-Tool:
When activating the Zoom-Tool by clicking onto the zoom-tool button in the toolbar or by
pressing the Insert key, the mouse cursor changes to the zoom-tool icon and you have several
options:
• You can click with the left mouse button somewhere into the preview. This will zoom in by one
level and center the preview at the point you had clicked. You can also press the Insert key, this
will zoom in by one level using the current center of the preview.
• You can click with the left mouse button somewhere into the preview, hold the button down
and drag the mouse. In this case a rubber band will appear. When you release the mouse button,
the area covered by the rubber band will be zoomed into the preview.
• You can click with the right mouse button somewhere into the preview. This will zoom out by
one level and center the preview at the point you had clicked.
• You can end the zoom tool mode by either pressing the ESC key or by clicking once again onto
the zoom-tool button in the toolbar.
Special Keys:
• Ctrl + O: Open
• Ctrl + S: Save
• F1: Help
• F2: Print
• F3: Mail
• 'g': Turn Grid on / off (only, if the grid button in the toolbar is enabled)
• 'i': Info Dialog
• ENTER: enter a page number to preview
All keys listed above can be re-defined by your application, i.e. you can define by code, what key
will cause a specific action.
The preview window can be customized in many ways: all keyboard accelerators can be redefind.
You can hide buttons and button groups or even the whole toolbar. You can also hide the rulers
and the statusbar, or specific controls of the statusbar. For details see "Management Functions" in
the reference help files.
The closing of the document fires the event AfterDestroyWindow() (VCL: OnDestroyWindow();
DLL: VPE_DESTROYWINDOW) to your application, which can be used in several ways to have
control over what is happening. For example you can disable menu entries and buttons in your
application, which start report generation - so a report isn't generated a second time - and re-enable
them after receiving this event.
Each theme can be used on any supported Windows version, except the Office 2003 Blue, Olive
und Silver themes, which are especially adapted to the predefined themes of Windows XP.
Frame
Picture Box
Foreground
Examples:
FontName = "Times New Roman"
FontSize = 12
Print(1, 1, "Hello World!")
Will print the text "Hello World!" with the font Times New Roman in 12 pt. size.
Will print the text "Hello World!" with the font Times New Roman in 12 pt. size and the text
“What a nice day!” with the same font and font-size but in bold, and afterwards the text "Hello
Everybody!" with the same font and font-size, but in bold and italic.
FontName = "Arial"
FontSize = 10
PenSize = 0.06
BkgMode = VBKG_GRD_LINE
BkgGradientStartColor = COLOR_LTYELLOW
BkgGradientEndColor = COLOR_ORANGE
PrintBox(1, 1, "Hello World!")
Will print the text "Hello World!" with the font Arial in 10 pt. size, surrounded by a box drawn
with a 0.6mm thick pen and filled with a gradient running from light yellow to orange.
Note that the text object was inserted with the method "PrintBox" instead of "Print()" in the
previous examples. You will also notice that font sizes are given in Point, whilst positions and
the line thickness are given in metric units (inch units can also be used).
The examples above show VPE's basic principle for assigning properties to objects:
First, you set all global properties to the desired values and then you insert an object. When
inserted, an object will automatically use all related global properties. After an object has been
inserted into the document, its properties can not be modified (except in the Enterprise and
Interactive Edition).
The global properties keep their values until they are changed. When opening a document, each
global property has a default value which is indicated in the reference help files.
Each VPE document keeps and manages independently its own set of global properties.
NOTE: In the examples above we used the True-Type fonts "Times New Roman" and "Arial".
These fonts are not available by default on other platforms than Windows and Mac OS.
NOTE: You must specify all coordinates in normalized form, this means, the following conditions
have to be met:
left <= right and top <= bottom, otherwise the object will not display correctly.
Example:
Box(1, 1, 5, 5) is correct
Box(5, 5, 1, 1) is incorrect
Box(1, 5, 5, 1) is incorrect
Instead of specifying the bottom right corner in absolute coordinates, you can use negative values
for the right and bottom coordinates. These values are then interpreted as width and height of the
object.
Example:
Box(1, 1, 7, 9)
Uses absolute coordinates and draws a box with the top left corner at 1, 1 and the bottom right
corner at 7, 9.
Draws exactly the same box whilst specifying the width and the height of the box.
Note that VPE keeps track of these coordinates for each page separately.
NOTE: In .NET you have to prefix the V-Flags with the class name VpeControl, e.g.:
Report.Print(VpeControl.VLEFT, VpeControl.VBOTTOM, "Hello")
As an alternative you can use the instance name of the control followed by an
n-Property, e.g.:
Report.Print(Report.nLeft, Report.nBottom, "Hello")
Examples:
Write(1, 1, -6, VFREE, "long text.....")
Inserts a text object without frame at position 1cm, 1cm with a width of 6 cm.
Its height is calculated and depends on the length of the text and the font size used.
StorePos()
This will store the coordinates (left, top, right, bottom) of the last inserted object on a dynamic
stack. The stack is limited in size only by available memory.
This inserts the next text object at position left = 7cm (the right-coord. of the last inserted
object [1 + 6]), top = 1cm (the top-coord. of the last inserted object); with a width of 4cm.
The height is computed (VFREE).
RestorePos()
This will now restore the last stored coords from the stack.
This inserts the next text object at position left = 1cm (the left-coord. of the restored coords),
top = ?cm (the bottom-coord. of the restored coords, we use a ‘?’ here, because we do not
know the exact value, since VPE did compute it), with a width of 6cm (the right-coord. of the
restored coords), the height is calculated.
If the bottom coordinate is not dynamic (i.e. not VFREE) and there is not enough room to output
all text, remaining text will be clipped.
Fig. 2: (x, y) and (x2, y2) are fixed coordinates. A word-break occurs at x2.
The bottom coordinate is not large enough, so remaining text is clipped.
Fig. 3: (x, y) and y2 are fixed coordinates. x2 is dynamic, the text extends to the right.
The right coordinate is computed accordingly.
In the following example the right and bottom coordinates are dynamic, watch the difference of
the bottom coordinate in contrast to the previous example.
Fig. 4: (x, y) are fixed coordinates. (x2, y2) are dynamic, the text extends to the right.
The right and bottom coordinates are computed accordingly.
If the bottom coordinate is dynamic (i.e. it is VFREE), the object will grow downwards until all
text has been output. If the bottom margin is reached and there is still text remaining which needs
to be drawn, VPE can break the text automatically to the next page, depending on the settings of
the property AutoBreakMode (see “Automatic Text Break” on page 44).
Fig. 5: (x, y) and x2 are fixed coordinates. y2 is dynamic, the text extends to the bottom.
The bottom coordinate is computed accordingly.
Fig. 6: (x, y) are fixed coordinates. (x2, y2) are dynamic, the text extends to the right until the
right margin is reached. The right and bottom coordinates are computed accordingly.
You set the margins for the current page by setting the properties nLeftMargin, nTopMargin,
nRightMargin and nBottomMargin. But this only helps for the current page. A new page,
generated either with a call to PageBreak(), or by an Automatic Text Break will use DEFAULT
values.
Why? Well, perhaps you want on successive pages other margins, especially if an Automatic Text
Break occurs. How else could you change the layout of successive automatically generated pages?
The method provided by VPE for setting the default margins, which are used for newly generated
pages is:
SetDefOutRect(LeftMargin, TopMargin, RightMargin, BottomMargin)
Keep in mind that there is a difference between the properties for the margins, which are only
valid for the current page you're working on, and the default-margins for newly generated pages.
By default, VPE defines the margins and default margins 2cm from the paper edges. The right and
bottom paper edge is defined by the property 'PageFormat', which may be 'DIN_A4', 'US_Letter',
etc. or 'User_Defined'. In the latter case the page dimensions are specified individually through the
properties 'PageWidth' and 'PageHeight'.
The page dimensions can be set for each page individually.
You can access (read / write) the margins with the properties nLeftMargin, nTopMargin,
nRightMargin and nBottomMargin (DLL: use the methods VpeGet() and VpeSet() with the flags
VLEFTMARGIN, VTOPMARGIN, VRIGHTMARGIN, VBOTTOMMARGIN).
So they can work as placeholders for you, holding the definitions of the current page / document.
Example:
Write(1, 15, nRightMargin, VFREE, "long text.....")
In the above example, the “long text” will extend to the right margin of the current page.
If you need to change the margins later during the development process, and your calls to VPE are
considering them like in the example above, you will have no problems with the new layout.
As you can place text and other objects outside of the margins, the rectangle defined by the
margins is also called "Output Rectangle". There are two related methods to define the margins -
or output rectangle - at once: SetOutRect() and SetDefOutRect().
In contrast, the DefOutRect defines the margins that will be used for a newly generated page. This
is very helpful, if you want to place a text that is automatically broken to the next page with the
auto break feature in a completely different rectangle.
Margins: Summary
VPE knows an output rectangle on each page. This can be compared to the printable area or page-
margins.
The output-rectangle is only for your own orientation purposes when positioning objects. In
addition text output functions use the output-rectangle to consider the maximum right border.
You're still able to place objects outside the output-rectangle.
• The output rectangle can be defined and retrieved.
• Each page in a document can have its individual output rectangle.
• You can define a default output rectangle, which will be used for newly generated pages.
• The values for margins are specified in coordinates relative to the top / left paper border, e.g. if
the right margin shall be 2cm away from the right paper border, set it to ‘page_width - 2’. If
you would set the right margin = 2, it would be 2cm away from the left border.
• After creating a Document with OpenDoc() the default-rectangle is set to:
left = 2, top = 2, right = page_width - 2, bottom = page_height - 2
• The properties to access the output rectangle are:
nLeftMargin, nTopMargin, nRightMargin and nBottomMargin
(DLL: VLEFTMARGIN, VRIGHTMARGIN, VTOPMARGIN, VBOTTOMMARGIN)
• The default output rectangle is set with:
SetDefOutRect(LeftMargin, TopMargin, RightMargin, BottomMargin)
• On an initial blank page, VLEFT is VLEFTMARGIN, VRIGHT is VRIGHTMARGIN, VTOP
is VTOPMARGIN and VBOTTOM is VTOPMARGIN (!).
All explained V-Flags except VFREE can be used for ALL objects.
Examples:
DLL:
VpeSet(hDoc, VLEFTMARGIN, 3 );
Control:
<Object>.nLeftMargin = 3;
Sets the left margin of the output rectangle for the current page to 3 cm.
Inserts the text "Hello World!" at the top left corner of the margins.
Text is placed with the right border equal to the right page margin.
Draws a line from the upper left to the lower right corners of a page.
This inserts a text object at position (left margin, top margin) with a width up to the right
margin. Its height (y2) is calculated and depends on the length of the text and the font size
used.
Instead of the DLL functions VpeGet and VpeSet, the ActiveX, VCL and .NET Controls offer you
the following n-Properties:
Examples:
DLL:
VpeWrite(hDoc, VLEFT, VpeGet(hDoc, VBOTTOM) + 1, VRIGHT, VFREE, "text3");
ActiveX / VCL:
Doc.Write(VLEFT, Doc.nBottom + 1, VRIGHT, VFREE, "text3");
.NET:
Doc.Write(Doc.nLeft, Doc.nBottom + 1, Doc.nRight, Doc.nFree, "text3");
Java:
Doc.Write(Doc.getNLeft(), Doc.getNBottom() + 1, Doc.nRight, Doc.nFree,
"text3");
Inserts the next text object 1cm below the bottom border of the last inserted object. The left
coordinate and the width of the newly inserted text will be exactly the same of the previously
inserted object, the height of the new text will be computed by VPE.
Examples:
RenderWriteBox(VLEFTMARGIN, VTOPMARGIN, VRIGHTMARGIN, VFREE, "a long text
...")
Computes the height of the string "a long text …". The computed height can be retrieved in
nRenderHeight (DLL: VpeGet(hDoc, VRENDERHEIGHT)). You supply all four coordinates to
the RenderWriteBox() method, because the method will also return information, if the text will
fit onto the current page, or if a page break will happen when the text is inserted at the
specified coordinates.
Computes the height and width of the "fruits.bmp" image file. The computed width can be
retrieved in nRenderWidth (DLL: VpeGet(hDoc, VRENDERWIDTH)) and the height can be
retrieved in nRenderHeight (DLL: VpeGet(hDoc, VRENDERHEIGHT)).
The Picture-Flags like PictureCache, PictureBestFit, etc. are also active.
The following command would then insert the image in the center of the page:
Doc.NoPen
Doc.Picture((Doc.PageWidth - Doc.nRenderWidth) / 2, (Doc.PageHeight -
Doc.nRenderHeight) / 2, VFREE, VFREE, "..\images\fruits.bmp")
IMPORTANT NOTE:
If the text-output functions are used with VFREE to calculate widths and / or heights, the
calculations need time. The more VPE has to calculate, the slower it works.
If you have for example to output a lot of broken text into single lines with equal fonts and font
sizes - like in a table - it is a good idea to render the height of the line once and to use the
rendered height instead of VFREE.
where the height of each "Hello" text is computed over and over again.
NOTE: A text drawn with a frame around it requires more width and height than a text without a
frame. Therefore you need to render the width and height of a framed text separately
from text, which is not framed - even if the used fonts and font sizes are the same. Also
a text that is printed in two (or more) lines has a different height than simply multiplying
the height rendered for a single line with the total number of lines, especially if the text is
framed. Therefore you would need to render a text separately, if one or more of the
following properties change:
The "Report" and "Speed + Tables" demos make use of the technique described above.
NOTE: Due to round-off problems, VPE allows for Text and RTF a possible maximum tolerance
of 0.3 mm by which nBottom may exceed nBottomMargin without firing an auto break.
AUTO_BREAK_OFF
Same behavior as AUTO_BREAK_ON (limited positioning / rendering to the bottom of the
output rectangle is active), but remaining text is NOT broken onto next page(s). It is cut
instead.
AUTO_BREAK_NO_LIMITS
Remaining text is NOT broken onto the next page(s), it can be placed anywhere on the paper
with no limits.
AUTO_BREAK_FULL
Auto Break is activated. An Auto Break will happen if y2 = VFREE or y > VBOTTOMMARGIN.
Remaining text is broken onto the next page(s) with the following coordinates:
x = left margin of the Output Rectangle
x2 = right margin of the Output Rectangle
y = top margin of the Output Rectangle
y2 = VFREE
NOTE: If a new blank page is added by VPE, the Default Output Rectangle will be used to set
x, x2 and y. Otherwise if the next page is already existing, the Output Rectangle of the
existing page is used. You can modify the Output Rectangle of an existing page at any
time.
By using the AutoBreakMode feature in conjunction with the Default Output Rectangle, you can
control on what position broken text is placed on successive pages.
Control:
<Object>.AutoBreakMode = AUTO_BREAK_OFF
The default after calling OpenDoc() is AUTO_BREAK_ON. For a detailed example take a
look at the Auto Render Demo in the source code of VPEDEMO.
For RTF AutoBreak features, see "Build-In Paragraph Setting: RTF Auto Page Break" on page 63.
VPE fires also an event, if an AutoBreak occurs. This gives you additional control over the layout.
When the event is fired, VPE already moved to the next page (or generated one) and you can
modify the Output Rectangle (NOT the Default Output Rectangle) to control the layout, or insert
manually Headers and Footers, etc. (see also "Headers and Footers" on page 117).
The event is named:
DLL: VPE_AUTOPAGEBREAK
Control: AfterAutoPageBreak
VCL: OnAutoPageBreak
NOTE: VPE might enter an endless loop, if you specify the page dimensions and or the page
margins in a way, so that the output rectangle is smaller than the space required for at
least one line of text. If you output text in such case, VPE can not print a single line of
the text on the current page and creates an auto break. On the new page the output
rectangle is again too small (there is no additional space) and VPE fires again an auto
break, and so forth.
Especially if you are printing on labels, change the margins accordingly. Best, you set
the margins to the page boundaries, or set AutoBreakMode = AUTO_BREAK_OFF while
processing the event.
VPE is able to rotate text, images and barcodes freely in 90 degree steps. RTF can not be rotated.
Some charts can be rotated by 90 degrees only to the right (with the property ChartGridRotation).
Rotation is done clockwise, the <angle> parameter is specified in 1/10 degrees. So the value for
rotating an object by 90 degrees to the right would be 900.
Examples:
DLL:
VpeSetRotation( hDoc, 900 );
Control:
<Object>.Rotation = 900
IMPORTANT:
When images or text are rotated, the given starting coordinate (x, y) remains unchanged. But x2
and y2 are transformed into x2’, y2’.
This example is simple, because the width and the height is the same, so rotation doesn’t matter.
The same for text, but now width and height aren’t identical:
0 degrees: 90 degrees: 180 degrees: 270 degrees:
x, y x, y x, y x, y
Why the same coordinates? - Because VPE transforms them! Before rotating an object, VPE
computes the width and the height of the object.
Regardless of the angle, the width and height will always stay the same. This makes rotation for
you much easier (especially if you let VPE render the height of a text / image object), if you keep
this in mind and use only relative coordinates for x2, y2 (negative signs).
Now the same example again, but with relative coordinates and the starting position (3.5, 2.2):
VpeSetRotation(hdoc, 900)
VpeWriteBox(hdoc, 3.5, 2.2, -1, -0.5, "Hello World!")
Do you get the idea? The "-1" is always the width, and the "-0.5" is always the height.
What about the rendering features of VPE? Of course it will work! The command:
VpeWriteBox(hdoc, 3.5, 2.2, -1, VFREE, "Hello World!") will do fine with every rotation angle.
Now, after this explanation, keep the following two rules in mind:
1. As x2 and y2 are transformed, the best way to use rotation is, not to use absolute coordinates
for x2, y2 but relative = width and height (this means: with a negative sign).
2. x2’ / y2’ is the final right / bottom position of the rotated object. These are the coordinates you
will retrieve with VRIGHT / VBOTTOM.
EMF and WMF is only supported on Windows platforms. If you should have problems importing
metafiles (WMF), make sure you import a Placeable Metafile. A placeable metafile has a header
with some additional information, which is required by VPE. See the Windows-SDK
documentation on how the file header is structured.
Images are imported and placed into a document by calling the method Picture().
VPE is a WYSIWYG system. Therefore, if you are using VFREE for x2 and/or y2 in the call to
the method Picture(), VPE will read the image header (this is much faster than reading the whole
image, like most other tools do) to determine the picture's dimensions in metric coordinates. The
dimensions are computed based on the resolution information found in the image and its size in
pixels.
This means, it computes the width and height of an image by extracting the DPI information
included in the image file. For example a width of 96 pixels and a resolution of 96 DPI mean that
the image is "in reality" one inch wide. A width of 900 pixels and a resolution
of 300 DPI mean that the image is "in reality" three inch wide, etc.
Examples:
DLL:
VpeSetPenSize(hDoc, 0); // no frame drawn around the picture
VpePicture(hDoc, 1, 1, VFREE, VFREE, "test.jpg");
ActiveX / VCL:
Doc.PenSize = 0 // no frame drawn around the picture
Doc.Picture(1, 1, VFREE, VFREE, "test.jpg")
.NET:
Doc.PenSize = 0; // no frame drawn around the picture
Doc.Picture(1, 1, Doc.nFree, Doc.nFree, "test.jpg")
Java:
Doc.setPenSize(0); // no frame drawn around the picture
Doc.Picture(1, 1, Doc.nFree, Doc.nFree, "test.jpg")
Inserts the image "test.jpg" at the position (1, 1). The width and height of the image are
computed by VPE.
If an image should be drawn incorrectly in size, this results from wrong resolution and / or size
information stored in the image file. You have two options to workaround this problem:
• Use a good image processing software, where you can change the DPI
resolution in the image-file to a reasonable value
• You can stretch the images in VPE by using absolute values for x2 / y2
NOTE: Special care must be taken, when creating VPE document files that contain pictures. By
default, images are embedded into VPE document files, but you can turn this behavior
off. For details, please see “Pictures and VPE Document Files” on page 140.
You can also set only one of both coordinates to VFREE. Depending on the property
PictureKeepAspect, VPE is able to compute this coordinate so that the image is not distorted
(PictureKeepAspect = True) or VPE will use the original size of the image (PictureKeepAspect =
False).
PictureKeepAspect = True (this property is by default True)
Picture(1, 1, -5, VFREE, "image1.tif")
In this example, the width of the image will be 5cm. If the image had an original size of 15 x 21
cm, the width is now 1/3 of the original size. Because PictureKeepAspect is True, VPE will
compute the height to the same aspect ratio = 1/3 of the original height, which would then be 7
cm. (This example assumes that the image's resolution is the same for the width and the
height. Otherwise the computations performed by VPE are slightly more difficult.)
Another option is, to let VPE compute the largest possible image size within a given rectangle
without distorting the image. This is done by setting the property PictureBestFit = true.
PictureBestFit = true
Picture(1, 1, -10, -10, "image1.tif")
In the example, the given rectangle is 10 x 10 cm wide. VPE uses the largest dimension as a
reference to compute the other dimension. If the image had an original size of 15 x 21 cm,
VPE would use the image height (21 cm) as the reference to compute the largest possible
width. (If the image was 21 x 15 cm, VPE would use the width as the reference to compute the
best fitting height). The height is now scaled to 10cm (the height of the given rectangle) which
is a scaling factor of 10 cm / 21 cm = about 0.476. The width is then scaled with the same
factor: 15 * 0.476 = about 7.14 cm. (This example assumes that the image's resolution is the
same for the width and the height. Otherwise the computations performed by VPE are slightly
more difficult.)
NOTE: The use of the property PictureBestFit requires that all coordinates of the rectangle
are specified. You can not use VFREE.
You can scale an image also to absolute coordinates regardless of its original metric size.
Picture(1, 1, 15, 20, "image1.tif")
NOTE: In addition to the above ways of scaling images, there is also the option to render the
size of an image without inserting it into a document (see “Rendering Objects” on
page 42).
By default, the image cache is 64 MB in size. You can set the cache size with:
DLL: VpeSetPictureCacheSize( <KB> )
Control: PictureCacheSize = <KB>
where <KB> is the size of the cache in kilobytes.
Example:
PictureCacheSize = 4096
The size of the picture cache is a virtual size. That means VPE does not reserve memory for the
cache in advance. Instead, if a picture is read into memory VPE will reserve as much memory as
needed to hold the image in memory. If the amount of memory needed for all cached images
together becomes bigger than the specified image cache size, VPE will remove as much images
from memory that were accessed less often, until there is enough space to keep the newly read
image in memory.
Therefore, VPE will keep at least the last read image in the cache, even if it is larger than the
maximum possible cache size.
Example:
PictureCacheSize = 4096
Image2 is read into memory, it needs 1 MB and is also cached. Now 3 MB of the cache are
used.
Image3 is read into memory, it needs 1.5 MB. Because the cache is not large enough to store
it also in the cache, the least frequent used image is removed from the cache. This is
"image2.jpg". Now 3.5 MB of the cache are used (2MB for image1 and 1.5 MB for image3).
NOTE: In fact VPE has a multi-level associative cache and on the top-level it stores meta
information about images (for example type, width, height and resolution) together with
their path- and file names. This top-level cache can not be flushed. It removes itself
entries when an internally hardcoded threshold-value is reached. On the low level the
cache stores the binary image data, i.e. the bitmap data, which is deleted when flushing
the cache.
The cache has some implications for the design of your application: since the cache only
holds as much binary image data (i.e. the bitmap data) in memory, as allowed by the
cache size, VPE might load at any time image files from disk as desired.
It must also be noted that the cache of VPE is still active, after you have closed a VPE
document. This makes sense, because if you create another VPE document which uses
the same images (for example company logos), they can be used extremely fast. The
whole cache – including the top-level cache – is only deleted from memory, after your
application has terminated.
If an image file is not used within any open document of the same process, you can
safely delete or overwrite it.
IMPORTANT:
You may not delete or overwrite image files, which are currently used in any open
document of your application. For a detailed explanation, please see “Image Cache” on page
51.
If you are using the Professional Edition or higher, you can also use Memory Streams to import
images from BLOB’s by using the PictureStream() method. This is faster since it does not involve
any disk I/O overhead. But in order to keep memory consumption as low as possible, you should
always supply the SAME memory stream to the PictureStream() method for the same picture. If
you do so, VPE can also make use of its image cache, i.e. identical memory streams will be moved
into the cache only once. VPE creates internally copies of a memory streams, so it cannot remove
memory stream based images from the cache as long as a document is open (it can not reload the
image), you should only make use of this technique, if the amount of images (and their size) is not
too large. Otherwise too much memory is consumed and the technique of using temporary files is
the better choice.
The usage of Memory Streams is explained in the Reference Manuals.
Example:
If you draw a 300 DPI image to a 96 DPI screen, the image is scaled down by a factor of 96 / 300
= 0.32. This means, only 32% of all pixels are drawn, the rest is left out. (i.e. after each pixel that
is drawn, 2 pixels are left out)
// PIC_SCALE2GRAY is the choice, if you need best readability only for a 1:1
// Preview Scaling. The scaled image is only computed once and then held in
// the dynamic cache (if the property PictureCache is set to true, which is
// the recommended default).
// This gives the best balance between required CPU time and memory usage.
// The scaled image will only be re-computed, if it falls out of the dynamic
// cache and needs to be re-created from file again.
PictureScale2Gray = true
Picture(0, 0, VFREE, VFREE, "..\\images\\gew300g4.tif")
PageBreak()
// Insert the high resolution images now invisibly for previewing, but
// visible for printing:
PictureScale2GrayFloat = false
SetPrintable(TRUE)
SetViewable(FALSE)
GotoPage(2)
Picture(0, 0, VFREE, VFREE, "..\\images\\gew300g4.tif")
GotoPage(3)
Picture(hDoc, 0, 0, VFREE, VFREE, "..\\images\\gew300g4.tif")
Note that the four images in the document share only ONE "gew300g4.tif" image in memory. The
four images that share one memory-image are: The three high resolution images and the
PIC_SCALE2GRAY_FLOAT image (which uses the original "gew300g4.tif" to compute the
grayscale image from it).
4.7.6 Remarks
When displaying multiple bitmaps at the same time in the preview, VPE tries to balance the color-
palette between these bitmaps. Sometimes this can lead to wrong color representation on 16- or
256- color displays. Printing will always work without problems.
Frames around bitmaps may make problems, because there is always the possibility of a one-
pixel-error (see “WYSIWYG” on page 131). A gap may occur between the picture and the frame.
If you use frames that are too thick, they will overlap the picture (see “Important Note About Pens,
Lines, Frames, Circles and Ellipses” on page 114). This doesn't matter if you have pictures with a
white background, but the best solution is to have the frame in the image-files itself. Or - because
of the problem with the gap - make the frame a bit thicker, so that a possible gap will be hidden.
You can turn off the frame around pictures by setting PenSize = 0.
VPE is not able to process style-sheets, auto-bulleting or numbering itself, but it manages correctly
style-sheets, bulleting and numbering emitted for example by Word or AmiPro, which results in a
correct representation of:
• Headlines, and numbered paragraphs of any kind
• Bulleted-Lists
Keep paragraph intact. A page break may not occur between the lines of
a paragraph. Instead, the whole paragraph is moved to the next page.
Keep paragraph with the next paragraph. A page break may not occur
between the following paragraphs. Instead, the paragraphs are moved to the
next page.
Paragraph control. A page break may not occur, if only the first line of a
paragraph would remain on the current page, or if only the last line of a
paragraph would be placed on the next page.
4.8.2.1 General
The following is a short introduction into RTF. For a complete description, we recommend the
RTF specification white-paper of Microsoft, which can be found for example at
www.microsoft.com.
RTF can be seen as a layout description language. RTF knows a large set of keywords for
controlling the layout. Some of the keywords may be followed by a parameter or a group of
parameters. VPE does not support all RTF keywords - but the most important to have powerful
control over the appearance and layout of text. For a complete list of supported keywords by VPE
see "RTF Properties processed by VPE".
The most important on the RTF syntax is the use of nested groups. Groups are nested by { }. For
example, to make a few words bold, the RTF stream would look like that:
"Hello, {\b this is bold text} and this is normal text."
The "\b" is the RTF command to set the bold property to on. By nesting it, only the text between
the { } is shown in bold.
There is no restriction in the depth of nesting. Example:
"Hello, {\b this is bold text{\fs48 and this is 24pt. bold text {\i 24pt.,
bold, italic} 24pt. bold} only bold} and this is normal text."
Note that font-sizes in RTF are specified in 0.5 pt. sizes. VPE computes them internally into full
point sizes. If the number of braces is unbalanced, VPE will not process the RTF text.
Instead of using nested structures, there is also the possibility of working with parameters."\b0" for
example means "turn bold off". So the last example above could be implemented as follows:
"Hello, \b this is bold text\fs48 and this is 24pt. bold text \i 24pt.,
bold, italic \i0 24pt. bold \fs20 only bold \b0 and this is normal text."
where <fontN> is a set of describing RTF keywords and the font name. There may not be spaces
between the closing brace of one group and the opening brace of the next group.
The keywords reflected by VPE are:
• "\f<number>" declares this entry to have the ID <number>.
• "\fcharset<number>" assigns a charset (default is ANSI_DEFAULT) [for charset numbers see:
property CharSet)
• the font name followed by a semicolon
For example:
"{\fonttbl {\f1 Times New Roman;}{\f2 Arial;}{\f3 Wingdings \fcharset2}}"
declares the font table entry with ID 1 to use "Times New Roman", with ID 2 to use "Arial" and
with ID 3 to use Wingdings which is a Symbol Charset (= 2).
Later in the document you reference these fonts with "\f<number>", for example:
"\f1 Hello \f2 World!"
For example:
{\colortbl; \red0\green0\blue0; \red0\green0\blue255; \red0\green255\blue0;}
Declares three colors (black, blue and green), which can be referenced later in the document with:
• "\cf<index>" specifies the foreground color
• "\cb<index>" specifies the background color
• "\cf1\cb2 Hello \cf3\cb1 World!"
"Hello" is shown black on blue and "World!" green on black.
Note that the first entry in the color-table has the index 1.
The meaning of the keywords can be found in the chapter “RTF Properties processed by VPE” on
page 67.
If you think, this looks a bit complicated, just read the next sections, describing how to use RTF
with VPE and its "Easy RTF" features.
WriteRTF() and WriteBoxRTF() work exactly the same as Write() and WriteBox(). With
WriteRTFFile() and WriteBoxRTFFile() you specify a (path- and) filename that contains RTF
text. This is very useful for processing text already created by your end user with an RTF editor.
Code-Example:
SetFont("Arial", 12)
WriteRTF(1, 1, -5, VFREE, "Hello \b World!")
SetFont("Times New Roman", 16)
TextUnderline = True
WriteRTF(VLEFT, VBOTTOM, VRIGHT, VFREE, "Hello \b World!")
void SetRTFFont(
long ID,
String name
)
or you can add as many fonts to the table as you like, for example:
CharSet = SYMBOL_CHARSET
SetRTFFont(3, "Wingdings")
void SetRTFColor(
long ID,
COLORREF rtf_color
)
Or you can add as many colors to the table as you like, for example:
SetRTFColor(31, RGB(10, 20, 30))
KeepLines
Keep paragraph intact. A page break may not occur between the lines of a paragraph. Instead,
the whole paragraph is moved to the next page. Note: Page breaks may occur between the lines of
paragraphs, e.g. at their exact borders (see KeepNextPar). KeepLines, KeepNextPar and
ParControl may be used together.
KeepNextParagraph
Keep paragraph with the next paragraph. A page break may not occur between the following
paragraphs. This means, one paragraph may not stand alone at the top of a new page. Instead, the
paragraphs are moved to the next page. Note: Page breaks may occur between the lines of
paragraphs (see KeepLines). KeepLines, KeepNextPar and ParControl may be used together.
NOTE: If a set of paragraphs is locked together in a way (for example by using KeepLines and
KeepNextParagraph together), so that all paragraphs together don’t fit onto the current
page and may not be broken, VPE checks, if it is possible to place them all together on
the next page. (Remember that VPE offers the possibility to set the margins for the
current page and a default output rectangle for succeeding pages.) If the succeeding
page has enough room to place all paragraphs there, VPE will move them to the next
page. Otherwise VPE will start to place as much paragraphs as possible onto the
current page, trying to break them at a paragraph border if possible; but maybe there is
only one large paragraph, which needs to be broken in between.
Example:
Imagine you have two paragraphs in a single RTF text. The margins of the current page and of the
default output rectangle are set to a width of 18 cm and a height of 25 cm. The two paragraphs
together need a height of 8 cm and you set KeepLines = True and KeepNextParagraph = True, so
that they must not be broken.
If you insert this object at x = 1 and y = 2 nothing unusual happens: the size of the output rectangle
is large enough to hold both paragraphs, and they are positioned there.
But if you insert this object at x = 1 and y = 25 an Auto Break will occur. As the paragraphs may
not be broken, VPE checks, if there is enough room for both paragraphs on the next page. Due to
our example, there is enough space, and VPE decides not to insert an RTF object on the current
page. Instead VPE moves to the next page (or adds one) and places the RTF object containing both
paragraphs there.
4.8.6.3 Line- and Page Breaks not 100% the same compared to the RTF Editor
RTF Editors like Word render the RTF text immediately to the selected printer device (the default
printer) and try to copy the resulting layout onto the screen.
Since VPE guarantees to be printer independent, it uses another technology: It renders RTF text to
a virtual high-resolution device (that’s, why it’s called "Virtual Print Engine") and copies the
resulting layout to the output device (be it the screen, printer, fax or whatsoever).
As an implication, line- and page breaks may be on other positions than in the RTF editor that
created the document. Since you have powerful control about paragraph breaks (see KeepLines,
KeepNextPar, ParControl, \keep, \keepn, \widowctl), this shouldn’t be of any interest.
On the contrary. Whilst RTF editors re-render the whole document, if another printer (output
device) is chosen, and often documents get a complete different layout, the layout with VPE will
always be the same with every printer!
Keyword Description
\fonttbl Declares font table; may only occur once at the beginning of the document
\f <index> Declare font number
\fcharset <number> Assign Charset (default is ANSI_DEFAULT)
<Text>; Declare font name related to font number
Example:
{\fonttbl {\f1 Arial;} {\f2 Times New Roman;} {\f3 \fcharset2 Wingdings;} }
Example:
{\colortbl; \red0\green0\blue255; \red128\green0;\blue128}
123 45
1 234567 890128
C O D E 3 9
BCT_CODE39
Field of Application
Code 3 of 9 is a universal barcode with many applications in the industry.
Each character is represented by 9 elements (5 bars and 4 gaps), where 3 elements are wide and 6
are small. This aspect allows the self-checking of the barcode.
The advantage of the barcode is its huge character set. The disadvantage is the small information-
density as well as the low tolerance.
Checkdigit
The use of a checkdigit is optional. The barcode library can generate it automatically.
Characteristics
• The Code 3 of 9 is very common
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
• The Code 39 is the basis for the Code 39 Extended and Code BCT_PZN (Pharma Zentral
Nummer).
Additional Information
If sending parcels with UPS you should take care that codes of type 39 are not visible on the
outside of the parcel, otherwise they could be mismatched by automated systems with the UPS
parcel-labels.
C o d e 3 9
BCT_CODE39EXT
Field of Application
Code 3 of 9 extended is a universal barcode with many applications in the industry.
It uses the same coding as Code 39, but allows the usage of all 127 characters of the ASCII
character set by coding the characters not available in Code 39 into special control codes.
The advantage of the barcode is its huge character set. The disadvantage is the small information-
density as well as the low tolerance.
Checkdigit
The use of a checkdigit is optional. The barcode library can generate it automatically.
Characteristics
• The Code 3 of 9 extended is out-of-date. If possible we recommend to use Code128 instead,
which is also capable to represent all 127 characters of the ASCII character set.
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
C O D E 9 3
BCT_CODE93
Field of Application
Code 93 is a universal barcode with many applications in the industry. Conceptual it is based on
Code 39, but it needs less space.
Checkdigit
Code 93 uses two checkdigits. The use of the checkdigits is optional. The barcode library can
generate them automatically.
Characteristics
• The Code 93 is based on Code 39.
• The Code 93 uses two checkdigits.
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
C o d e 9 3
BCT_CODE93EXT
Field of Application
Code 9 of 3 extended is a universal barcode with many applications in the industry.
It uses the same coding as Code 93, but allows the usage of all 127 characters of the ASCII
character set by coding the characters not available in Code 93 into special control codes.
The advantage of the barcode is its huge character set. The disadvantage is the small information-
density as well as the low tolerance.
Checkdigit
Code 93 extended uses two checkdigits. The use of the checkdigits is optional. The barcode
library can generate them automatically.
Characteristics
• The Code 93 extended is out-of-date. If possible we recommend to use Code128 instead, which
is also capable to represent all 127 characters of the ASCII character set.
• The Code 93 extended uses two checkdigits.
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
C o d e 1 2 8 E a n 1 2 8
BCT_CODE128 BCT_EAN128
Field of Application
Code-128 is a universal barcode with many applications in the industry.
GS1-128 / EAN-128 / UCC-128 are a variation of the Code-128, with a special control code
(FNC1) after the startcode that identifies the barcode uniquely worldwide. To use GS1-128, EAN-
128 / UCC-128 use the code type BCT_EAN128. Please note that no FNC1 control code is
inserted automatically when using BCT_EAN128 (neither after the startcode). You need to insert
the FNC1 control code yourself according to your requirements, please see below on how to insert
control codes.
Checkdigit
The use of a checkdigit is required. The barcode library can generate it automatically.
Characteristics
The length of the code is variable, but the maximum width of the barcode should not exceed
165mm. A maximum of 48 characters is allowed (including GS1-128 Application Identifiers and
FNC codes).
Example: "3022<FNC1>21123456789012"
NOTE: For code C, two digits must follow, since digits in code C are encoded in pairs. If a code C
selector is not followed by at least two digits, no barcode is drawn.
Example (C/C++ notation): "\xC0" "1" "\xC0" "2" "\xC0" "3"
Here, the CODE A is put in front of each digit (1, 2 and 3), so each digit is coded in the character
set A.
Additional Information
If sending parcels with UPS you should take care that codes of type 128 are not visible on the
outside of the parcel, otherwise they could be mismatched by automated systems with the UPS
parcel-labels.
BCT_INTERLEAVED2OF5
Field of Application
Code 2 of 5 interleaved is a universal barcode with many applications in the industry.
The number of digits is not limited, but you need to specify always 2 digits in pairs, i.e. the
number of digits has to be even.
Checkdigit
The use of a checkdigit is optional. The barcode library can generate it automatically.
Is the automatic checkdigit generation activated, the number of used digits has to be odd.
Additional Information
If sending parcels with Deutsche Post AG you should take care that codes of type 2 of 5
interleaved with 12 or 14 digits are not visible on the outside of the parcel, otherwise they could be
mismatched by automated systems with the Leitcode or Identcode parcel-labels.
BCT_2OF5
Field of Application
Code 2 of 5 industrial is a universal barcode with many applications in the industry.
Checkdigit
The use of a checkdigit is optional. The barcode library can generate it automatically.
Characteristics
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
1 2 3 4 5
BCT_2OF5MATRIX
Field of Application
Code 2 of 5 matrix is a universal barcode with many applications in the industry.
Checkdigit
The use of a checkdigit is optional. The barcode library can generate it automatically.
Characteristics
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
• The Code 2 of 5 matrix is with the exception of the very broad bars in the start- and stop
characters a two-width-code. In the barcode library the width of the start / stop bars is adjusted
fix to the double width of the BarcodeThickBar.
Field of Application
The European-Article-Numbering was initially developed as european-wide unambiguous system
for article numbering. In the meantime it has grown to the worldwide unambiguous standard for
article numbering.
The idea of the EAN-system is that an article number is worldwide unique for one product of
one manufacturer.
Checkdigit
A checkdigit is required and is also included in the label. The barcode library can generate it
automatically.
Special Rules
• Labels are required and contain the checkdigit. The label's font has to be OCR-B. Such a font is
not shipped with Windows, nor with VPE.
• There are recommended dimensions for the EAN-Barcodes (see below).
• In no case EAN-Barcodes may be used on product packages without being officially assigned.
For other internal purposes you can use the intended prefix (see below).
Notes
• Code EAN-128 is a special case of Code-128.
• The EAN code is known in Japan as JAN, with the prefix 49.
• The barcode library also allows to create EAN8 + EAN2 and EAN8 + EAN5 barcodes.
EAN-Prefixcodes
00 - 09 UCC (USA and Kanada)
20 - 29 Identifies numberings for internal use
30 - 37 GENCOD (France)
380 CCI Bulgaria (Bulgaria)
383 SANA (Slowenia)
385 CRO-EAN (Croatia)
387 EAN-BIH (Bosnia-Herzegowina)
400 - 440 CCG (Germany)
460 - 469 UNISCAN (Russian Federation)
471 CAN (Taiwan)
474 EAN Estonia
475 EAN Latvia
477 EAN Lithunia
479 EAN Sri Lanka
480 PANC (Philippines)
482 EAN Ukraine
484 EAN Moldova
489 HKANA (Hong Kong)
45+49 DCC (Japan)
50 ANA-UK (Great Britain)
520 HELLCAN (Greece)
529 EAN Cyprus
531 EAN-MAC (Mazedonia)
535 MANA (Malta)
539 ANAI (Ireland)
54 ICODIF (Belgium and Luxembourg)
560 CODIPOR (Portugal)
569 EAN Iceland
57 EAN Denmark
590 EAN Poland
594 EAN Romania
599 HAPMH Hungaria
600-601 SAANA (South Africa)
Addresses
EAN INTERNATIONAL HEAD OFFICE
Rue Royale 145, 1000 Brussels - BELGIUM - Tel : 32.2.227.10.20, Fax : 32.2.227.10.21
E-mail: info@ean.be
Germany: Centrale für Coorganisation (CCG)
Maarweg 133, 50825 Köln - Tel : 49 221 947 14 0, Fax : 49 221 947 14 190
E-mail: info@ccg.de
Web site: http://www.ccg.de
AUSTRIA - EAN-AUSTRIA Gesellschaft für kooperative Logistik GmbH
Mayerhofgasse 1/15, A - 1040 Vienna - Tel : 43 1 505 86 01, Fax : 43 1 505 86 01-22
E-mail: o_ce@ean.co.at
Web site: http://www.wk.or.at/ean/barcode/
BCT_EAN2 BCT_EAN5
Field of Application
In conjunction with the main barcodes EAN and UPC you can use add-on barcodes with 2 and 5
digits. The 2-digit code is often used for the issue number of magazines. The 5-digit code is often
used as quotation of prices for books in conjunction with the ISBN barcode (the ISBN-barcode is
an application of the EAN-13).
EAN-2: 2 digits
EAN-5: 5 digits
Checkdigit
The add-on codes EAN-2 and EAN-5 have no checkdigit.
Characteristics
• Between the EAN main barcode and the add-on code a quiet zone of at least the tenfold of a
module width is required.
• It is possible to generate with the barcode library add-on codes without a main code, but
barcode scanners can not process standalone add-on codes.
0 1 2 3 4 5 6 5 0 123456 5 0 123456 5
Field of Application
Similar to the EAN-Codes the UPC codes are used for the unambiguous identification of articles
with a country-wide uniquely article number, the Universal Product Code. Though its use is
almost restricted to the USA, sometimes you will find products labeled with UPC codes in Europe.
The UPC-A Code is the normal 12-digit version of the UPC-Codes and is similar to the EAN-13
Code.
The UPC-E Code is the smaller 8-digit variation and is similar to the EAN-8 code. The UPC-E
code only offers 6 usable digits, since the first digit is always a zero.
Checkdigit
A checkdigit is required and is also included in the label. The barcode library can generate it
automatically.
Special Rules
• Labels are required and contain the checkdigit. The label's font has to be OCR-B. Such a font is
not shipped with Windows, nor with VPE.
• In no case UPC-Barcodes may be used on product packages without being officially assigned.
For other internal purposes you can use the intended prefix (see below).
A 1 2 3 4 C
BCT_CODABAR
Field of Application
Codabar is a universal barcode with many applications in the industry. It is particularly used in the
field of medical applications.
In Japan this code is also known as NW-7
Checkdigit
The use of a checkdigit is optional. The barcode library can generate it automatically.
Characteristics
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
• Codabar does not code all characters in the same width. The special characters ":", "$", "/", "."
and "+" require one module more than the digits 0..9 and the "-" sign. Therefore your
applications need to reserve enough space.
1 2 3 4
BCT_CODE11
Field of Application
Code 11 is a dense numeric code with one special character.
Checkdigit
The use of a checkdigit is optional. Two different procedures are common for the checkdigit
generation. The barcode library can generate the checkdigit automatically according to the
procedure that creates two checkdigits.
Characteristics
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
• Code 11 does not code all characters in the same width. The special characters "0", "9", and "-"
have one module less than the other characters. Therefore your applications need to reserve
enough space.
1 2 3 4 5 6 7
BCT_MSI
Field of Application
MSI is a universal barcode with many applications in the industry.
Checkdigit
The use of a checkdigit is optional. The barcode library can generate the checkdigit automatically.
Characteristics
• The code is a modified verion of the "Plessey" barcode.
• The aspect ratio between thin and thick modules can be adjusted using the properties
BarcodeThinBar and BarcodeThickBar. To adjust for example a ratio of 1 : 2,5 set
BarcodeThinBar = 2 and BarcodeThickBar = 5.
T e l e p e n - A
BCT_TELEPENA
Field of Application
The code Telepen-A is often used in libraries.
Checkdigit
The use of a checkdigit is optional. The barcode library can generate the checkdigit automatically.
Characteristics
• In addition to he Full-ASCII-Code Telepen-A exists a numeric variation of the Telepen-A code.
This is currently not supported.
BCT_INTELLIGENT_MAIL
Field of Application
The code is used in the USA by the United States Postal Services for bulk mailings. It is the
successor of the POSTNET barcode and replaces it.
Checkdigit
This barcode has no checkdigit. A CRC is encoded within the barcode pattern.
Characteristics
The height of the Intelligent Barcode should be between 0.125 – 0.165 inch (0.3175 – 0.4191 cm).
The width must be between 2.667 – 3.225 inch (6.774 – 8.192 cm).
The correct creation of bulk mailings requires compliance with a lot of specifications about the
position of barcodes and addresses, paper types, font types, font sizes and many more.
The complete specification for the Intelligent Barcode can be downloaded from the web-server of
the United States Postal Services.
(12345)
BCT_POSTNET
Field of Application
The code is used in the USA by the United States Postal Services for bulk mailings. From May
2010 on, this barcode may not be used.
Checkdigit
The use of a checkdigit is required. The barcode library can generate the checkdigit automatically.
Characteristics
The height of a POSTNET barcode should be 0.125 inch (0.3175 cm).
The correct creation of bulk mailings requires compliance with a lot of specifications about the
position of barcodes and addresses, paper types, font types, font sizes and many more.
The complete specification for POSTNET can be downloaded from the web-server of the United
States Postal Services.
Field of Application
The code is used by the english Royal Mail to code the postcode for the bulk mailing systems
"Cleanmail" and "Mailsort".
Examples:
SN3 4RD 1A
B1 5AJ 6T
LU17 8XE 2B
Checkdigit
The use of a checkdigit is required. The barcode library can generate the checkdigit automatically.
Characteristics
The correct creation of bulk mailings according to the guidelines of "Cleanmail" and "Mailsort"
require compliance with a lot of specifications about the position of barcodes and addresses, paper
types, font types, font sizes and many more.
The complete "Cleanmail and Mailsort Information Pack" can be obtained from the Royal Mail
free of charge:
"Technical Specifications for Mailsort 700, Mailsort 120 and Cleanmail"
"Product Specification for Mailsort 700, Mailsort 120 and Cleanmail"
Royal Mail
Headquarters 49
Featherstone Street
London EC1Y 8SY
Telephone: 0345-950950
http://www.royalmail.co.uk
BCT_ISBN BCT_ISBN_5
Field of Application
ISBN-Numbers are international order numbers for books. For books they have a similar
importance as the EAN Code for food. They are managed in Germany by "Börsenverein des
deutschen Buchhandels" (Tel. 069/13060).
A ISBN code is created by using an EAN-13 code with the prefix "978".
Checkdigit
A checkdigit is required and is also included in the label. The barcode library can generate the
checkdigit automatically. If an erroneous checkdigit is provided, the barcode library treats this as
an error and no barcode is painted.
The algorithms for the checkdigit generation are differently between EAN and ISBN. With the
ISBN algorithm it can happen that the checkdigit "10" is computed, which is represented by an
"X", for example "3-928444-00-X". The barcode library does not allow to leave out the "X" or to
replace it by another character.
Characteristics
• The label below the barcodes contain the ISBN coded as EAN-13 and above the barcode as text
in clear, including the checkdigit.
• The ISBN barcode is a special variation of the EAN-13 code. Often it is used in conjunction
with the EAN-5 add-on code, for example for the quotation of prices. In the example above it is
DM 19.80 (or whatever currency).
56.310 243031 3
BCT_IDENTCODE
This code is only used inside Germany, therefore the description is in german language.
Anwendungsgebiet
Anwendung durch Kunden der Deutschen Post AG, die ihre Frachtsendungen zur automatischen
Verteilung in Frachtpostzentren der Deutschen Post AG mit Strichcodes versehen möchten.
Der Identcode dient zur eindeutigen, individuellen Kennzeichnung eines Postpakets. Mit Hilfe der
Kennzeichnung wird der Lauf eines Postpakets von der Annahme bis zur Auslieferung verfolgt
(Tracking und Tracing). Rückfragen zum Sendungsablauf sind möglich. Dazu dient ein Doppel
des Identcodes, welches beim Kunden verbleibt.
Der Code ist eine Anwendung des Codes 2 aus 5 interleaved, bei dem jedoch ein besonderes
Verfahren zur Berechnung der Prüfziffer und zur Beschriftung des Strichcodes zur Anwendung
kommen.
Aufbau eines Identcodes:
Stellen Bedeutung Beispiel
1-2 Abgangsfrachtpostzentrum 56
3-5 Kundenkennung 310
6 - 11 Einlieferungsnummer (vom Kunden vergeben) 243031
12 Prüfziffer 3
Die Zuteilung der Kundenkennung erfolgt durch die Deutsche Post AG und richtet sich nach dem
zu versendenden Paketvolumen, d.h. für diese Nummer können 1 bis 5 Stellen benutzt werden,
entsprechend stehen für die Einlieferungsnummer dann 8 bis 4 Stellen zur Verfügung.
Zeichensatz / Stellenanzahl
Der Zeichensatz umfaßt die Ziffern 0..9. Es werden 11 Nutzziffern und 1 Ziffer Prüfsumme
übertragen.
Prüfziffer
Die Verwendung einer Prüfziffer ist für diesen Code vorgeschrieben. Die Barcode-Library erzeugt
die Prüfziffer auf Wunsch automatisch. Falls die Prüfziffer nicht automatisch erzeugt wird, prüft
die Barcode-Library ob eine korrekte Prüfziffer von der Anwendung übergeben wurde.
Obwohl der Identcode ansonsten eine normgerechter 2 aus 5 Interleaved Code ist, weicht die
Prüfsummenberechnung von der Norm für 2 aus 5 interleaved ab. Anstelle der bei 2 auf 5
verwendeten Gewichte 3 und 1 werden die Stellen mit den Werten 4 und 9 gewichtet.
Beschriftung
Die Beschriftung bei Identcodes ist erforderlich. Die Deutsche Post AG hat vorgesehen, dass die
einzelnen Datenfelder in der Beschriftung durch Punkte und Leerzeichen voneinander getrennt
werden. Da die Post AG keine Angabe macht, wo die Trennung zwischen Kundenkennung und
Einlieferungsnummer erfolgen muss, erlaubt Ihnen die Barcode-Library die Punkte und
Leerzeichen im String selbst angeben, z.B. als "56.310 243031 3".
Weitere Informationen
• "Infopost und Kataloge - National", Deutsche Post AG
• "Gut in Form. Ganz automatisch.", Deutsche Post AG
• "Identcode und Leitcode für Postpakete", Deutsche Post AG
MatNr (=Bestellnummer) 671-677
• "Postleitdaten Anwenderhandbuch", Deutsche Post AG, MatNr 672-609-800
Deutsche Post AG - Generaldirektion Dienststelle 221b-1 Telefon 06151-9084735
Deutsche Post AG - Direktion Erfurt Zentrallager Post Privatkundenvertrieb
99081 Erfurt - Telefon 03643-239260 Telefax 03643-239269
21348.075.016.40 1
BCT_LEITCODE
This code is only used inside Germany, therefore the description is in german language.
Anwendungsgebiet
Anwendung durch Kunden der Deutschen Post AG, die ihre Frachtsendungen zur automatischen
Verteilung in Frachtpostzentren der Deutschen Post AG mit Strichcodes versehen möchten.
Der Code ist eine Anwendung des Codes 2 aus 5 interleaved, bei dem jedoch ein besonderes
Verfahren zur Berechnung der Prüfziffer und zur Beschriftung des Strichcodes zur Anwendung
kommen.
Codiert werden: Postleitzahl, Strasse und Hausnummer des Zielortes einer Sendung
Aufbau eines Leitcodes:
Stellen Bedeutung Beispiel
1-5 Postleitzahl 21348
6-8 Straßenkennzahl 075
9-11 Hausnummer 016
12-13 Produktcode 40
14 Prüfziffer 1
Zeichensatz / Stellenanzahl
Der Zeichensatz umfasst die Ziffern 0..9. Es werden 13 Nutziffern und 1 Ziffer Prüfsumme
übertragen.
Prüfziffer
Die Verwendung einer Prüfziffer ist für diesen Code vorgeschrieben. Die Barcode-Library erzeugt
die Prüfziffer auf Wunsch automatisch. Falls die Prüfziffer nicht automatisch erzeugt wird, prüft
die Barcode-Library ob eine korrekte Prüfziffer von der Anwendung übergeben wurde.
Obwohl der Leitcode ansonsten eine normgerechter 2 aus 5 Interleaved Code ist, weicht die
Prüfsummenberechnung von der Norm für 2 aus 5 interleaved ab. Anstelle der bei 2 auf 5
verwendeten Gewichte 3 und 1 werden die Stellen mit den Werten 4 und 9 gewichtet.
Beschriftung
Die Beschriftung bei Leitcodes ist erforderlich. Die Deutsche Post AG hat vorgesehen, dass die
einzelnen Datenfelder in der Beschriftung durch Punkte und Leerzeichen voneinander getrennt
werden. Die Barcode-Library gestattet Ihnen die Angabe der Daten mit oder ohne Punkte.
Weitere Informationen
• "Infopost und Kataloge - National", Deutsche Post AG
• "Gut in Form. Ganz automatisch.", Deutsche Post AG
• "Identcode und Leitcode für Postpakete", Deutsche Post AG
MatNr (=Bestellnummer) 671-677
• "Postleitdaten Anwenderhandbuch", Deutsche Post AG, MatNr 672-609-800
Deutsche Post AG - Generaldirektion Dienststelle 221b-1 Telefon 06151-9084735
Deutsche Post AG - Direktion Erfurt Zentrallager Post Privatkundenvertrieb
99081 Erfurt - Telefon 03643-239260 Telefax 03643-239269
BCT_PZN
This code is only used inside Germany, therefore the description is in german language.
Anwendungsgebiet
Der Code PZN wird zur Kennzeichnung von Medikamenten verwendet. Pharma Zentral Nummern
werden vergeben von der "Informationsstelle für Arzneispezialitäten IfA GmbH", Hamburger
Allee 26, 60486 Frankfurt, Tel. (069) 979919-0.
Der PZN Strichcode ist eine Anwendung des Codes 3 aus 9. Als besonderes Kennzeichen beginnt
der Strichcode mit einem "-" und das Prüfzeichen wird anders bestimmt als beim Code 39 sonst
üblich.
Zeichensatz / Stellenanzahl
Der Zeichensatz umfasst die Ziffern 0..9. Es werden 6 Nutzzeichen und eine Prüfziffer codiert.
Prüfziffer
Die Verwendung einer Prüfziffer ist für diesen Code vorgeschrieben. Die Barcode-Library erzeugt
die Prüfziffer auf Wunsch automatisch. Falls die Prüfziffer nicht automatisch erzeugt wird, prüft
die Barcode-Library ob eine korrekte Prüfziffer von der Anwendung übergeben wurde.
Besonderheiten
Die Eingabedaten für den PZN-Code müssen an die Barcode-Library so übergeben werden, wie
die Beschriftung später erfolgen soll. D.h. einschliesslich der Ziffernfolge "PZN-".
• Das Verhältnis schmales Modul ist einstellbar durch die Properties BarcodeThinBar und
BarcodeThickBar. Um z.B. ein Verhältnis von 1 : 2,5 einzustellen, muss BarcodeThinBar = 2
und BarcodeThickBar = 5 gesetzt werden.
Data Matrix was developed by International Data Matrix, Inc. The original type (ECC000 –
ECC140) is only available for closed system applications where a single party controls symbol
production and reading. For new applications ECC200 is recommended, which employs Reed-
Solomon error correction. Typical applications include small component and silicon wafer
marking in the electronic industry, pharmaceutical unit dose and product marking.
Valid ECC Types other than ECC200: ECC000, ECC050, ECC080, ECC100 and ECC140.
Encodable character set: ASCII (ISO 646 IRV) (0 – 127) and ISO 8859-1 (128 – 256). Alternative
character sets encodable using ECI protocol.
Matrix Sizes: ECC000 – ECC140: 9x9 to 49x49 (odd combinations only)
ECC200: Square:
from 10x10 to 144x144 (even combinations only)
Rectangular: 8x18 to 16x48
Quiet Zone: 1 module on each side
Maximal Data Per Symbol (ECC200):
Numeric: 3116 digits
Alphanumeric: 2335 characters
Full & Extended ASCII: Not directly calculable
Byte: 1556 bytes
The QR Code (short for Quick Response) was developed by Denso-Wave in 1994.
The QR Code provides four different encoding modes, the user data capacity depends on the
encoding and error correction level:
Encoding Modes and Data Capacity
Numeric code only max. 7,089 characters
Alphanumeric max. 4,296 characters
Binary (8 bits) max. 2,953 bytes
Kanji/Kana max. 1,817 characters
VPE chooses automatically the best encoding. Only for Kanji you need to specify that the Kanji
encoding shall be used.
MaxiCode has been developed by United Parcel Service (UPS). The primary application is
transportation, and in particular the sorting, handling, and tracking of packages by carriers.
MaxiCode symbols have a unique appearance due to their hexagonal modules and overall fixed
size (28.14 mm x 26.91 mm). They have a distinct “bull’s eye” finder pattern of concentric circles.
Encodable character set: ASCII (ISO 646 IRV) (0 – 127) and ISO (8859-1) (128 – 255).
Alternative character sets encodable using ECI protocol.
Matrix Sizes: 33 rows x 30/29 columns (interleaved): 884 hexagonal modules (cells)
Dimensions: 28.14 mm wide x 26.91 mm high (nominally)
Quiet Zone: 1W (0.88 mm) on the left and right, 1Y (0.76 mm) on the top and bottom
Maximal Data Per Symbol:
Numeric: 138 digits
Alphanumeric: 93 characters
PDF417 has been designed to provide a symbol with high data capacity. It has been specified as
the symbology for shipping data in ISO 15394 and for “portable database” applications. In
California, drivers’ licenses contain personal identification data encoded as PDF417.
Encodable character set: US ASCII (ISO 646) (0 – 127) plus PC 437 values (128 – 255). Numeric
and byte data may also be encoded efficiently.
No. of rows: 3 – 90 subject to ([No. of rows] x [No. of columns]) <= 928
No. of columns: 1 – 30 subject to ([No. of rows] x [No. of columns]) <= 928
Quiet Zone: 2X (where X = 1 module width) on each of the four sides
Maximal Data Per Symbol (@ error correction level 0):
Numeric: 2710 digits
Alphanumeric: 1850 characters
Full & Extended ASCII: Not directly calculable
Byte: 1108 bytes
Encodable character set: ASCII (ISO 646 IRV) (0 – 127) and ISO 8859-1 (128 – 256). Alternative
character sets encodable using ECI protocol.
Matrix Sizes: “compact” 15x15 to 27x27 increasing in 4x4 steps
“full range” 19x19 to 151x151
“runes” fixed size 11x11
Quiet Zone: none required
Maximal Data Per Symbol: Full-range (Compact) Symbols
Numeric: 3832 (110) digits
Alphanumeric: 3067 (89) characters
Byte: 1914 (53) bytes
Runes store 1 byte
In the above graphic, the Form Field is divided into 15 character cells. You specify the number of
character cells with the property "CharCount".
The cells are divided by Dividers, these are the lines that separate each cell from another. You
may specify the height, color and thickness of Dividers.
Forthermore, Form Fields have a bottom line. You can specify the bottom line's pen color and
thickness. The bottom line will only be drawn, if the normal PenSize (used for lines, frames, etc.)
is zero. Otherwise a FormField will have a frame as if VpeWriteBox() was used. In the graphic
below, the bottom line has been made thicker than in the example above.
In addition to Dividers, VPE offers the optional usage of Alternative Dividers, for which you may
specify a separate height, color and thickness. You can also specifiy every n-th position they shall
appear and / or if they shall appear at the very first and / or very last position. In the graphic above
they are drawn with full height at the very first and very last position, whilst the Dividers are
drawn at ½ height.
In the graphic below they appear on every second position (AltDividerNPosition = 2), their
thickness is 0.6 mm and they appear on the first and last position, too.
Notes:
• Do not misunderstand FormFields, they can't be used for data input by the user. They are
intended to be used to display data (the VPE Interactive Edition offers objects for data input).
• A Form Field can only consist of one single line of text, it can not have multiple lines.
• The text alignment can only be left or right.
• Form Fields can not be rotated.
will produce
As you can see, the font size is computed by VPE automatically in a way that the characters will
fit best into the given width.
The FormField is surrounded by a rectangle, because after calling OpenDoc() VPE sets the
PenSize by default to 0.3 mm.
In order to remove the surrounding rectangle, use the following code:
VPE.OpenDoc
VPE.PenSize = 0
VPE.CharCount = 15
VPE.FormField(1, 1, -10, VFREE, "Hello World!")
VPE.Preview
The following code will set the pen size of the dividers to 0.06 (0.6mm, the default is 0.1mm) and
reduce the height of the dividers to ¼ (which is by default at ½):
VPE.OpenDoc
VPE.CharCount = 15
VPE.DividerPenSize = 0.06
VPE.DividerStyle = VFF_STYLE_1_4
VPE.FormField(1, 1, -10, VFREE, "Hello World!")
VPE.Preview
Please note that the font size (and therefore also the automatically computed height of the
FormField!) had changed a bit, because due to the thicker dividers there is less space for the
characters.
Possible styles are:
Style Value Comment
VFF_STYLE_NONE 0 no dividers
VFF_STYLE_1_4 1 1/4 height
VFF_STYLE_1_3 2 1/3 height
VFF_STYLE_1_2 3 1/2 height (default)
VFF_STYLE_2_3 4 2/3 height
The code VPE.AltDividerNPosition = 2 did instruct VPE to treat every second divider as
Alternative Divider. By default, AltDividerNPosition is zero (no Alternative Dividers are drawn)
and Alternative Dividers are drawn at full height (AltDividerStyle = VFF_STYLE_1_1) with the
default PenSize of 0.3 mm.
To add the four digit year value "2003" to the above sample, add another FormField to the right of
the previous one:
VPE.OpenDoc
VPE.CharCount = 4
VPE.AltDividerNPosition = 2
VPE.FormField(1, 1, -2, VFREE, "1205")
VPE.AltDividerNPosition = 0 // turn alternative dividers off
VPE.FormField(VRIGHT, VTOP, -2, VFREE, "2003")
VPE.Preview
If you want the first and last divider to be painted in the style of the normal dividers:
VPE.OpenDoc
VPE.CharCount = 4
VPE.AltDividerNPosition = 2
VPE.FormFieldFlags = VFF_FLAG_DIV_FIRST + VFF_FLAG_DIV_LAST +
VFF_FLAG_AUTO_FONTSIZE
VPE.FormField(1, 1, -2, VFREE, "1205")
VPE.Preview
NOTE: The first and last divider is not drawn, if the FormField has a frame.
In the following drawing the white dot in the middle of the arrows is the x, y starting coordinate.
The arrows show the extent by the pensize.
The sense is that if you draw a table (as in the demo "Speed + Tables"), the lines of two
neighboring boxes will exactly overlap, so that no doubled (bold) lines will appear.
For circles and ellipses this means that the radius has an extent by ½ of the pensize:
The “u” at the end of the file name indicates the Unicode header.
General Implementation:
• Open the document with OpenDoc
• Open the Preview with Preview()
• Do output calls and call DispatchAllMessages() regularly. DispatchAllMessages() allows VPE
to do necessary updates in the preview, to react onto user actions and to send messages to your
application. In other words: it keeps the preview AND your application "alive".
• Check the return value of DispatchAllMessages(). If it returns TRUE, the preview or the parent
window of the preview are closed by the user: so perform the necessary cleanup (for example
close tables and databases) and exit the function that creates the report immediately.
NEVER CALL ANY VPE-Function if the document is not (or no longer) open!
NOTE: If you insert objects on the VisualPage (that means, VisualPage = CurrentPage) with an
open preview and you move the CurrentPage to another page, the updates in the
preview become automatically visible. Otherwise you need to call the method Refresh
(DLL: VpeRefreshDoc), to make the changes visible in the preview.
In the example above, the method DispatchAllMessages() is called periodically, so the preview
and the calling application can react onto user action (keeps "alive").
For a complete example, please take a look at the provided demo source codes. The
technique described here is used in the "Speed + Tables" demo.
Note that VPE stores the setting of the margins (and also the positions of the last inserted object)
for each page separately. So, if you have pages with different margins, the above example will
still work!!! For source code see the demo "Speed + Tables".
Be careful if you want to insert such headers / footers below the bottom margin! If you have the
AutoBreak option activated (see “Automatic Text Break” on page 44), this might result in
unwanted page breaks. Turn AutoBreakMode off in such case.
The example does also work, if you are using a SwapFile based document (DLL: if you are using
VpeOpenDocFile).
NOTE: There is one restriction for changing the page margins (see “Page Margins” on page 38)
in response to the AutoBreak-Event:
If the AutoBreak-Event was caused by an RTF Object using one of the following
properties:
the modification of the page margins might lead into wrong results of the output, because
in such case VPE needs to know the dimensions of the margins of the next page before
the event is fired. Normally this is not a problem, if you are sure your modifications of the
margins will not affect the space needed by the broken RTF text (i.e. if the OutRect stays
large enough to hold the broken text).
break;
The above example places a watermark with the text “COPY” in light gray on each page.
Afterwards the document is printed.
The following example assumes you have already created a document and stored it to a file using
the method WriteDoc(“mydoc.vpe”). The example code reads the file into memory and places a
watermark with the text “COPY” in light gray on each page. Afterwards the document is written
to the file “mydoc_copy.vpe”.
Doc.OpenDoc()
Doc.ReadDoc("mydoc.vpe")
Doc.InsertAtBottomZOrder = true
Doc.TextColor = COLOR_LTGRAY
Doc.FontSize = 28
for page = 1 to Doc.PageCount
Doc.CurrentPage = page
Doc.Print(8, 13, "COPY")
end for
Doc.WriteDoc("mydoc_copy.vpe")
Doc.CloseDoc()
NOTE: VPE documents must be created and used separately per thread, i.e. each thread
must create a VPE document itself by calling OpenDoc(), and one thread must not
use the document object of another thread for calls to the VPE API.
Example:
You want to print the text "Hello, World!" in bold and italic. The string you would supply to one
of the text-output functions would be:
"[B I]Hello, World!"
Remarks:
The "[" will only be interpreted at the very first position within the string. All following characters
will be interpreted as flag-settings, until a "]" is encountered. A "[[" sequence will be interpreted
as one "[" that will be printed.
Avoid using NoHold of the embedded flags, it eats a lot of performance (as the parsing of the
embedded flags, too). To gain maximum performance we suggest not to use the embedded flags at
all. If performance is not an issue, they are of course a very comfortable way to modify properties.
You can turn the Embedded Flag Parser off, so text beginning with a "[" will not be interpreted as
embedded flags. Instead the "[" and all following text will be inserted into the document. See the
property EmbeddedFlagParser in the Reference Manuals.
The flags:
Each flag can be given in a long or a short form. Uppercase or lowercase-forms are not significant,
i.e., "NoHold" can also be written as "nOhoLd". Some flags must be followed by one or more
numeric parameters.
The following fixed colors are defined and can be used as parameters for the color-flag
settings:
Black, DkGray, Gray, LtGray, White
DkRed, Red, LtRed
DkOrange, Orange, LtOrange
DkYellow, Yellow, LtYellow
DkGreen, Green, LtGreen, HiGreen, BlueGreen
Olive, Brown
DkBlue, Blue, LtLtBlue, HiBlue, Cyan
DkPurple, Purple, Magenta
PenSize, PS <pensize>
Sets the pensize. <pensize> is the size of the pen in the current units, i.e. in cm, inch or
1/10mm – depending on the setting for the property UnitTransformation. You can also use
double values, e.g. "PS 0.001".
PenColor, PC <color-name>
Sets the pencolor. <color-name> is one of the color-strings above.
PenColorRGB, PCRGB <red> < green> <blue>
Sets the pencolor with RGB-values <red> < green> <blue>. Example: "PCRGB 200 210 30”
PSSolid, PSS
Sets the pen to solid drawing mode.
PSDash, PSDA
Sets the pen to dash drawing mode.
PSDot, PSDO
Sets the pen to dot drawing mode.
PSDashDot, PSDADO
Sets the pen to dash-dot drawing mode.
PSDashDotDot, PSDADODO
Sets the pen to dash-dot-dot drawing mode.
BkgColor, BC <color-name>
Sets the background color. <color-name> is one of the color-strings above.
BkgColorRGB, BCRGB <red> < green> <blue>
Sets the background color with RGB-values of <red> < green> <blue>.
Transparent, T
Sets the background mode to transparent.
TransparentOff, TO
Sets the background mode to solid.
GradientLine, GRDL
Sets the background mode to gradient line.
GradientRect, GRDR
Sets the background mode to gradient rect.
GradientEllipse, GRDE
Sets the background mode to gradient ellipse.
GradientTwoColor, GRDTWO <color-name>
Use 2-color gradient (gradient from start color to end color).
GradientTriColor, GRDTRI <color-name>
Use 3-color gradient (gradient from start color over middle color to end color).
GradientStartColor, GRDSC <color-name>
Sets the gradient start color. <color-name> is one of the color-strings above.
Additionally the following flags are available in the Professional Edition and above:
Shadowed, SH
Sets shadow drawing on.
ShadowedOff, SHO
Sets shadow drawing off.
Viewable, VA
Sets the viewable mode to on.
ViewableOff, VAO
Sets the viewable mode to off.
Streamable, SA
Sets the streamable mode to on.
StreamableOff, SAO
Sets the streamable mode to off.
Printable, PA
Sets the printable mode to on.
PrintableOff, PAO
Sets the printable mode to off.
The following constants are defined for the .NET Control, ActiveX, VCL and the DLL:
COLOR_BLACK = RGB(0, 0, 0)
COLOR_DKGRAY = RGB(128, 128, 128)
COLOR_GRAY = RGB(192, 192, 192)
COLOR_LTGRAY = RGB(230, 230, 230)
COLOR_WHITE = RGB(255, 255, 255)
COLOR_DKRED = RGB(128, 0, 0)
COLOR_RED = RGB(192, 0, 0)
COLOR_LTRED = RGB(255, 0, 0)
COLOR_DKORANGE = RGB(255, 64, 0)
COLOR_ORANGE = RGB(255, 128, 0)
COLOR_LTORANGE = RGB(255, 192, 0)
COLOR_DKYELLOW = RGB(224, 224, 0)
COLOR_YELLOW = RGB(242, 242, 0)
COLOR_LTYELLOW = RGB(255, 255, 0)
COLOR_DKGREEN = RGB(0, 128, 0)
COLOR_GREEN = RGB(0, 192, 0)
COLOR_LTGREEN = RGB(0, 255, 0)
COLOR_HIGREEN = RGB(0, 255, 128)
COLOR_BLUEGREEN = RGB(0, 128, 128)
COLOR_OLIVE = RGB(128, 128, 0)
COLOR_BROWN = RGB(128, 80, 0)
COLOR_DKBLUE = RGB(0, 0, 128)
COLOR_BLUE = RGB(0, 0, 255)
COLOR_LTBLUE = RGB(0, 128, 255)
COLOR_LTLTBLUE = RGB(0, 160, 255)
COLOR_HIBLUE = RGB(0, 192, 255)
COLOR_CYAN = RGB(0, 255, 255)
COLOR_DKPURPLE = RGB(128, 0, 128)
COLOR_PURPLE = RGB(192, 0, 192)
COLOR_MAGENTA = RGB(255, 0, 255)
The COLOR_xyz constants are also defined in the VPE Control to make it easier to port existing
source code to different programming languages.
ActiveX / VCL:
Just use the constants as they are, e.g.: Report.PenColor = COLOR_RED
You can assign any RGB value to a color property.
.NET:
For the .NET Control the constants must be prefixed with the class name VpeControl, e.g.:
Report.PenColor = VpeControl.COLOR_RED
Of course you can use any other member of the .NET Color enumeration, for example
Report.PenColor = Color.Aquamarine
NOTE: Printer Setup files always should have the suffix ".PRS".
The call to SetupPrinter() above does the following: first, VPE tries to load the file
"my_setup.prs". If it is found, the old settings are loaded and the appropriate dialog is shown.
Otherwise a setup dialog for the default printer with default settings is shown - there, the user can
select the printer he wants. The user can make his settings and after pushing the Ok-button, the
settings are stored back to the file "my_setup.prs".
Whenever your application is later generating a document, you should execute the following code:
OpenDoc
SetupPrinter("my_setup.prs", PRINTDLG_ONFAIL)
CloseDoc
With the call to SetupPrinter(), VPE tries to load the file "my_setup.prs". If it is found, the old
settings are loaded.
Only in case of a problem (e.g. VPE couldn't load the file, or there was a problem of loading the
data into the device driver), the setup dialog will be shown.
There is also the property EnablePrintSetupDialog. If it is False, no setup dialog will be shown,
when the user pushes the print button in the Preview.
NOTE: The settings of the printer setup do not influence the VPE document. For example the
settings for the Paper Orientation or the Paper Size is independently of the settings for
the document. But you can read a printer setup with the method ReadPrinterSetup() and
retrieve all settings with the Device Control Properties. Afterwards you can set the
properties of the VPE document (e.g. Paper Orientation, Paper Size) to the properties of
the device.
But - because of the private driver data - if the user replaces the printer by another model (or
manufacturer) or possibly if just the driver version is changed, the setup file needs to be deleted
and newly created.
If you want to gain a driver independent format stored to file (accepting that specific properties of
a printer are not supported), it is very simple to create your own file format by using the Device
Control Properties and writing / reading them to / from file.
The following device properties are not stored in a VPE printer setup file for technical reasons:
• DevFromPage
• DevToPage
• DevPrintToFile
• DevFileName
• DevJobName
You can solve this problem by calibrating VPE to the specific printer:
This can be done with ONE single printout by your end user. Simply create a document with a
vertical line with Line(2, 2, 2, 5) and a horizontal line with Line(2, 2, 5, 2). Print it to the printer
and let the user measure the real offset of the printed lines to the paper margins and let him enter
the values into a small dialog.
Store these values into a file and retrieve them when starting your app or starting a report. Then,
after calling OpenDoc(), provide the calibration values to VPE with:
SetPrintOffset(2 - x_measured_value, 2 - y_measured_value)
Et Voila! Your printout looks exactly the same as on the preview and as desired!
Example:
For the HP 5P under WinNT 4.0 SP3, we measured an offset of 2cm for the vertical line drawn in
parallel to the left page margin, therefore, this value is correct (x-offset). But we measured an
offset of 1.7cm for the horizontal line drawn in parallel to the top page margin (y-offset). So the y-
offset is misaligned by 3 mm and we call:
SetPrintOffset(2 - 2, 2 – 1.7)
If you know the printer(s) your users will be using in advance - and there is a model which makes
such problems - you could also perform the measuring by yourself and store the measured values
in a database, so the user is not required to do the measuring himself.
NOTE: This is a problem of the printer driver. The described method above of manual calibration
is the only way to solve the problem. There will be no printing / reporting tool that could
eliminate the problem by itself - except it had stored the calibration values already in its
own database (which is nearly impossible, regarding the count of available printers that
would need to be tested).
Character sets compatible to the character sets of the Windows operating system:
VCHARSET_WIN_ANSI Western character set: Afrikaans, Basque, Catalan, Danish,
Dutch, English, Esperanto, Faroese, Finnish, French, Frisian,
Galician, German, Icelandic, Indonesian, Interlingua, Irish, Italian,
Latin, Malay, Maltese, Norwegian, Pilipino, Portuguese, Spanish,
Swahili, Swedish, Welsh
VCHARSET_WIN_HEBREW Hebrew
VCHARSET_WIN_ARABIC Arabic
VCHARSET_WIN_GREEK Greek
VCHARSET_WIN_TURKISH Turkish
VCHARSET_WIN_VIETNAMESE Vietnamese
VCHARSET_WIN_THAI Thai
VCHARSET_WIN_EAST_EUROPE Albanian, Belarusian, Croatian, Czech, Hungarian, Polish,
Romanian, Serbian, Slovak, Slovenian
VCHARSET_WIN_CYRILLIC Bulgarian, Russian, Serbian and Ukrainian (Cyrillic)
VCHARSET_WIN_BALTIC Estonian, Latvian and Lithuanian
Character sets compatible to the ISO character sets (taken from unicode.org):
VCHARSET_ISO_LATIN_1 Latin-1, Western character set (ISO-8859-1)
VCHARSET_ISO_LATIN_2 Latin-2, East European (ISO-8859-2)
VCHARSET_ISO_LATIN_3 Latin-3, South European (ISO-8859-3)
VCHARSET_ISO_LATIN_4 Latin-4, Baltic (ISO-8859-4)
VCHARSET_ISO_CYRILLIC Cyrillic (ISO-8859-5)
VCHARSET_ISO_ARABIC Arabic (ISO-8859-6)
VCHARSET_ISO_GREEK Greek (ISO-8859-7)
VCHARSET_ISO_HEBREW Hebrew (ISO-8859-8)
VCHARSET_ISO_LATIN_5 Latin-5, Turkish (ISO-8859-9)
VCHARSET_ISO_LATIN_6 Latin-6, Nordic (ISO-8859-10)
VCHARSET_ISO_THAI Thai (ISO-8859-11)
IMPORTANT:
When using symbol fonts, like for example "WingDings", you must set the property CharSet =
SYMBOL_CHARSET first!
There are two possible types of fonts that can be used, which are explained in the next chapters.
This makes up 14 fonts, because each attribute (bold, italic, bold-italic) for Helvetica, Times and
Courier is counted as one additional font.
Using TT fonts on Windows and Mac OS X platforms is very transparent and easy (for you as a
user). Both platforms have a built-in font manager, which is used by VPE. For example, if you
instruct VPE to use the Arial font for a portion of text, VPE will call the font managers of either
Windows or Max OS X and ask them to provide the font. The font managers themselves care for
the list of available fonts on the current machine and which font file at what location needs to be
selected and loaded into memory.
Example:
A VPE document is created at c:\projects\docs\mydoc.vpe
The document includes a picture from c:\projects\images\logo.jpg
VPE will convert the image path to a path relative to the position of the VPE document,
i.e. to: ..\images\logo.jpg
This allows to move the VPE document file to a different location, as long as the image is moved
to the same relative position (i.e. ..\images\).
A better example would be that the VPE document file is created at:
c:\projects\docs\mydoc.vpe and the picture is located in the same directory, i.e.
c:\projects\docs\logo.jpg. In this case the resulting relative path would be logo.jpg
NOTE: A path can only be converted into a relative path, if the picture file and the VPE
document file are on the same drive / device. E.g. if a picture is on “c:\tmp\test.jpg” and
the document is on “d:\doc\sample.vpe”, no relative path can be constructed!
The file names stored in VPE document files are translated to the specific platform (i.e. correct
slash and backslash handling) when reading a document file.
NOTE: When you read one or more VPE document files into the current document using
ReadDoc(), and those files have embedded images, you may NOT delete or modify the
source document files, while the current document is open! This is, because VPE loads
the embedded images directly out of the source document files each time they are not
found in the image cache.
For the VPE Control this is done by setting the property SwapFileName before calling OpenDoc(),
for the VPE DLL this is done by calling the function VpeOpenDocFile() instead of
VpeOpenDoc().
In the on-disk mode only the current page is held in memory, all other pages are swapped to a
VPE document file. This implies minimum memory usage at very high performance and allows to
create huge documents. VPE's on-disk mode is VERY fast.
Even for file-based documents you can add new pages to the end of a document at any point in
time.
Editions below the Professional Edition: after a page has been swapped to file, you can not modify
the page, i.e. add new objects to it.
The Professional Edition and higher allow to add new objects to pages which have already been
written to file and to clear, insert and delete pages at any position in a document file.
On-disk document files can become fragmented, if you are adding a lot of new objects to a page
which has already been written to disk. Especially if you are adding objects in multiple steps, i.e.
you add some objects, seek to another page, seek back and add again objects and so on, or open
and close the document file repeatedly while adding each time new objects. This will result in
decreased performance when reading pages of document files.
Defragmenting document files:
Open the document file with SwapFileName (DLL: use VpeOpenDocFile())
Call WriteDoc(<new file name>)
The file <new file name> is defragmented, whilst requiring nearly no memory for the operation.
With SwapFileName / VpeOpenDocFile() you can also open an existing file, VPE first checks if
the given file already exists. If so, the first page is loaded into memory. If you want to add pages
to the end of an existing document file, open it and call PageBreak() first, so that a new empty
page is added to the end of the document . If the document doesn't contain any pages, then the first
page is an empty page.
If you click the e-mail button in VPE View, it will open your Simple MAPI mail client (in any
installed) and automatically attach the VPE document to the e-mail. Depending on the licensing
when a VPE document was created - VPEView will mail the attached document as:
1) Trial-Version: attachment is a non-licensed (demo) PDF file.
2) VPE license applied, but no PDF license: attachment is a licensed (non-demo) VPE file.
3) VPE license and PDF license applied: attachment is a licensed (non-demo) PDF file.
Exception: if the property EditProtection is activated, the VPE document file must have been
created using the PDF Export Module Enterprise Edition. In this case VPEView will attach a PDF
document which can only be printed, but not modified. If EditProtection is activated and the PDF
Export Module Standard Edition has been licensed, VPEView will not attach a PDF file, but a VPE
document file.
Remarks:
VPEView opens files always write protected (i.e. in read-only mode).
If you created documents with the trial-version of VPE, they will have set a flag, so VPE View will
display the demo banner if such a file is viewed.
For documents that were created with the Licensed Version it is not necessary - and forbidden -
that the end users of VPE View use your License Key to view the documents without demo
banners. VPE View is designed in a way that it recognizes if a document was created with a
licensed version of VPE and will then hide the demo banners automatically.
VPE View examines the VPE Document it shall open and tries first to load the according Edition
of the VPE DLL with which the document was created. This will avoid possible document version
mismatches, if multiple Editions of VPE are installed on the same machine in different versions.
For further information about VPE document files, please see “VPE Document Files” on page
138.
VPEView can be distributed royalty-free. For details about redistribution, please see
“Redistribution of VPE View” on page 203.
4.26 Standards
• For standardization, the suffix of document files created with VPE has to be ".vpe". From v3.0
on we deliver a standard VPE document viewer that may be distributed royalty-free. This
browser is associated with the suffix ".VPE". The browser is for example very useful if you
send VPE-Documents via e-mail, so the recipient can read the document easily.
• Also for standardization, the suffix of printer-setup files created with SetupPrinter() /
WritePrinterSetup() should be ".PRS".
Disadvantage:
• You need to program something, i.e. you need to provide the data by code to VPE. But this is
done in a very easy way and usually requires very little coding.
providers.fld
customers.fld articles.fld
request.dcd
DYCODOC
request.tpl
Windows API
Runtime Library
… DBMS VPE API
Application
Template
Layout
Page 0 Page 1 Page 2 Page n
. . . .
. . . .
. . . .
VPE Object n VPE Object n VPE Object n VPE Object n
Data
Data Source 0 Data Source 1 Data Source 2 Data Source n
. . . .
. . . .
. . . .
Field n Field n Field n Field n
In the following sections we will give a brief overview about the several objects which belong to
the template structure.
If you are yet not familiar on how to use dycodoc and how to create DCD, FLD and TPL files,
please consult the "dycodoc Manual".
Some notes:
• You may set the values for any field, even if a field is not used in a template - and therefore is
not present. No error will occur.
• A template can only be dumped into the document into which it had been loaded, e.g.
report1.LoadTemplate("some.tpl"), report2.DumpTemplate() is not possible, only
report1.DumpTemplate() is allowed.
• You can dump one and the same template as often into a document as you like. Each time
before you call DumpTemplate() you can assign new values to fields.
Call the VPE API method PageBreak(), before dumping a template a second time, to ensure
that the template is dumped into a new page at the end of the document.
• VPE is case insensitive regarding Field and Data Source names, e.g. "Sender:Name" and
"sender:name" are the same Fields for VPE.
// Main Program
// First of all, we declare an object variable for a template object:
Dim tpl as TVPETemplate
// We can show now the preview for the VPE Document we just created:
VPE.Preview
// Main Program
// First of all, we declare an object handle for a template object:
VpeHandle hTpl;
// Now the template has been loaded into memory and is ready to be
// processed. Fill the Fields with values:
SetFields(hTpl);
// We can show now the preview for the VPE Document we just created:
VpePreviewDoc(hDoc, NULL, VPE_SHOW_NORMAL);
In the dycodoc file "sample2.dcd", the object named "Text1" contains the field $(GoodByePhrase).
With the following code sample we will retrieve this object and set its BkgMode to solid and paint
it in red color. The object is modified within the template.
Sample Code for the VPE Control
// Declare an object variable for a VPE object:
Dim obj as TVPEObject
VpeHandle hTpl;
VpeHandle hDoc = VpeOpenDoc(hWnd, "Sample", 0);
hTpl = VpeLoadTemplate(hDoc, "\\dycodoc\\samples\\Sample2.tpl");
if (hTpl == NULL)
return; // an error had occurred, e.g. the file was not found
SetFields(hTpl); // this procedure had been declared in the very first sample
In addition to the property LastInsertedObject VPE provides the property FirstObject which
retrieves the first VPE Object of the current page of the VPE Document you are working on. VPE
Objects themselves own the property NextObject. Both properties together allow to iterate
through all objects of a page / document.
Looking at the previous sample you will ask youself "So far so good, but if I dumped a template
into a document, how can I retrieve VPE object handles from the inserted objects? The property
'LastInsertedObject' won't help me, since it references only the last inserted object and not the
whole group of template objects. The properties FirstObject / NextObject provide all objects on a
page, but I need discrete informations about the objects that have been created from a template."
You are right. But VPE offers a special method to retrieve for each template object the
corresponding objects that were inserted into the VPE document.
We speak about multiple corresponding objects, because a single Text Object or Rich Text
Object might have been split over multiple pages. This can happen if it contains huge parts of text
or if its position was very near to the bottom margin. When an object is split over multiple pages,
each splitted object is a new distinct object.
In the following sample we will dump the template into a VPE Document. Afterwards we search
the template VPE Objects "RichText5" and "Picture2". We will then retrieve the coordinates of the
corresponding VPE Objects which had been inserted into the document. Having their
coordinates, we will draw two crossing lines above these objects, calling the VPE API directly.
The whole strikeout process is done in the procedure "StrikeOutObject".
left = DocObj.nLeft
top = DocObj.nTop
right = DocObj.nRight
bottom = DocObj.nBottom
// Main Program
Dim tpl as TVPETemplate
Dim obj as TVPEObject
VPE.OpenDoc
tpl = VPE.LoadTemplate("\dycodoc\samples\sample2.tpl")
SetFields(tpl) // this procedure had been declared in the very first
sample
VPE.DumpTemplate(tpl)
StrikeOutObject(VPE, tpl, "RichText5")
StrikeOutObject(VPE, tpl, "Picture2")
VPE.Preview
// We found it:
// Due to a possible auto break the object could have been
// inserted multiple times into the VPE document.
// Find ALL inserted objects and strike them through
for (long i = 0; i < VpeGetInsertedVpeObjectCount(hTplObj); i++)
{
RECT rc;
// Main Program
VpeHandle hTpl;
VpeHandle hDoc = VpeOpenDoc(hWnd, "Sample", 0);
hTpl = VpeLoadTemplate(hDoc, "\\dycodoc\\samples\\Sample2.tpl");
if (hTpl == NULL)
return; // an error had occurred, e.g. the file was not found
SetFields(hTpl); // this procedure had been declared in the very first sample
VpeDumpTemplate(hDoc, hTpl);
StrikeOutObject(hDoc, hTpl, "RichText5")
StrikeOutObject(hDoc, hTpl, "Picture2")
VpePreviewDoc(hDoc, NULL, VPE_SHOW_NORMAL);
WARNING: Modifying any of the following properties for Text-, RTF- and FormField-Objects that
reside already in a VPE Document might cause that the text does not fit anymore
into the object's rectangle, since the object is not re-rendered. Text will be clipped
(i.e. skipped) then!
• PenSize
• FontName
• FontSize
• Charset
• Bold
• Italic
• Rotation (works only for VPE Objects which reside in a template!)
For FormFields, the above rule extends in addition to the following properties:
• CharCount
• DividerPenSize
• AltDividerNPosition
• AltDividerPenSize
• BottomLinePenSize
• FormFieldFlags
NOTE: You can modify without problems any of the above properties for objects which reside
in a template before dumping it, if nRight and nBottom of the object are set to VFREE.
The above code retrieves a VPE Object from the template. Internally, the VPE-VCL calls the
VPE-DLL, retrieves a handle (this is a LongInteger) of the VPE Object in the DLL and stores
the handle in a permanent TVPEObject.
Afterwards we execute the following code:
SomeObject := Tpl.FindVpeObject('some other object');
Another VPE Object is retrieved from the template and the handle retrieved from the VPE-DLL
is stored internally again in the same permanent TVPEObject as above.
We decided to do so, because if the VPE-VCL would create each time a new object instead of
using the same object, you would need to keep yourself track of all objects and you would need to
destroy each yourself when it is no longer needed.
Due to the mechanisms explained above, SomeObject and SomeOtherObject keep a reference to
one and the same TVPEObject in memory: the first call to Tpl.FindVpeObject('some object') did
set the DLL-Object-Handle of the TVPEObject to the value of SomeObject. The second call to
Tpl.FindVpeObject('some other object') did set its DLL-Object-Handle of the TVPEObject to the
value of SomeOtherObject. As a result SomeObject and SomeOtherObject both hold the reference
to one and the same VPE Object in the DLL.
Therefore SomeObject.PenColor := COLOR_GREEN will set the color of 'some other object' to
COLOR_GREEN, which is not intended.
In the above code we work immediately with SomeObject and later with SomeOtherObject.
But of course this will not satisfy all of your needs, for example the following code would be
impossible to realize:
SomeObject.PenColor := SomeOtherObject.PenColor;
In order to solve this problem, we implemented a CreateCopy Constructor for each kind of TVPE
class (except TVPEngine and TVPETemplate). The following code is correct :
var Tpl: TVPETemplate;
SomeObject: TVPEObject;
SomeOtherObject: TVPEObject;
In the above example we create a copy of the TVPEObject and assign its reference to
SomeObject. So SomeObject references a different separate object and the code
SomeObject.PenColor := COLOR_GREEN will work as expected.
Please note that we call "SomeObject.Free" at the bottom of the above procedure in order to avoid
memory leaks. This is very important.
NOTE: You need to destroy each object created with "CreateCopy" yourself when it is no longer
needed!
VPE.OpenDoc
tpl = VPE.LoadTemplate("\dycodoc\samples\sample2.tpl")
SetFields(tpl) // this procedure had been declared in the very first
sample
// Show how to retrieve the margins as the user had defined in dycodoc
left_margin = tpl_page.nLeftMargin
top_margin = tpl_page.nTopMargin
right_margin = tpl_page.nRightMargin
bottom_margin = tpl_page.nBottomMargin
// Show how to retrieve the margins as the user had defined in dycodoc
left_margin = VpeGetTplLeftMargin(hTpl, page);
top_margin = VpeGetTplTopMargin(hTpl, page);
right_margin = VpeGetTplRightMargin(hTpl, page);
bottom_margin = VpeGetTplBottomMargin(hTpl, page)
VPE.OpenDoc
tpl = VPE.LoadTemplate("\dycodoc\samples\sample2.tpl")
//
Set the field to "Hello World!", except for the field
//
"Sender:Signature", because this is set to the file name of the
//
signature JPEG file
If
field.Name = "Sender:Signature" Then
field.AsString = "\dycodoc\samples\pakzadeh.jpg"
Else
field.AsString = "Hello World!"
End If
Next n
Next i
Example 1:
You create test.dcd and therefore test.tpl in "c:\templates\test.tpl". Within the document you have
placed a picture object from the location "c:\templates\logo.bmp". In this case dycodoc will make
the path relative to the location of the template, and therefore the path- and file name will be
"logo.bmp", since the file logo.bmp is in the same directory as test.tpl.
Example 2:
You create test.dcd and therefore test.tpl in "c:\templates\test.tpl". Within the document you have
placed a picture object from the location "c:\templates\images\logo.bmp".
In this case the relative path- and file name will be "images\logo.bmp".
Of course dycodoc can not create a relative path, if a referenced image (or external RTF file) is
located on a different drive or on a different server than the template.
As a template is loaded into VPE using LoadTemplate(), the relative path name is converted back
to an absolute path, with the position of the template file as reference point. So if the template
"c:\templates\test.tpl" from the above example #2 was copied to "f:\programs\templates\test.tpl",
the path name for the image will be expanded to "f:\programs\templates\images\logo.bmp".
In order to be able to transport template files from one location to another, especially in client-
server environments, we recommend to keep external files on the same drive or server as the
template and to use UNC (Universal Naming Code) for LoadTemplate() as well as for pictures and
external RTF files used within templates. UNC is a naming convention for files which provides a
machine-independent means of locating the file. A UNC name will usually include a reference to a
shared folder and file name accessible over a network rather than specifying a drive letter and
path. For example, to access an image named logo.bmp on a shared directory named Samples on
the computer called MyWorkstation, you could use the UNC name
\\MyWorkstation\Samples\logo.bmp.
NOTE: If you enter in dycodoc a relative path for a picture or external RTF file, it will be stored
unchanged in the template, e.g. "..\images\logo.bmp" or "images\logo.bmp".
will place the text "Annotation" directly onto the current page of the VPE Document at the
position 1cm from the left page margin and 1cm from the top page margin.
The demo programs "VPE Demo" and "VPE Professional Demo", which are shipped with VPE,
create their documents solely by calling the VPE API directly. They make no use of templates.
The source codes for these demos are installed with VPE. They are a good resource and
demonstrate all important programming techniques. We recommend that you have a look at them.
Details on using the VPE API directly can be found in the chapter “Programming Techniques” on
page 21 ff.
The line with the Parameters "1611942443, 198827155, -643266845, 273270745" is the
Authenticity Key in decimal coded form. You will need these parameters later in your source code
in order to verify the Authenticity Key by calling the VPE API method LoadTemplateAuthKey().
It is important that you copy immediately the Parameters using Copy & Paste from the dialog to a
text file or into your source code. You can do so by highlighting the line "1611942443,
198827155, -643266845, 273270745" and pressing Ctrl-C on your keyboard. Then open a text or
your source code editor and paste the parameters by pressing Ctrl-V on your keyboard.
Please keep in mind: Once you have closed the above dialog, you will never again be able to
retrieve the Authenticity Key Parameters!
if (hTpl == NULL)
{
switch (VpeGetLastError(hDoc))
{
case VERR_TPL_AUTHENTICATION:
MessageBox(hWnd, "'sample2.dcd' has been modified.", "Error:",
MB_OK);
break;
case VERR_FILE_OPEN:
MessageBox(hWnd, "'sample2.dcd' not found or no access rights.",
"Error:", MB_OK);
break;
default:
MessageBox(hWnd, "'sample2.dcd' could not be read.", "Error:",
MB_OK);
}
}
else
{
SetFields(hTpl);
VpeDumpTemplate(hDoc, hTpl);
VpePreviewDoc(hDoc, NULL, VPE_SHOW_NORMAL);
}
The above code validates the Authentication Key when loading the template. If the key is wrong
an error message is displayed, otherwise the template is dumped into the VPE Document.
The above code will insert 100 times the same template into the VPE Document, where each
template has an offset of 0.5cm to the previous dumped template.
The above will display the Template in the Preview, with the controls showing the values you had
assigned to the Fields. However, you will realize that you can not make use of the Controls, i.e.
they don't react on mouse clicks or keyboard input. The reason is that interaction is disabled by
default. In order to activate the Controls, you need to:
• Enable Interaction
By doing so, the controls will then react on mouse and keyboard input. Furthermore, you can set
the Input Focus to any Control, so the user may start directly with editing the document.
6.3.1 Example
The following example demonstrates the basic steps of loading a template, setting the fields,
enabling interaction, setting the focus and showing the form in the preview.
We are using the sample DCD "iForm.dcd", which is shipped with VPE and installed in
"<VPE Install Dir>\images\DCD\iForm.dcd".
You will find the complete source code, which demonstrates all the techniques that are
explained throughout the following sections of this manual, at:
• C / C++: subdirectory "C\iform.cpp"
• Visual Basic: subdirectory "VB\vpeidemo\iForm.vbp"
• Delphi: subdirectory "Delphi\vpeidemo\iFormPrj.dpr"
Note the two Save and Cancel "Buttons" at the bottom of the form. They are synthesized by using
a Checkbox and overlaying a Text Object. The Checkboxes and Texts of the synthesized buttons
are marked as "Do not include in Prints", so they are only visible in the preview, but they are not
printed.
We also used a special naming convention, in order to identify objects by their names:
• The prefix "iff" is used for Interactive Form Fields (e.g. "iffName").
• The prefix "it" is used for Interactive Texts (e.g. "itAddress").
• The prefix "cb" is used for Checkboxes (e.g. "cbIsHungry").
• The prefix "rb" is used for Radiobuttons (e.g. "rbMeat").
The names of Controls are important to identify them later during runtime by code. For example a
Control is enabled or disabled - or the focus is set to a Control - by specifiying its name.
Furthermore VPE sends events to your application, with informations about several actions that
are currently performed by the user regarding a specific control. While processing such an event,
you identify the related Control by inquiring its name.
Note that the size information (for example for the Field "Name", the size is 80), has no effect in
the current version of VPE. But entering the size when creating an FLD makes sense, because
designers, which use the FLD in dycodoc, immediately have an imagination of how huge the
content of the Field is and therefore know how to choose the dimensions of any associated
Control.
For an explanation on how to work with the preview, please refer to the section “Preview” on page
24.
Application
Data
Fields
Data
Controls
Data
User
Sets the Field "Name" which is a member of the table "iForm" to the value "Smith", i.e. one
could read this as "iForm.Name = Smith".
Retrieves the value of the Field "Name" and assigns it to the variable "data".
In the following section we will explain, how VPE fires events which will notify your application
about changes of Controls due to a user editing the control with the keyboard and mouse.
Event: RequestControlExit
The user wishes to remove the focus from the currently focused Control.
In response to this event your application can evalute the value of the Control and decide, whether
the current value is valid and the Control may lose the focus or not.
Event: AfterControlExit
Event: AfterControlChange
A Control changed its value, i.e. the content of a Control was edited by the user or the value
of an associated Field was changed by code.
Evaluating this event means that your application is informed about every single keystroke or
mouse-click, which modifies a Control's content.
If you are working with Fields that are associated with controls - as recommended - your
application should not take care of this event.
This is one of the few events where CloseDoc() may be called while processing the event.
The event is not fired, if you set the value of a Control by code.
Event: AfterFieldChange
A Field (not a control!) changed its value, because the associated Control was edited by the
user or the content of any associated Control was changed by code.
This event is very interesting, because a Field will change its value each time the user makes a
change. Evaluating this event means that your application is informed about every single
keystroke or mouse-click, which modifies a Control's content.
NOTE: If you change the value of a Control by code, the AfterControlChange event is not fired.
But if the Control is associated with a Field, the event AfterFieldChange is fired.
Vice versa, if you change the value of a Field by code, the AfterFieldChange event is not
fired, but any Controls associated with the Field will fire the event AfterControlChange.
The demo program "VPE Interactive Demo" (vpeidemo.exe) shipped with VPE gives a very good
overview about the event structure. It shows what events are fired in response to specific user
actions. To run the demo, choose "Demos | Enhanced Template Processing" from the menu.
Example on how to disable a control, which is already dumped into a VPE Document:
tpl.FindControl("rbMeat").ControlEnabled = False
Example on how to enable a control, which is already dumped into a VPE Document:
tpl.FindControl("rbMeat").ControlEnabled = True
Field-Objects are used to exchange data between your application and Controls.
Control-Objects are used to identify Controls, in order to handle their events, to access and
modify their properties and to steer the focus handling.
The trial versions of VPE allow to use all features of the PDF Export Module. In this case the
exported PDF Document will have demo banners and is always compressed.
The handling is trivial, you can create a complete PDF file from a VPE document with only one
line of source code:
VPE.WriteDoc("My Document.pdf")
NOTE: For important information about fonts and font handling, please see “Fonts and Font
Handling” on page 133.
190 • The PDF Export Module Virtual Print Engine - Programmer's Manual
The PDF Export Module of the VPE Standard and Enhanced Editions:
• Offers unrestricted 1:1 export of VPE documents to PDF. Gradients, rounded corners,
barcodes, etc. are written as true PDF vector graphics
• Optional creation of compressed PDF documents
• Optional embedding of True-Type fonts
• Embedded images (except JPEG files) can be converted automatically to a lower resolution to
save space. JPEG files are always copied with their original RAW binary data to PDF.
The PDF Export Module of the VPE Professional Edition and higher:
• Offers unrestricted 1:1 export of VPE documents to PDF. Rich Text, charts and 2D-barcodes
are written as true PDF vector graphics
• Supports export to the PDF/A format for long-term archival, according to ISO standard ISO
19005-1:2005, PDF/A-1b.
• Encryption with a variable key length between 40 and 128-bit.
• Selective protection of documents and password protection
(e.g. protect a document against printing, copy & paste, modifications, etc.)
• Creation of Linearized PDF ("Fast Web View")
An enhanced PDF file format especially for the Internet. It allows to view any given page on a
client site as fast as possible without downloading the whole document from a server.
• True-Type Font Subsetting
Font Subsetting means that VPE assembles on-the-fly a new font from the source font, which
contains only the characters that are used in the document. A subsetted font is in regular much
smaller than the original font, which results in significantly smaller documents.
• Font Substitution
Supports the optional usage of PostScript fonts by Font Substitution, e.g. the font 'Arial' can be
used in VPE for the preview and for printing, but the PDF document will be created using the
PostScript font 'Helvetica' instead.
• If embedded images are converted to lower resolutions, their quality can be increased by
applying automatically the Scale2Gray algorithm (see “Scale-to-Gray Technology” on page
54). This feature requires the VPE Professional Edition or higher.
• Creation of Bookmarks
A PDF document may optionally display a document outline on the screen, allowing the user to
navigate interactively from one part of the document to another. The outline consists of a tree-
structured hierarchy of bookmark items, which serve as a "visual table of contents" to display
the document’s structure to the user. Bookmarks are displayed in the left tree-view of Acrobat
Reader.
The trial versions of VPE allow using all features of the PDF Export Module, including all
methods of VPE Professional Edition.
Virtual Print Engine - Programmer's Manual The PDF Export Module • 191
7.2 Restrictions
Metafiles (EMF and WMF) and UDO's (User Defined Objects) are written as bitmaps to PDF.
VPE Interactive Edition: currently Interactive FormFields, Checkboxes and Radiobuttons are
exported as normal graphical objects, they are not editable in PDF documents.
If VPE detects the suffix ".pdf", it will write the document automatically as PDF file.
In order to control the PDF document creation, VPE provides many properties and methods you
may change prior to calling WriteDoc().
Please consult the section "PDF Export" either in the "DLL Reference" help file or in the
"Control Reference (.NET / ActiveX / VCL)" help file for details.
192 • The PDF Export Module Virtual Print Engine - Programmer's Manual
7.5 Objects Marked As Non-Printable
By default, objects which are marked as non-printable by setting the property Printable = false
(Professional Edition and above), are not exported to external file formats, like PDF documents or
image files. Vice versa, objects marked as non-viewable for the Preview are exported to external
file formats.
VPE understands an export operation as a different way of printing. The reason is that for example
PDF’s are sent most often by e-mail as a replacement for sending printed copies of documents by
postal mail. So printed documents and e-mailed documents should be the same.
You can override this default behavior with the property ExportNonPrintableObjects. By setting
this property to True, all objects of a document - which are marked as non-printable - will be
exported to external file formats, too.
Virtual Print Engine - Programmer's Manual The PDF Export Module • 193
8 The HTML Export Module
VPE.WriteDoc("My Document.html")
194 • The HTML Export Module Virtual Print Engine - Programmer's Manual
8.3 HTML Export Options
VPE offers several properties to control the appearance of exported HTML documents, for
example the scale of the document, which is important for printing, and a property to make
documents with RTF objects compatible to browsers, which have a larger line spacing (for
example Firefox).
In addition, the settings for DocExportPictureQuality and DocExportPictureResolution are applied
to converted bitmap images (i.e. where a source image is not in a browser-compatible format, for
example TIFF and is converted to PNG).
Objects which are exported as bitmaps – like barcodes, charts, polygons, etc. – are using the
properties DocExportPictureResolution, PictureExportColorDepth and PictureExportDither.
We recommend to set DocExportPictureResolution to 96 DPI for HTML export, which is the
resolution for screens. This also creates smaller images (regarding their size in bytes).
The property CopyImages specifies, whether images are copied to a target directory, or if HTML
links to their original locations are written.
Please see the reference manuals for further details.
Virtual Print Engine - Programmer's Manual The HTML Export Module • 195
• Firefox (all platforms) requires HtmlScale = 0.80, displays ok, but has a bug in printing the
HTML documents generated by VPE. Firefox does not handle the page breaks correctly. You
can print single-page documents well, but multi-page documents do not work. Mozilla has
confirmed this to be a bug, see https://bugzilla.mozilla.org/show_bug.cgi?id=154892.
196 • The HTML Export Module Virtual Print Engine - Programmer's Manual
9 Redistributing VPE
Explanation:
• Each high level component - the ActiveX, the.NET component, the Delphi VCL component
and the Java Native Interface component – load and use the VPE DLL or on non-Windows
platforms the VPE.so (shared object).
• The Enterprise Edition and Interactive Edition do load internally the Java Script engine.
Please keep in mind that the DLLs you are shipping have to be accessible by your application.
This means: they need to be located either in the directory of your application, or they are located
in a directory which is included in the PATH environment variable (for example Windows /
System32). If you copy them to Windows / System32 (or SysWOW64), you must treat them as
shared DLLs and update the registry with their usage-counters accordingly. Most installers
provide the functionality of handling shared DLL reference-counting without problems.
IMPORTANT NOTE:
In order to protect VPE from misuse in server environments without a server license, the engine
keeps track of the number of calling threads and processes for each license key.
In environments without server licenses, a maximum of three processes or threads may use VPE
simultaneously with the same license key. If more than three processes try to open a VPE
document with the same license key, the licensing fails and VPE will behave like the trial version
and demo banners are shown.
Since VPE tracks the usage separately per license key, applications of different manufacturers
(which are using therefore different license keys) do not conflict with each other.
Important: the limitation only applies to different processes or threads. A single process or thread
may open and create an unlimited number of VPE documents simultaneously with the same
license key. If your application shall show multiple documents at the same time, do not use
different processes or threads, or limit the number of simultaneously running processes or
threads to 3.
Because the VPE .NET WebControl is intended to be used with ASP.NET on servers only, a
server license is required for this type of control. Without a server license demo banners will be
shown in created documents.
VPE also detects, if it is executed within the context of a Windows Service. As the name already
suggests, the main reason to execute VPE within a Service is to serve something. Therefore, if
VPE is executed within the context of a Windows Service, a server license is required. Without a
server license demo banners will be shown in created documents.
9.4.1 Installing the VPE ActiveX - The Demo Banners Are Still Shown
Q: I use the VPE ActiveX and it works fine. But when I install my application on my end user's
client machines, the demo banners are shown or I get OLE / COM Licensing errors.
A: The COM Licensing Mechanism works as follows:
As you enter your License Key in the VPE setup software in order to install the VPE SDK
(Software Develeopment Kit) on your machine, the VPE ActiveX is automatically supplied
with your License Key.
You can not call the method License() at runtime to override this mechanism. For the VPE
ActiveX the License() method can only be used, to register add-on modules, like for example
the PDF Export Module. The reason is that the VPE DLL is loaded immediately in the
moment the VPE ActiveX is loaded by your application. Since for each edition of VPE there
is a different VPE DLL (named for example VPES3235.DLL for the Standard Edition,
VPEX3235.DLL for the Enhanced Edition, etc.), the ActiveX must know at startup which
DLL to load and license.
When you place a VPE ActiveX at design time on a form in your application - i.e. when you
are developing your application - the server (your programming tool) requests your personal
VPE License Key from the ActiveX client and stores it together with the form.
If you later build your executable or deliverable application for shipment to your clients, the
encrypted VPE License Key is automatically stored by your development tool within your
application. Furthermore, the License Key is marked as "executable only", this means the
ActiveX can not be used on the target machine for development purposes.
If you get the demo banner in VPE or any OLE License error codes regarding VPE when
running your application, then something with the COM Licensing went wrong.
Visual Basic has no such problems, but we experienced that VB.NET, Visual FoxPro,
Progress and Centura request the License Key only once from a newly inserted ActiveX and
then keep it. This means that if you use the VPE ActiveX with the trial-version or with a
specific VPE Edition (Standard, Enhanced, Professional, etc.), and install later the full version
or another Edition, you need to delete the ActiveX controls from your application and re-
insert them, so the new License Key is updated by your development tool. This is solely a
problem of the development tool you are using - as mentioned before, Visual Basic for
example has no such problems.
Please note that the VPE ActiveX needs to be registered on each client machine. This is done
automatically by most installers. If you are not using an installer, call - for example from the
HKEY_CLASSES_ROOT\.vpe "vpedoc"
Where <path> is the installation directory of VPE View on the target machine.
Will generate a key file named “dcd.key” on your drive d:\ in the directory “mydir”.
Include this key file together with “dcdkey.exe” in your own application setup. During the setup,
you can install the key file by executing:
dcdkey -i dcd.key
Will install the key file named “dcd.key” on the current machine. This requires administrative
privileges.
After the key file is installed, dycodoc is licensed. The key file may be deleted on the target
machine afterwards.
11.1 Tips
• Frames drawn around objects (Barcodes, Pictures, etc.) can be eliminated by setting the
PenSize to zero
• For users of programming languages, which don’t provide some data types:
• VpeHandle is a 32-bit integer on 32-bit platforms and a 64-bit integer on 64-bit
platforms
• VpeCoord is of type double
• TRUE is the value 1 and FALSE is the value 0.
• COLORREF is a 32-bit integer.
• 1 inch is 2.54cm, so 5 inch = 5 * 2.54 cm = 12.7cm
• If you are using different font-sizes in a row, and you want to draw a box or grid around them,
do as followed: use VpeWrite() with y2=VFREE, or VpePrint(). After each Write / Print
determine the highest computed y2 coordinate for the whole row. So you can draw boxes (or a
grid) later around the row and between columns, and you can position the next row closely
beyond.
• If you want to create tables or lists with groupings and controlled page breaks, you need to
control page breaks by code:
To break detail lines to new pages, first compute the space you will need at least
for one new detail line including the Group or Sub-footer (if any).
Before inserting a detail line, check the available space on the current page with:
available_space = VPE.nBottomMargin - VPE.nBottom
if available_space < space_needed then
PrintMyGroupFooter()
VPE.PageBreak()
PrintMyGroupHeader()
end if
<output the next detail line here>
• The "Speed + Tables" demo source code demonstrates the above code in detail.
• Computing page breaks for images
Call RenderPicture() with the same parameters as if you were calling Picture().
Determine the size if the image with nRenderWidth and nRenderHeight. Add both values to the
position (x, y) where you want to place the picture. If the resulting bottom coordinate exceeds
the bottom margin (see nBottomMargin, SetOutRect and SetDefOutRect) you need to create a
page break and insert the picture on the new page.
Virtual Print Engine - Programmer's Manual Important Notes, Tips & Troubleshooting • 205
• Generating a Table of Contents (TOC)
VPE does not allow to insert pages into a document, it is only possible to append pages to the
end. The solution is, to create the main document and the TOC using two different VPE
documents at the same time: in the first document (docMain) you create the main document and
in the second document (docTOC) the TOC at the same time.
After the creation of the main document is finished, you write it to file using
docMain.WriteDoc("tmpfile.vpe"). Afterwards close the main document.
Then call docTOC.ReadDoc("tmpfile.vpe") to append the main document to the TOC
document.
The above explanation assumes that the page numbering for the main document starts with
"page 1". It is also possible to start the first page of the TOC with "page 1", however, this
makes things a bit more complicated:
Do not build docTOC while generating docMain. Instead while creating docMain build
internally a list which holds the titles and their corresponding page numbers. Do not number the
pages of docMain. Having docMain created, save it to file, close it and create docTOC in two
passes:
In the first pass you build docTOC with the titles and page numbers from your list. Having
done so, you will know how many pages docTOC needs. Afterwards destroy docTOC by
closing the document.
In the second pass open docTOC newly. You know now how many pages your TOC has (and
therefore how many pages the complete document has). Update the list of titles with page
numbers by adding the number of pages required by the TOC to each page number. Then create
the TOC and append the main document with docTOC.ReadDoc("tmpfile.vpe"). Afterwards
you can start numbering the pages of the main document and that's it.
Not really difficult at all.
206 • Important Notes, Tips & Troubleshooting Virtual Print Engine - Programmer's Manual
11.2 FAQ
Q: The export of images does not work correctly, what is the cause?
A: It might be a buggy video card driver (for example we heared that the original Viper 770
drivers cause malfunctions during picture export). Try to obtain a newer or compatible driver.
Q: The picture export to Metafile (WMF) does not work under Win9x. The VPE function
PictureExportPage() returns "failure", what is going wrong?
A: We experienced that the Windows API function CreateMetaFile() - which is used internally
by VPE - can not work with long file names. Accordingly you can not create a Metafile when
having long file names within the target directory structure or if the file name itself is a long
file name.
Workaround: use the Windows API function GetShortPathName() to convert the long target
path / file name into the short form and provide the result to PictureExport[Page]().
NOTE: this problem is only related to Win9x (WinNT 4 SP4 showed no such problems) and
only to Metafiles (WMF). All other image types, like Enhanced Metafiles (EMF) and the
bitmap file types like BMP, PNG, JPEG, etc. work ok.
Q: If I call VPE.SetupPrinter() the window of our main application is not disabled, it is still
running. I would have expected that it is disabled, because if the user pushes a second time
onto the "Setup" button in our application, we call a second time VPE.SetupPrinter(). Because
VPE is already executing the printer setup dialog, our application crashes. Why isn't the
window of our main application disabled automatically?
A: Because VPE fires events during the setup process to inform your application about the status
of the setup, the main window of your application is not disabled by VPE. Solution: disable
any GUI element which could cause that VPE.SetupPrinter() is called a second time while the
printer setup dialog is shown or disable your application before calling VPE.SetupPrinter()
and enable it after the call returns.
Q: We create huge numbers of VPE documents in a batch process. This means, in a loop of
hundreds of iterations we permanently call OpenDoc(), export for example the document
contents to image files and call CloseDoc() afterwards. Under Win9x we notice that the User
resources are shrinking continuously until no resources are left over. Is this a bug in VPE,
does VPE have a memory leak?
A: No, this is not a problem of VPE. It is caused by the design of Win9x: with every call to
OpenDoc(), VPE creates internally the invisible windows (Frame, Client, Toolbar, Statusbar,
etc.) which are needed for the preview. When calling CloseDoc() all those windows are
destroyed and therefore the allocated space on the User Heap is freed.
However, Windows itself does not compact the User Heap unless process control is returned
to the Windows subsystem. After deep investigation of this issue, we encountered that you
should execute the following code in order to let Windows shrink the User Heap:
VpeCloseDoc();
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Immediately after calling VpeCloseDoc(), the code above yields process control back to
Windows, which will make Windows compact its User Heap. Calling
Virtual Print Engine - Programmer's Manual Important Notes, Tips & Troubleshooting • 207
VpeDispatchAllMessages() or Sleep() does NOT help.
NOTE: The problem described above does only occur, if you are running a batch process
which does not interact event driven with the user and which executes hundreds of
OpenDoc() / CloseDoc() sequences without yielding process control regularly back to
Windows. If you are using VPE normally in a GUI application which is driven by events - as
all the demos shipped with VPE are - there will no such problem arise, because process
control is automatically returned to Windows after each document has been created.
Q: A barcode is displayed correctly in the preview, but is not of the same size when printed. Is
this a bug?
A: VPE prints the bar codes in correct size. You need to know the following about barcodes, to
understand it:
The width of the thin and thick modules (the black and white lines) have ratios, for example
1:2. This means, thin lines are half as thick as thick lines.
Example: a given barcode has 63 modules, 43 thick and 20 thin modules, and shall be painted
into a rectangle which has a width of 10 cm.
The barcode library now computes the maximum width of a single module, so that all
modules will best fit into the given rectangle while considering the rule that the thin / thick
ratio is 1:2. It can happen then that there are wide gaps at the end of the barcode, because it
can not fill the given rectangle.
The preview shows the barcode in the full rectangle, because when drawing to the preview,
the barcode library ignores the ratio rule, otherwise - due to the low resolution of the screen -
sometimes a barcode would not be shown at all or only in part.
Q: One and the same barcode is printed in different widths on different printers. Is this a bug,
how can I avaoid it?
A: See the question and answer above. This is caused by different printer resolutions.
Workaround: set the printer's resolution of the different printers to the same value, e.g. 300
DPI.
Q: I embedded the VPE Preview in a window of my own application, but now VPE does not
react on keypresses and / or the mouse wheel (and in the Interactive Edition the focus
handling does not work properly, if my application looses / receives the focus).
A: If embedded, the VPE Preview window is a child window of your application's window.
Therefore you need to set the focus to the VPE Preview window explicitly everytime the
parent window of VPE (this is your application's window) receives the focus (and - of course
- if VPE is the active control within that window). Another solution is that you forward all
messages of interest (WM_KEYDOWN, WM_MOUSEWHEEL, WM_SETFOCUS,
WM_KILLFOCUS) to the VPE Preview window.
208 • Important Notes, Tips & Troubleshooting Virtual Print Engine - Programmer's Manual
11.3 Printer Troubleshooting
Some printer drivers have bugs. If you cover a problem with printing, please try another printer
driver or another printer first. There are sometimes problems with HP Laserjet 4 drivers. Please
report bugs regarding HP Laserjet Drivers to Microsoft or HP.
As a replacement for HP PCL drivers you can for example use compatible Lexmark PCL printer
drivers, which are very good.
If your output looks garbaged: enable the option "Print True-Type as graphics" in the printer-
options dialog or with the DevTTOption property by code.
Problems with clipping: Some drivers cause problems with text clipping. The drivers are not
able to clip letters, so they print the whole letters instead. The y2 border of VpeWrite(Box) might
be crossed by letters, which should be printed only in part. You might experience this problem
when using VpeWrite(Box) with a fixed y2 coordinate. If y2 has a value other than VFREE and
the last line of the text is printed in part on the screen, this last line might be printed completely on
the printer.
The solution is to set y2 smaller, so that the whole line is clipped.
Printing colors: Some printer drivers may not print colored text, printing nothing instead. This
may also occur with lines and all other graphics depending on the chosen color.
Printing hatch styles: Some printer drivers may not print hatch styles correctly.
Problems with HP 4 Plus printer-drivers,and maybe other PCL printer drivers for HP 4 series.
(NOT: II, III, 5, 6):
The True-Type technology fails here, which might lead into the following problem under special
circumstances: If there is long text with no or only one or two gaps (blanks) the gaps are
eliminated, and text is drawn close together. This happens, because VPE works device
independent and renders the text size (in pixels) onto a virtual UHR (Ultra High Resolution)
device. Sadly the HP4 Plus driver returns very slightly different sizes, to what it should.
Possible workarounds:
1. The best way is, to activate in the options dialog of the printer-setup the checkbox "Print True-
Type as bitmap" or "Print True-Type as graphics". This can also be done by code with
TTOption = VTT_BITMAP.
2. We internally implemented a workaround which will solve the problem, if you use Write() or
WriteBox() and set a bit (about 1mm) larger object widths than needed for other printers.
3. Use a Lexmark PCL driver, they are very good, or use the HP Laserjet III driver
Virtual Print Engine - Programmer's Manual Important Notes, Tips & Troubleshooting • 209
11.4 Video Troubleshooting
Some video card drivers do not work correctly. Symptoms are:
• layout incorrect (wrong positioning of text and lines)
• the moving markers in the rulers might be drawn incorrectly
• colors of bitmaps are shown incorrectly
• scrolling objects with hatch styles may lead into misalignment of the hatching
• bitmaps are not shown when color-resolution of video-adapter is higher than the bitmap-
resolution (i.e., video-adapter = true-color, bitmap=256 colors)
• in multiple-colored bitmaps, text colors are damaged and texts not drawn / half drawn / drawn
incorrectly
• driver crashes when using bitmaps
• driver may crash under other circumstances
Discuss bugs with the video-card manufacturer, unless you also experience these problems with
the standard VGA driver by Microsoft (in which case VPE is the problem - and this is not known
until now).
210 • Important Notes, Tips & Troubleshooting Virtual Print Engine - Programmer's Manual
11.5 Known Problems
• On Win 9x/Me the GDI has 16-bit coordinates, so the dimensions of a page may not exceed
32.7 cm (12.9 inch) when using the version 4 renderer, and 138.7 cm (54.6 inch) when using
the version 3 renderer. Those values apply to the preview. For other output devices, e.g.
printers, the dimensions of a page may not exceed (32767 / DPI) * 2.54 cm, where DPI = the
resolution of the output device.
Example: for a printer with 1200 DPI resolution, the maximum page dimensions may be
(32767 / 1200) * 2.54 cm = 69.35 cm.
• On Win 9x/Me objects with rounded corners may not have a gradient. Gradients are drawn
outside the rounded corners on Win 9x/Me.
Please note that VPE v4.0 and higher do not officially support Windows platforms below
Windows 2000.
Virtual Print Engine - Programmer's Manual Important Notes, Tips & Troubleshooting • 211
11.6 If You Need Technical Assistance
IDEAL Software’s technical support policy is as follows:
• As a general rule, IDEAL Software will provide free standard support for questions, which can
be answered quickly (i.e. in less than 5 minutes and without further mail traffic).
• For broad premium support it is possible to acquire Support Units (current prices can be found
on our website). Each Support Unit equals 5 minutes of working time.
• With every support inquiry please provide us your support account number. With every support
incident we will notify you by e-mail about the charges to your support account as well as your
final account balance.
• Questions related to bugs in VPE are always free, if your inquiry should indeed be related to a
bug in VPE. You are only charged for “how-to” questions, questions that are covered in the
documentation, questions related to misuse of VPE or questions related to bugs in printer
drivers or other third party software.
Make sure you are a registered user of VPE. When you contact IDEAL Software for support,
please provide your License Key as well as your Support Account Number.
Please send your support requests via e-mail to Support@IdealSoftware.com. Please include
“VPE” in the subject of your e-mails. Normally, help will be provided within 24 hours (due to
possible time zone differences). Support is not available on weekends and local holidays.
Latest versions, up-to-date information and our support forum are available on our
internet site:
212 • Important Notes, Tips & Troubleshooting Virtual Print Engine - Programmer's Manual
www.IdealSoftware.com
Virtual Print Engine - Programmer's Manual Important Notes, Tips & Troubleshooting • 213
12 Standard Terms and
Conditions of Use
IDEAL Software's Standard Terms and Conditions of Use printed here regulate various legal aspects of the
business relationship with you. We have endeavoured to formulate the Terms and Conditions of Use as
clearly and comprehensibly as possible. If you nevertheless have any queries, please do not hesitate to
contact IDEAL Software, who will of course be happy to answer them.
The product manufactured by IDEAL Software and the documentation to this product are the exclusive
subject-matter of the contract concluded between IDEAL Software and you. The documentation shall be
made available exclusively in English. The source code of the product is not subject-matter of the contract.
IDEAL Software shall not be required to hand over or make available this source code.
Please note that the software runs only under the operating systems:
Windows XP, 2003, Vista, Win 2008, Win 7, Win 8 / 8.1, Win 10, Win 2012 / 2012 R2, Win 2016, Win 2019
Linux Kernel 2.4.x / 2.6.x / 3.x and LibC6, X86 or X64 Processors
Mac OS X 10.4.x, X86 or Power-PC Processors
Solaris 10, Sparc 64-bit or X86 Processors
Please note that this contract does not cover and is not applicable to third-party software such as operating
systems, nor printer drivers or other drivers or application programs.
The definitions given below apply to the following terms in our Standard Terms and Conditions of Use:
Product: the programs and/or software developed by IDEAL Software GmbH and for which you
are granted a right of use.
SDK licence: (Software Development Kit) licence for the product, which is envisaged for use
exclusively by users who are for their part developers of programs.
Run-time licence: right of use for installing, calling and operating the product on the data processing
system of a developer's customer (end-user licence). For details, refer to "Integration"
below.
214 • Standard Terms and Conditions of Use Virtual Print Engine - Programmer's Manual
Server: system for electronic data processing which provides services for other electronic data
processing systems (for example creating data files, printing out data, etc.).
The following provisions relate to the scope of the rights granted to you by IDEAL Software, what may and
may not be done with the software and what to do in the event of a problem, as well as several general
issues.
IDEAL Software is exclusively entitled to the copyright to products from IDEAL Software (including the
computer software, associated storage media, printed material and "online" documentation or electronic
documentation). The products are protected under the Copyright Act [Urheberrechtsgesetz] and the
International Copyright Treaty. Therefore, you shall be obliged to treat this product just like any other work /
material protected by copyright. The products are licensed, not sold.
2.1 IDEAL Software transfers to you a non-exclusive non-transferable right, unlimited as to time and
geographical area, to use the software acquired by you for the purpose of operation by a single
person (user/developer). Delivery of various storage media (for example 3.5" disks, CD-ROM or
DVD) shall not establish a licence for multiple use of the software.
The non-exclusive right of use only entitles to use the software by a single person
(user/developer). This shall apply, even if the right of use is acquired by a company or some other
body of persons. If you wish to use the product directly or indirectly by multiple persons
(users/developers), you must acquire a licence for each user. In this connection, IDEAL Software
GmbH offers the special reduced Site-License.
If the computer, on which the product has been installed, becomes defect or is not used anymore
for other reasons or is replaced by another computer, you are entitled to uninstall (respectively
delete) the product on the first computer and to install it on a new computer.
> The product shall be deemed to be used indirectly, if a developer prepares instructions of
any kind (e.g. by programming, writing or giving instructions through a graphical user
interface), which cause the product to be called at the end of the processing chain.
Examples: The licensed software is integrated into an intermediate interface or layer (for
example a library, class library, component, control, executable program or the like), a
developer uses this intermediate interface, and the use causes the licensed software to be
called at the end of the processing chain. Amongst other things, this also includes the
preparation of control files that are evaluated or interpreted by a separate application.
Please note that one licence for every user must always be acquired in order to operate an SDK
version on a developer server, i.e. for using the product in your network. This regulation does not
apply, if you have acquired an SDK-Site-License. The SDK-Site-License gives you the right to
install and use the product in an unlimited number at a single physical, respectively postal,
address.
2.1.1 A license may require an online activation. The online activation limits the number of simultaneous
installations. For this purpose, a Hardware-ID is generated from the hardware, on which the license
is activated. The online activation limits the number of simultaneous installations by the formula:
<number of acquired licenses> + 2. If you have for example acquired two licenses of the same
product with the same version and edition, it is possible to perform four simultaneous installations.
Please note that the multiple installations of a single license do not entitle its use by multiple
persons (users/developers). Each license may only be used by a single user (developer) at the
same time. When a license is uninstalled, it is deactivated online, so that it may be installed on a
different computer.
2.2 If you have received a licence key for a product from IDEAL Software upon the acquisition of a
user licence, please keep this licence key in a safe place.
Virtual Print Engine - Programmer's Manual Standard Terms and Conditions of Use • 215
The licence key releases the product for use. Moreover, an offer for an upgrade or update of the
product on possibly reduced terms can only be obtained upon sending the licence key to IDEAL
Software. You shall be solely responsible for the licence key. If the licence key or an installation
package is lost, IDEAL Software shall not be obliged to replace it.
The licence key sent by IDEAL Software shall be treated with strict confidentiality and may not be
passed on to third parties. If this prohibition is breached, a contractual penalty of EUR 10,000.-
shall be due for every case of breach. The right of IDEAL Software to claim compensatory
damages shall remain unaffected.
When installing the product, a licensing confirmation is generated and sent for verification
purposes to IDEAL Software. The licensing confirmation contains exclusively a serial number and
a hardware-id, but no personal data, and is not given away to third parties. However, with approval
of these Terms and Conditions of Use you declare precautionary your consent with the registration
and storage of the licensing confirmation in the sense of section 4a paragraph 1 of the German
Data Protection Act [BDSG].
If IDEAL Software operates a webportal, you are responsible to keep your e-mail addresses and
passwords for the webportal permanently up-to-date. If a person with access authorization leaves
your company and acquires discounted products, this behaviour is ascribed to you as contractual
partner, i.e. you lose the right to obtain (again) the discounted products.
Except where otherwise agreed expressly and in written form upon between you and IDEAL Software, you
shall not be entitled to modify, translate, hire out, sublicense, use on a time-share basis or electronically
transmit or receive the software. This shall apply accordingly to storage media and documentation.
4. Data Files Envisaged / Intended for Relicensing to your Customers - Run-Time Licence
4.1 The following data files are excluded from the above limitation regarding sublicensing (section 3).
With respect to these data files, you acquired upon purchase of this software package the right to
pass these on to third parties, embedded in your products. This authorization to pass on the
aforementioned data files implies exclusively the permission to use the data files integrated into
your products / applications. Depending upon the licence granted and the platform support, the
following data files are envisaged for passing on to your customers.
Mac OS X:
libvpe<?>.dylib.7.20.0 / LicenseTool
where "?" is to be replaced by the following letter depending upon the edition:
216 • Standard Terms and Conditions of Use Virtual Print Engine - Programmer's Manual
'P' for the professional edition
'E' for the enterprise edition
'I' for the interactive edition
and the "*" is to be replaced by the following word depending upon the edition:
The term "passing on" means: making available one or more of the aforementioned data files to
third parties and/or calling these data files. These data files may be distributed free of run-time
licences ("royalty-free") in an unlimited number.
4.2 If you acquired a license for the VPE SDK Enterprise Edition, you may distribute dycodoc
Enterprise Edition without limitation as to numbers and free of runtime licences. If you acquired a
license for the VPE SDK Interactive Edition, you may distribute dycodoc Interactive Edition without
limitation as to numbers and free of runtime licences.
4.3 This licence gives you the right to integrate the IDEAL Software product (in the form of the
aforementioned data files - depending upon the licence granted) into your applications and to pass
on the product to third parties in this form. However, these third parties shall not have the right to
pass on these data files again to other third parties (sublicensing) in any form whatsoever. If you
have such needs, please contact IDEAL Software directly. You may not in any way modify
distributable data files.
4.4 For the platforms Solaris / OpenSolaris, AS/400, AIX : In order to use run-time licences on a
server, a separate server licence must be acquired for each server. Use by way of executing at
least one of the aforementioned data files in the memory of a server shall not be permitted without
a server licence, regardless of the number of users. If you have acquired a Server Gold License,
you are entitled to pass on the files listed in section 4.1 to your customers for the use on any
number of servers. The current prices of server licences can be found on the website of IDEAL
Software at www.IdealSoftware.com.
4.5 VPE View Setup.exe may be passed on without limitation as to numbers and free of runtime
licences.
4.6 IDEAL Software shall disclaim any warranty in relation to third parties in the event that data files
are passed on. You alone shall be responsible for support, service, upgrades / updates and/or
technical assistance or other assistance in relation to every recipient of your programs. You shall
indemnify IDEAL Software, its associated companies and suppliers against all claims and liability
of any kind in connection with the use, reproduction or distribution of programs and shall
compensate for all damages resulting from this.
5. Updates / Upgrades
Where you have acquired, or acquire, an update or upgrade of a software, this shall constitute an
inseparable unit together with the original software from IDEAL Software GmbH. Except with the written
permission of IDEAL Software, an update or upgrade and the original software may not be used on two
different computers at the same time.
Virtual Print Engine - Programmer's Manual Standard Terms and Conditions of Use • 217
6. Naming of the Author / Copyright Notice
Whenever you use software from IDEAL Software, your software must in any event bear a copyright notice.
By hiding the info button or the toolbar, or by working without a preview, you agree to include a copyright
notice such as "Virtual Print Engine Copyright © IDEAL Software®" in your "About" dialog or in the help file
or - if neither exists - in your documentation.
7. Integration
The IDEAL Software product is designed to be integrated into your software. The functions of your software
must differ significantly from those of the IDEAL Software product. This means that your software must not
be a competing product identical or similar to our product. The product may only be used for printing and
previewing. Only application-specific data directly associated with your application may be used with the
product. This means that there must not be a universal interface to our product which enables your
application or its end-user to process any data sources (for example ODBC).
> Examples of applications into which the product may not be integrated: report generators, barcode
printing applications, graphics presentation software, database engines, universal print servers and
any possible combinations of these product categories, etc.
The product may not be used in programs or libraries that can be used for the development of programs,
where this enables end-users to control the content or layout of created documents.
> Examples: software development tools, software development kits, programming languages, script
languages, etc..
If you wish to create software of the aforementioned kind, a special license is required. In such case,
please contact IDEAL Software.
Apart from this, your applications may generate reports, print barcodes or create (graphic) presentations
with the product.
1.1 IDEAL Software warrants - under exclusion of the VPE Community Edition (see 1.4) - that, for one
year from delivery of the software, the storage media and documentation shall be free from defects
in materials and workmanship, and the software shall essentially function in accordance with the
accompanying documentation. Where you the customer are a consumer within the meaning of
section 13 of the German Civil Code [BGB], a two-year warranty period shall apply.
However, IDEAL Software does not warrant that the software or the documentation shall be "free
from defects", nor does it warrant that your standards shall be attained or your needs shall be
satisfied. Only a defect that considerably impairs the functionality of the software and was caused
by IDEAL Software with intent or in violation of the average standard of care exercised by a
prudent programmer (ordinary negligence) shall bring the warranty into effect. Therefore, IDEAL
Software shall not be liable for defects caused by slight negligence, even where these considerably
impair the functionality of the software. Additionally, no warranty shall come into effect, unless the
defect can be reproduced.
1.2 The warranty shall, at the option of IDEAL Software, consist in either
(b) the rectification of defects or the replacement of defective software that has been returned
to IDEAL Software together with a copy of your receipt (supplementary performance). If
such supplementary performance fails, you shall have the right to claim a reduction of the
price or cancellation.
218 • Standard Terms and Conditions of Use Virtual Print Engine - Programmer's Manual
1.3 IDEAL Software shall not accept any warranty, if a defect or malfunction of the software is due to
incorrect application, misuse or an accident. IDEAL Software warrants for a replacement-software
only for the remainder of the original warranty period or for a 30-day period, whichever period is
longer.
1.4 Please note that the above warranty regulations do not apply to the free VPE Community Edition.
For deficiencies of the VPE Community Edition IDEAL Software does not provide any warranties at
all.
If a defect in the software becomes apparent, you must report this to IDEAL Software in writing without
undue delay, indicating your licence key. If you fail to report the defect without undue delay, you shall lose
the warranty claim. The notice of defects should be sent to IDEAL Software together with a description of
the defect or malfunction.
Do not send in the product before you have contacted IDEAL Software.
3.1 IDEAL Software disclaims for itself any further warranty and liability in respect of the software and
documentation, except where the defect / damage was caused by IDEAL Software with intent or by
gross negligence. In the event of loss of life, injury to body or injury to health, however, IDEAL
Software shall be liable for any negligence.
3.2 Neither IDEAL Software nor its suppliers shall be liable to pay compensation for damages
(including damages based on lost profit, operational interruption, loss of information or data and
other pecuniary losses) arising due to use of the product acquired by you or impossibility to use
this product. IDEAL Software shall not be liable for damages not normally foreseeable.
3.3 The aforementioned warranty is definitive in principle. With respect to scope, it shall be limited to
replacement of the defective storage medium or incorrect documentation. Compensation for
damages or losses over and above this shall be excluded. This shall particularly apply to lost profit,
loss of data and impossibility of use of the software as well as to indirect damages or
consequential damages caused by a defect.
3.4 IDEAL Software shall be liable, with respect to the amount, only up to the sum of the list price or
the amount actually paid, whichever amount is lower.
3.5 IDEAL Software does not give a guarantee of any kind. Conflicting terms and conditions are
invalid. Assurances or other extensions of the warranty provisions laid down here shall only be
effective, if expressly given and/or agreed upon in writing.
3.6 Claims against IDEAL Software for compensatory damages, supplementary performance,
reduction of price or cancellation of contract shall be subject to a one-year limitation period from
the time of delivery or download. The limitation period in respect of claims against IDEAL Software
shall be suspended only by express and written acknowledgement on the part of IDEAL Software.
Except where otherwise expressly specified, verbal, written or other comments by IDEAL Software
in response to complaints shall be on a goodwill basis and shall not be deemed to be negotiation
within the meaning of section 203 of the German Civil Code [BGB].
D. Other Provisions
IDEAL Software reserves the right to amend and/or adapt the Standard Terms and Conditions of Use in
accordance with the general development of the market and technology. These Terms and Conditions shall
always apply as amended at the time of the conclusion of the contract.
2. Written Form
Virtual Print Engine - Programmer's Manual Standard Terms and Conditions of Use • 219
Agreements deviating from these Standard Terms and Conditions of Use, including this clause, must be in
writing and must be signed by you and a representative of IDEAL Software.
3. Choice of Law
The entire legal relations between IDEAL Software and you shall be governed by the laws of the Federal
Republic of Germany. Except where otherwise stipulated in these explanatory notes, IDEAL Software
expressly retains all other rights.
4. Note to Consumers
If you are a consumer in the sense of section 13 of the German Civil Code [BGB], we would like to point out
the following: for distance selling businesses (contracts, which are concluded where not all contractual
parties are physically present, e.g. over the internet) you have basically the right of revocation according to
section 312d of the German Civil Code [BGB] in conjuction with section 312b. and 312c. of the German
Civil Code [BGB]. But the right of revocation does not exist according to section 312d paragraph 4 no. 2 of
the German Civil Code [BGB] for software, if the delivered data storage medias or license keys are
unsealed by the consumer. Since IDEAL Software does not ship data storage medias, but provides
instantaneously online the software and license key, this regulation does also apply to the software
obtained by you. After receipt of the software / license key you have no right for revocation.
5. Notes According to Section 312e German Civil Code [BGB] and BGB-InfoVO
5.1 If you wish to purchase online a product of IDEAL Software, the contract between you and IDEAL
Software is made (on behalf of yourself or others, e.g. for your company), when you click the
"Submit Order" button. After receipt of your order, IDEAL Software will send to your supplied e-mail
address an ordering confirmation.
5.2 After accomplishment of the contract, IDEAL Software will store the following informations:
- Name, Address, Telephone, Fax, Contact, e-mail Adresses; VAT-ID (where applicable)
Those informations are solely used for internal controlling tasks of IDEAL Software and are strictly
not available to clients.
5.3 For online orders you have the option to make corrections before the final submission. The data
you have entered is displayed before the binding order is submitted and you are asked to review
your data for possible typing and other errors and to correct them, if required.
The place of performance and jurisdiction for all disputes arising directly or indirectly from the contractual
relationship shall be the city Neuss (Germany).
7. Severability Clause
If individual or several provisions in these "Standard Terms and Conditions of Use" are or become
ineffective or contain an omission or loophole, the parties to the contract shall enter into negotiations with
the aim of replacing or supplementing the ineffective or incomplete provision by an appropriate individual
agreement commensurate, in far as possible, with the commercial purpose of the intended provision. This
shall not affect the validity of the other provisions.
220 • Standard Terms and Conditions of Use Virtual Print Engine - Programmer's Manual
13 Allgemeine
Nutzungsbedingungen
in den hier abgedruckten Allgemeinen Nutzungsbedingungen der IDEAL Software werden verschiedene
rechtliche Aspekte der Geschäftsbeziehung zu Ihnen geregelt. Wir haben uns bemüht, die
Nutzungsbedingungen so klar und verständlich wie möglich zu formulieren. Sollten Sie dennoch Fragen
haben, so steht Ihnen die IDEAL Software zur Beantwortung natürlich gerne zur Verfügung.
Gegenstand des zwischen IDEAL Software und Ihnen geschlossenen Vertrages ist allein das von IDEAL
Software hergestellte Produkt sowie die Dokumentation zu diesem Produkt; die Dokumentation wird
ausschließlich in englischer Sprache zur Verfügung gestellt. Der Quellcode des Produkts ist nicht
Vertragsgegenstand; seine Herausgabe oder Zurverfügungsstellung wird nicht geschuldet.
Bitte beachten Sie, daß die Software ausschließlich unter den folgenden Betriebssystemen lauffähig ist:
Windows XP, 2003, Vista, Win 2008, Win 7, Win 8 / 8.1, Win 10, Win 2012 / R2, Win 2016, Win 2019
Linux Kernel 2.4.x / 2.6.x / 3.x and LibC6, X86 oder X64 Prozessoren
Mac OS X 10.4.x, X86 oder Power-PC Prozessoren
Solaris 10, Sparc 64-bit oder X86 Prozessoren
Bitte beachten Sie, daß dieser Vertrag nicht die bei Ihnen bereits vorhandene Software, wie z.B.
Betriebssystem, Drucker- oder sonstige Treiber oder Anwendungsprogramme umfaßt oder darauf
anwendbar ist.
In unseren Allgemeinen Nutzungsbedingungen gelten für die folgende Begriffe die hier genannten
Definitionen:
Produkt: Das bzw. die Programme und/oder die Software, die von der IDEAL Software GmbH
entwickelt wurde und an der Ihnen ein Nutzungsrecht eingeräumt wird.
SDK-Lizenz: (Software Development Kit) Lizenz für das Produkt, die ausschließlich für die
Runtime-Lizenz: Nutzungsrecht zur Installation, zum Aufruf und zum Betrieb des Produkts auf dem
Datenverarbeitungssystem des Kunden eines Entwicklers (Endnutzerlizenz). Zu
Einzelheiten siehe unten bei "Integration".
Die folgenden Regelungen betreffen die Punkte, in welchem Umfang IDEAL Software Ihnen Rechte
einräumt, was mit der Software getan werden darf und was nicht, wie bei Problemen zu verfahren ist sowie
einige allgemeine Fragen.
Das Urheberrecht an den Produkten der IDEAL Software (einschließlich der Computer Software,
assoziierter Speichermedien, gedruckter Materialien und "online" oder elektronischer Dokumentation) steht
ausschließlich der IDEAL Software zu. Die Produkte genießen den Schutz des Urheberrechtsgesetzes und
des Internationalen Urheberrechtsabkommens. Daher sind Sie verpflichtet, dieses Produkt wie jedes
andere urheberrechtsgeschützte Werk/Material zu behandeln. Die Produkte werden lizenziert, nicht
verkauft.
2.1 IDEAL Software überträgt Ihnen ein einfaches, räumlich und zeitlich nicht beschränktes
unübertragbares Nutzungsrecht an der von Ihnen erworbenen Software zum Zwecke der Nutzung
durch eine Person (Nutzer/Entwickler). Die Übergabe verschiedener Speichermedien
(beispielsweise 3,5" Disketten, CD-ROM oder DVD) begründet keine Erlaubnis für eine
Mehrfachnutzung der Software.
Das einfache Nutzungsrecht berechtigt nur zur Nutzung durch eine Person (Nutzer/Entwickler);
dies gilt auch dann, wenn das Nutzungsrecht durch eine Gesellschaft oder durch eine sonstige
Personenmehrheit erworben wird. Wenn Sie das Produkt unmittelbar oder mittelbar durch mehrere
Personen (Nutzer/Entwickler) nutzen wollen, so müssen Sie für jeden Nutzer eine Lizenz
erwerben. Hierfür bietet die IDEAL Software GmbH die vergünstigte Site-Lizenz an.
Wenn der Computer, auf dem das Produkt installiert wurde, defekt wird oder aus sonstigen
Gründen nicht mehr benutzt und durch einen anderen ersetzt wird, sind Sie berechtigt, das
Produkt auf dem ersten Computer zu deinstallieren bzw. zu löschen und auf dem neuen Computer
zu installieren.
> Eine mittelbare Nutzung des Produkts liegt dann vor, wenn ein Entwickler Anweisungen
gleich welcher Art verfasst (z.B. programmiert, schreibt, oder durch eine graphische
Oberfläche eingibt), die am Ende der Verarbeitungskette in Aufrufe des Produkts münden.
Beispiele hierfür sind: Die lizenzierte Software wird in eine Zwischenschicht (z.B.
Bibliothek, Klassenbibliothek, Komponente, Control, ausführbares Programm, o.ä.)
integriert, und ein Entwickler nutzt diese Zwischenschicht und die Nutzung mündet am
Ende der Verarbeitungskette in Aufrufe der lizenzierten Software. Dazu zählt u.a. auch das
Verfassen von Steuerdateien, die von einer separaten Anwendung ausgewertet oder
interpretiert werden.
Bitte beachten Sie, daß zum Betrieb einer SDK-Version auf einem Entwickler-Server, dh. für die
Nutzung des Produkts in Ihrem Netzwerk, stets der Erwerb einer SDK Lizenz je Nutzer erforderlich
ist. Dies gilt dann nicht, wenn Sie sich für den Erwerb einer SDK-Site-Lizenz entschieden haben.
Die SDK-Site-Lizenz berechtigt Sie dazu, das Produkt in einer unbegrenzten Zahl von
Installationen und Nutzern an einer räumlich bzw. postalisch definierten Adresse zu nutzen.
2.2 Wenn Sie mit dem Erwerb einer Nutzungslizenz für ein Produkt von IDEAL Software einen
Lizenzschlüssel erhalten haben, so bewahren Sie diesen bitte gut auf.
Der Lizenzschlüssel schaltet das Produkt zur Nutzung frei. Die Übermittlung des Lizenzschlüssels
an IDEAL Software ist darüber hinaus Voraussetzung dafür, ein möglicherweise vergünstigtes
Angebot für ein Upgrade oder Update des Produktes erwerben zu können. Sie allein sind für den
Lizenzschlüssel verantwortlich. Im Falle eines Verlustes des Lizenzschlüssels oder der
Installations-Software („Setup“) des Produktes ist IDEAL Software nicht zum Ersatz verpflichtet.
Die von IDEAL Software übermittelten Lizenzschlüssel sind streng vertraulich zu behandeln und
dürfen nicht an Dritte weitergegeben werden. Wird gegen dieses Verbot verstoßen, so wird für
jeden Fall der Zuwiderhandlung eine Vertragsstrafe von EUR 10.000,- fällig. Das Recht der IDEAL
Software zur Geltendmachung von Schadensersatz bleibt unberührt.
Bei der Installation des Produktes wird zur Verifizierung automatisch eine
Lizensierungsbestätigung generiert und an IDEAL Software versandt. Die
Lizensierungsbestätigung enthält ausschliesslich eine Seriennummer und eine Hardware-ID,
jedoch keine personenbezogenen Daten und wird nicht an andere Stellen weitergegeben. Mit
Anerkennung dieser Allgemeinen Nutzungsbedingungen erklären Sie jedoch vorsorglich Ihr
Einverständnis mit der Erhebung und Speicherung dieser Lizensierungsbestätigung im Sinne des
§ 4a Abs. 1 Bundesdatenschutzgesetz.
Betreibt IDEAL Software ein Webportal, sind Sie dafür verantwortlich, die im Webportal
hinterlegten e-Mail Adressen und Zugangspaßwörter ständig aktualisiert zu halten. Wenn ein
Zugangsberechtigter aus Ihrem Unternehmen ausscheidet und mit seinen Zugangsdaten
vergünstigte Produkte bezieht, wird dieses Verhalten Ihnen als Vertragspartner der IDEAL
Software zugerechnet, dh. Sie verlieren Ihrerseits das Recht auf den (nochmaligen) Bezug der
vergünstigten Produkte.
Wenn zwischen Ihnen und IDEAL Software nicht ausdrücklich und schriftlich etwas anderes vereinbart
wurde, sind Sie nicht berechtigt, die Software zu ändern, bearbeiten, zu übersetzen, zu vermieten,
unterzulizensieren, im Timeshare-Verfahren zu nutzen oder elektronisch zu übertragen oder zu
empfangen; dies gilt entsprechend für die Speichermedien und für die Dokumentation.
4.1 Ausgenommen von der obigen Beschränkung betreffend die Unterlizensierung (Ziff. 3) sind
folgende Dateien, für die Sie mit Kauf dieses Software-Pakets das Recht erworben haben, diese
eingebettet in Ihre Produkte an Dritte weiterzugeben. Diese Erlaubnis zur Weitergabe beinhaltet
ausschließlich die Erlaubnis zur Nutzung der genannten Dateien integriert in Ihre
Produkte/Anwendungen. Abhängig von der erteilten Lizenz und Plattform-Unterstützung sind
folgende Dateien für die Weitergabe an Ihre Kunden vorgesehen:
Windows Betriebssysteme:
vpe<?>3272.dll
vJavaScript3272.dll
IDEALSoftware.Vpe<*>.dll und IDEALSoftware.VpeWeb<*>.dll
vpejni<?>3272.dll und vpejnigui<?>3272.dll
VpeCtrl72.ocx
VPE View Setup.exe
Mac OS X:
libvpe<?>.dylib.7.20.0 / LicenseTool
Andere Betriebssysteme:
libvpe<?>.so.7.20.0 / LicenseTool
Wobei das ? abhängig von der Edition durch folgenden Buchstaben zu ersetzen ist:
und der * abhängig von der Edition durch folgendes Wort zu ersetzen ist:
Der Begriff "Weitergabe" bedeutet: das Zurverfügungstellen einer oder mehrerer der o.g. Dateien
an Dritte und/oder das Aufrufen dieser Dateien. Diese Dateien können frei von Laufzeitlizenzen in
unbegrenzter Stückzahl verteilt werden.
4.2 Sofern Sie eine Lizenz des VPE SDK Enterprise Edition erworben haben, darf dycodoc Enterprise
Edition in unbegrenzter Zahl und frei von Laufzeitlizenzen weitergegeben werden. Sofern Sie eine
Lizenz des VPE SDK Interactive Edition erworben haben, darf dycodoc Interactive Edition in
unbegrenzter Zahl und frei von Laufzeitlizenzen weitergegeben werden.
4.3 Diese Lizenz gibt Ihnen das Recht, das Produkt der IDEAL Software (in Form der vorgenannten
Dateien - abhängig von der erteilten Lizenz) in Ihre Anwendungen zu integrieren und an Dritte in
dieser Form weiterzugeben. Aber diese Dritten haben kein Recht, diese Dateien an wieder andere
Dritte weiterzugeben (Sublizenzierung), gleich in welcher Form. Wenn Sie solche Bedürfnisse
haben, so wenden Sie sich bitte direkt an IDEAL Software. Sie dürfen die verteilbaren Dateien in
keiner Weise modifizieren.
4.4 Für die Plattformen Solaris / OpenSolaris, AS/400, AIX: Zur Verwendung der Runtime-Lizenzen
auf Servern sind gesonderte Serverlizenzen je Server zu erwerben. Die Nutzung in Form der
Ausführung mindestens einer der o.g. Dateien im Speicher eines Servers ist ohne Serverlizenz -
unabhängig von der Anzahl der Nutzer - nicht gestattet. Sollten Sie sich für den Erwerb einer
Server Gold Lizenz entschieden haben, so gilt die in Satz 1 genannte Einschränkung nicht. Mit
Erwerb der Server Gold Lizenz sind Sie berechtigt, die in Ziff. 4.1 aufgeführten, zur Weitergabe
bestimmten Dateien an Ihre Kunden auch zur Nutzung auf beliebigen Servern weiterzugeben. Die
aktuellen Preise für Serverlizenzen finden Sie auf der Website von IDEAL Software unter
www.IdealSoftware.com.
4.5 VPE View Setup.exe darf in unbegrenzter Zahl und frei von Laufzeitlizenzen weitergegeben
werden.
4.6 IDEAL Software schließt im Falle der Weitergabe von Dateien jede Gewährleistung gegenüber
Dritten aus. Sie alleine sind gegenüber jedem Empfänger Ihrer Programme verantwortlich für
5. Updates / Upgrades
Soweit Sie ein Update oder Upgrade einer Software erworben haben oder erwerben, stellt dieses eine
untrennbare Einheit mit der ursprünglichen Software von IDEAL Software GmbH dar. Ein Update oder
Upgrade und die Ursprungssoftware dürfen nicht ohne schriftliche Erlaubnis von IDEAL Software auf mehr
als einem Computer zur gleichen Zeit genutzt werden.
6. Urheberbenennung / Copyrightvermerk
Wenn Sie die Software von IDEAL Software benutzen, muß Ihre Software in jedem Fall einen
Copyright-Vermerk tragen. Wenn Sie den Info-Button oder die Toolbar unsichtbar machen, oder ohne
Preview arbeiten, erklären Sie sich damit einverstanden, einen Copyright-Vermerk wie: "Virtual Print
Engine Copyright © IDEAL Software®" in Ihren "About" Dialog oder der Hilfedatei (Helpfile) oder - wenn
beides nicht vorhanden - in Ihrer Dokumentation einzufügen.
7. Integration
Das Produkt der IDEAL Software ist zur Integration in Ihre Software konzipiert. Ihre Software muß einen
signifikant abweichenden Einsatzzweck von derjenigen von IDEAL Software haben, d.h. sie darf kein
konkurrierendes Produkt darstellen, das unserem gleich oder ähnlich ist. Das Produkt darf nur zum
Drucken und zur Darstellung von Previews benutzt werden. Es dürfen nur applikationsspezifische Daten
mit dem Produkt verarbeitet werden, die unmittelbar mit Ihrer Applikation assoziiert sind, d.h. es darf keine
Universalschnittstelle zu unserem Produkt geben, mit deren Hilfe Ihre Applikation oder dessen
Endbenutzer beliebige Datenquellen (z.B. ODBC) verarbeiten können.
> Beispiele für Anwendungen, in die das Produkt nicht integriert werden darf: Report-Generatoren,
Barcode Druck Anwendungen, Grafik-Präsentations-Software, Datenbank-Engines, Universelle
Print-Server und jegliche Kombinationen dieser Produktkategorien, etc..
Das Produkt darf nicht in Programmen oder Bibliotheken verwendet werden die der Entwicklung von
Programmen dienen, sofern Endbenutzer dadurch den Inhalt oder das Layout der erstellten Dokumente
steuern können.
Wenn Sie eine Software der vorgenannten Art erstellen möchten, benötigen Sie eine Spezial-Lizenz.
Setzen Sie sich hierfür bitte mit IDEAL Software in Verbindung.
Ansonsten dürfen Ihre Anwendungen mit dem Produkt Reports generieren, Barcodes drucken und
(grafische) Präsentationen erstellen.
1.1 IDEAL Software leistet für ein Jahr nach Übergabe der Software – mit Ausnahme der VPE
Community Edition (siehe hierzu 1.4) – Gewähr dafür, daß die Speichermedien und die
Dokumentation frei von Material- und Verarbeitungsfehlern sind, und daß die Software im
wesentlichen gemäß der begleitenden Dokumentation arbeitet. Sofern Sie als Kunde Verbraucher
im Sinne des § 13 BGB sind, gilt eine Gewährleistungsfrist von zwei Jahren.
IDEAL Software übernimmt jedoch keine Gewähr für die "Fehlerfreiheit" der Software oder der
Dokumentation und steht auch nicht für das Erreichen Ihrer Standards oder für die Befriedigung
Ihrer Bedürfnisse ein. Ein die Gewährleistung begründender Mangel ist nur ein solcher, der die
1.2 Die Gewährleistung besteht nach Wahl von IDEAL Software entweder
(b) in der Fehlerbeseitigung oder dem Ersatz der Software, die mangelhaft ist und zusammen
mit einer Kopie Ihrer Quittung an IDEAL Software zurückgegeben wird (Nacherfüllung);
sollte diese Nacherfüllung fehlschlagen, so haben Sie das Recht, den Preis zu mindern
oder die Rückabwicklung zu verlangen.
1.3 IDEAL Software leistet keine Gewähr, wenn der Fehler bzw. Ausfall der Software auf eine
fehlerhafte Anwendung, auf Mißbrauch oder auf einen Unfall zurückzuführen ist. Für eine
Ersatz-Software leistet IDEAL Software nur für den Rest der ursprünglichen Gewährleistungsfrist
oder für 30 Tage Gewähr, wobei der längere Zeitraum maßgebend ist.
1.4 Bitte beachten Sie, daß die vorstehenden Regelungen zur Gewährleistung nicht für die kostenfrei
zur Verfügung gestellte VPE Community Edition gelten. Für Mängel der Community Edition leistet
IDEAL Software keinerlei Gewähr.
Tritt ein Mangel an der Software auf, so müssen Sie diesen unverzüglich schriftlich und unter Angabe Ihres
Lizenzschlüssels der IDEAL Software anzeigen. Zeigen Sie den Mangel nicht unverzüglich an, so verlieren
Sie den Anspruch auf Gewährleistung. Die Mängelanzeige soll zusammen mit einer Beschreibung des
Fehlers bzw. der Fehlfunktion an IDEAL Software geschickt werden.
Senden Sie das Produkt nicht ein, bevor Sie sich mit IDEAL Software in Verbindung gesetzt haben.
3.1 IDEAL Software schließt für sich jede weitere Gewährleistung und Haftung bezüglich der Software
und der Dokumentation aus, es sei denn, der Mangel/Schaden wurde von IDEAL Software
vorsätzlich oder grob fahrlässig verursacht. Im Falle einer Verletzung des Lebens, des Körpers
oder der Gesundheit haftet IDEAL Software jedoch für jede Fahrlässigkeit.
3.2 Weder IDEAL Software noch deren Lieferanten sind für Schäden (einschließlich solcher wegen
entgangenem Gewinn, Betriebsunterbrechung, Verlust von Informationen oder von Daten sowie
sonstiger Vermögensschäden) ersatzpflichtig, die aufgrund der Nutzung des von Ihnen
erworbenen Produktes oder der fehlenden Möglichkeit, dieses Produkt zu nutzen, entstehen. Für
Schäden, die bei normalem Verlauf nicht vorhersehbar sind, haftet die IDEAL Software nicht.
3.3 Die vorgenannte Gewährleistung ist dem Grunde nach abschließend. Dem Umfang nach ist sie auf
den Ersatz des fehlerhaften Speichermediums oder der fehlerhaften Dokumentation begrenzt. Der
Ersatz eines weitergehenden Schadens ist ausgeschlossen. Dies gilt insbesondere für
entgangenen Gewinn, für Datenverlust oder für fehlende Benutzbarkeit der Software sowie für
mittelbare oder Mangelfolgeschäden.
3.4 IDEAL Software haftet betragsmäßig nur bis zur Höhe des Listenpreises oder des tatsächlich
gezahlten Betrages, wobei jeweils der geringere Betrag maßgeblich ist.
3.5 IDEAL Software gibt eine Garantie, gleich welcher Art, nicht ab. Entgegenstehende Bedingungen
sind ungültig. Zusicherungen oder sonstige Erweiterungen der hier getroffenen
Gewährleistungsbestimmungen sind nur dann wirksam, wenn sie ausdrücklich und schriftlich erteilt
bzw. vereinbart werden.
3.6 Ansprüche gegen IDEAL Software auf Schadensersatz, Nacherfüllung, Minderung oder auf
Rücktritt vom Vertrag verjähren innerhalb von einem Jahr nach Übergabe bzw. nach Download.
Die Verjährung der Ansprüche gegen IDEAL Software wird nur durch ein ausdrückliches und
IDEAL Software behält sich das Recht vor, ensprechend der allgemeinen Entwicklung des Marktes und der
Technik die Allgemeinen Nutzungsbedingungen zu ändern oder anzupassen. Diese Bedingungen gelten
stets in der Fassung, die zum Zeitpunkt des Vertragsschlusses aktuell ist.
2. Schriftform
3. Rechtswahl
Für die gesamten Rechtsbeziehungen zwischen IDEAL Software und Ihnen gilt das Recht der
Bundesrepublik Deutschland. Mangels abweichender Regelung in diesen Erläuterungen behält sich IDEAL
Software alle weiteren Rechte ausdrücklich vor.
Sollten Sie Verbraucher im Sinne des § 13 BGB sein, möchten wir Sie auf folgendes hinweisen:
Grundsätzlich steht Ihnen bei sogenannten Fernabsatzgeschäften (Verträgen, die nicht bei gleichzeitiger
körperlicher Anwesenheit aller Vertragsparteien zustandekommen, sondern zB. über das Internet) ein
Widerrufsrecht gemäß § 312d BGB in Verbindung mit §§ 312b. und 312c. BGB zu. Das Widerrufsrecht
besteht jedoch gemäß § 312d Abs. 4 Nr. 2 BGB nicht für Software, sofern die mitgelieferten Datenträger
bzw. Lizenzschlüssel von dem Verbraucher entsiegelt worden sind. Da die IDEAL Software Ihnen keinen
Datenträger, sondern online sogar unmittelbar die Software und einen Lizenzschlüssel zur Verfügung stellt,
gilt diese Bestimmung auch für die von Ihnen erworbene Software. Nach Erhalt der Software / des
Lizenzschlüssels steht Ihnen also kein Widerrufsrecht zu.
5.1 Wenn Sie ein Produkt der IDEAL Software online erwerben möchten, kommt der Vertrag zwischen
Ihnen und IDEAL Software dadurch zustande, daß Sie (für eigene oder fremde Rechnung, zB. für
Ihr Unternehmen) den "Bestellen"-Button betätigen. Nach Zugang Ihrer Bestellung schickt Ihnen
IDEAL Software an die von Ihnen angegebene e-Mail Adresse eine Bestellungsbestätigung.
5.2 Nach Zustandekommen des Vertrages werden von IDEAL Software folgende Informationen
gespeichert:
Diese Informationen dienen ausschließlich internen Controllingzwecken der IDEAL Software und
stehen ihren Kunden grundsätzlich nicht zur Verfügung.
5.3 Bei einer Online-Bestellung steht Ihnen vor der endgültigen Bestellungsbestätigung eine
Korrekturmöglichkeit zur Verfügung. Der von Ihnen eingegebene Text wird vor verbindlicher
Bestellung wiedergegeben und Sie werden aufgefordert, ihn auf eventuelle Eingabefehler
durchzusehen und diese ggf. zu korrigieren.
Erfüllungsort und Gerichtsstand für alle sich aus dem Vertragsverhältnis unmittelbar oder mittelbar
ergebenden Streitigkeiten ist Neuss.
7. Salvatorische Klausel
Sollten einzelne oder mehrere Bestimmungen dieser "Allgemeinen Nutzungsbedingungen" unwirksam sein
oder werden oder eine Regelungslücke enthalten, so verpflichten sich die Vertragsparteien, in
Verhandlungen mit dem Ziel einzutreten, die unwirksame oder unvollständige Bestimmung durch eine
angemessene Individualabrede zu ersetzen oder zu ergänzen, die dem wirtschaftlichen Zweck der
gewollten Regelung weitestgehend entspricht. Die Gültigkeit der übrigen Bestimmungen bleibt davon
unberührt.
keep 70
O
keepn 70
Keyboard Accelerators 189 Objects Marked As Non-Printable 193
Known Problems 211 OLIVE 62
On-Disk Document Files 141
ORANGE 62
L
orderinf.html 1, 7
ldblquote 68 Overloading Mechanism 65
Leitcode Deutsche Post AG 100 Overview 14
li 70
libvpe<?> 7
P
LicenseTool 7
line 68 page 68
Line- and Page Breaks not 100% the same compared Page Margins 38
to the RTF Editor 66 pagebb 68
lquote 68 par 68
LTBLUE 62 Paragraph Properties 70
LTGRAY 62 pard 70
LTGREEN 62 Path- and File Names in Templates 169
LTLTBLUE 62 PDF Export Introduction 190
LTORANGE 62 PDF/A 191
LTRED 62 PDF417 108
LTYELLOW 62 PDFA 191
Pictures 48
M Pictures and VPE Document Files 140
plain 69
Macintosh 133 pntext 70
MAGENTA 62 Positioning On the Printer 131
Making a Decision, Which Type of Font to Use 137 Postnet - Postal Numeric Encoding Technique 95
Manual Creation of Complex Headers and Footers Predefined Color Constants 126
118 Preview 24
MaxiCode 107 Printer Control 128
Memory Streams 53, 139 Printer Setup 128
misaligned 132 Printer Troubleshooting 209
Modifying the VPE Document 170 Printing Exported HTML Documents 195
Printing From A Service Like IIS (Internet Some Notes About VPE and RTF 66
Information Server) 130 Sophisticated Device Control 130
Professional Edition 18 special escaped text char 68
ProgrammersManual.chm 1 Standards 143
ProgrammersManual.pdf 7 Summary 156
Progress 2 System Requirements 1
Providing the Data 145
PURPLE 62 T
PZN (Pharma Zentral Nummer) Code 102
tab 68
Telepen-A 93
Q
Template Object - TVPETemplate 148
qc 70 Template Page Object - TVPETemplatePage 148
qj 70 Template Processing Tutorial 151
ql 70 Template Structure 147
qr 70 The <page> of <total pages> technique 117
QR Code 106 The Basic Conception - Absolute Coordinates 33
The Demo VPEDEMO.EXE 20
The Focus 183
R
The GUI is themeable 27
r 68 The inheritance order is 30
Radiobutton 175 The Object-Oriented Style 29
rdblquote 68 The structure of the body: 60
ReadDoc 138 The Tab-Index 183
red 67 Tips 205
RED 62 Transparent Backgrounds 193
Redistribution of VPE View 203 True-Type / OpenType Fonts 135
Relaxed structure 61 tx 70
relnotes.html 1, 7
Remarks 55
U
Rendering Objects 42
Restrictions 192 UCC-128 77
RGB 193 UDO's and VPE Document Files 140
ri 70 ul 69
RM4SCC - Royal Mail 4 State Customer Code 96 ul0 69
Rotation of Text, Images and Barcodes 46 ulnone 69
rquote 68 Unicode 115
RTF - Rich Text Format 56 uninstal.exe 1
RTF Demo Source Code 65 uninstal.inf 1
RTF Properties processed by VPE 67 uninstall 7
Uninstalling VPE on Non-Windows Platforms 8
S UPC (Universal Product Code) 88
Using Alternative Dividers 112
sa 70 Using BLOB's or other Temporary Images / Memory
sb 70 Streams 53
SC 0 83 Using Events For Interaction 186
SC 1 83 Using FormFields 111
SC 2 83 Using Interactive Templates With VPE 177
SC 3 83 Using the Authenticity Key 172
SC 4 83 Using the PDF Export Module 192
SC 5 83 Using the VPE DLL / Shared Object 22
SC 6 83
SC 7 83
V
SC 8 83
SC 9 83 v 69
Scale and Offsets 193 Validating the Template Authenticity Key 171
Scale-to-Gray Technology 54 vb 2
Scaling 50 vb net 2
sect 68 VBOTTOM 34
Server Licenses 201 VBOTTOMMARGIN 39
Simulating Buttons, Listboxes and Comboboxes 189 VCHARSET_DEFAULT 133
sl 70 VCHARSET_ISO_ARABIC 133
so.7.20.0 7 VCHARSET_ISO_CYRILLIC 133
VCHARSET_ISO_GREEK 133 VpeSet 41
VCHARSET_ISO_HEBREW 133 vpeview.exe 1
VCHARSET_ISO_LATIN_1 133 VpeWeb*.dll 1
VCHARSET_ISO_LATIN_2 133 VRIGHT 34
VCHARSET_ISO_LATIN_3 133 VRIGHTMARGIN 39
VCHARSET_ISO_LATIN_4 133 VTOP 34
VCHARSET_ISO_LATIN_5 133 VTOPMARGIN 39
VCHARSET_ISO_LATIN_6 133
VCHARSET_ISO_LATIN_7 133 W
VCHARSET_ISO_LATIN_8 133
VCHARSET_ISO_LATIN_9 133 Watermarks 120
VCHARSET_ISO_THAI 133 When to use RTF and when to avoid it 66
VCHARSET_MAC_ROMAN 133 WHITE 62
VCHARSET_SYMBOL 133 widctlpar 70
VCHARSET_WIN_ANSI 133 Windows Installation 1
VCHARSET_WIN_ARABIC 133 WingDings 133
VCHARSET_WIN_BALTIC 133 WriteDoc 138
VCHARSET_WIN_CYRILLIC 133 WYSIWYG 131
VCHARSET_WIN_EAST_EUROPE 133
VCHARSET_WIN_GREEK 133 Y
VCHARSET_WIN_HEBREW 133
VCHARSET_WIN_THAI 133 YELLOW 62
VCHARSET_WIN_TURKISH 133
VCHARSET_WIN_VIETNAMESE 133 Z
VFF_ 111
VFF_FLAG_ALT_FIRST 112 ZLIB 229
VFF_FLAG_ALT_LAST 112 Zoom-Tool 24
VFF_FLAG_AUTO_FONTSIZE 112 z-order 120
VFF_FLAG_DIV_FIRST 112
VFF_FLAG_DIV_LAST 112
VFF_STYLE_1_1 111
VFF_STYLE_1_2 111
VFF_STYLE_1_3 111
VFF_STYLE_1_4 111
VFF_STYLE_2_3 111
VFF_STYLE_3_4 111
VFREE 34
Video Troubleshooting 210
VLEFT 34
VLEFTMARGIN 39
VPE Control (.NET / ActiveX / VCL) 9
VPE Control (Java) 10
VPE Control Reference.chm 1
VPE DLL on Windows 12
VPE DLL Reference.chm 1
VPE DLL Reference.pdf 7
VPE Document Files 138
VPE Document Files of Different Editions 139
VPE In Short (all Editions) 15
VPE knows the following objects: 29
VPE Object - TVPEObject 149
VPE Object Processing 157
VPE Shared Object / Dylib 13
VPE View: The Document Viewer 142
Vpe*.dll 1
vpe.jar 1
vpe<?>3272.dll 1
VpeCtrl72.dep 1
VpeCtrl72.ocx 1
VpeGet 41
vpegui.jar 1
vpejni<?>3272.dll 1
vpejnigui<?>3272.dll 1