/   Site Map  /   About Us  /  General Products  /  MV Products  /  Outsourcing   / Home page   /

Click to go to PixieWare home page

PixiePrint - PCL to Windows-Printer Translator

PixieWare Software develops the innovative PixiewareŽ software products for:

  • Building browser-based GUI interfaces to transform text-based applications
  • Extracting data intelligently from the Web (scraping) and from PICK db's
  • Building database driven Web sites with emphasis on dynamic interfaces
  • PixiePrint Print Solution (formerly PixiePCL)

    Takes printer output from legacy applications in either plain text or HP PCL format and translates it into the universal Windows GDI format for any printer setup on Windows. 

    November 2001: Barcode Support

    PixiePrint can now print popular barcode fonts with controls embedded in PCL output from Pick. Can position nominated barcode font anywhere on output document as well as specify its height and width. 

    New and Improved August 2001: Automatic configuration option.
    PixiePrint is usually configured by manually editing config file "PixiePCL.ini".  But now, if not configured, PixiePrint will offer to scan your system for printers and create a working subfolder for each one.  It will also write an appropriate "PixiePCL.ini" file for you.  You can then modify that later to make use of features like papersize, portrait, landscape, letterhead templates ..
    In subfolder "\test" you will find sample print jobs "invoiceplain.txt" and "invoicePCL.txt".  Copy them into your working subfolders to give a quick start to seeing PixiePrint in action.

    New and Improved November 2000: Scripting
    We are now making use of the new Windows Scripting facilities to make our universal "PPrinter" object programmable in VBSCRIPT.  Your script can be embedded in PCL output, or act as an alternative to PCL, or be placed in a separate "Template" file.  Details in the last section of this document.

    How it works:
    PICK etc prints to a "print to file" printer setup on the print server.  Or you can output your print job by other write-to-file means eg the PICK "Super-Q-Pointer" or the UNIVERSE "Type 1 File".
    PixiePrint reads this file, uses the VB Printer Object to translate it, and prints it to any printer.

    More than one printer can be set up.  Each printer usually needs a mirroring "Print-to-file" mock printer set up as well.  The "Port" is entered as a file name, and PixiePrint will print to different printers depending on which of its "drop box" folders you write your print job into.

    How to set it up:
    PixiePrint can be supplied on 2 floppies or a variety of other media.

    1. Run setup.exe (eg from floppy 1)
    2. On the first interactive screen, look at what folder PixiePrint is to be installed into. 
      You may want to change the default of  C:\Program Files\PixiePCL

    Once setup is complete, decide where the temp print files are to be placed.  This is usually as sub-folders from the folder holding PixiePCL.exe but you can choose to keep them separate.  We ourselves like to work from a folder named "C:\d3Shared\Printers" because we already have a convention of using "C:\d3Shared" as a home base for a variety of PICK D3-to-windows interfacing tasks.
    If you want to use a separate working area, define it with a "Path" line in "PixiePCL.ini"
    eg, for our convention,
    Path=C:\d3Shared\Printers

    Then create your sub-folders.  We suggest short names of the target printers eg "Brother", "Epson 850"

    Go to Windows Settings --> Printers and create new Printers to mirror each of the real printers you want to use.  We suggest names for them like "PCL to Brother", "PCL to Epson".  Select the "Generic/Text" driver and for "Port", create a new Port and give it the temp file name:

    Examples for default setup:
    C:\Program Files\PixiePCL\Brother\spool.txt
    C:\Program Files\PixiePCL\Epson 850\spool.txt

    Examples with customised path
    C:\d3Shared\Printers\Brother\spool.txt
    C:\d3Shared\Printers\Epson 850\spool.txt

    These temp file names MUST end with the ".txt" extension

    Navigate to the folder containing PixiePCL.exe and look for PixiePCL.ini
    Double-click on it to edit it: eg

    Path=C:\d3Shared\Printers
    Folder1=Brother*Brother 600
    Folder2=Epson*Epson 850 COLOR

    The path is that of the root folder for the printer temp files.

    Folder1, Folder2 etc are in the form <foldername>*<printer name>
    with <printername> being the final printer as named under its icon in Windows, Settings, Printers.
    BUT Note that on Windows 2000, printer names often need to take the network pathname form.
    eg a printer listed as "report on ofps1" needs to be written in your .ini file as "\\ofps1\report".
    The latest version of PixiePrint has a "My Printers" button.  Click that to get a list of available
    printers in the correct wording and format for ini setup use.

    Other options eg "switch off shading" are documented in the comments within the .ini file



    Then ... getting your Server/App to point its output to PixiePrint ..

    In non-PICK systems
    The app or system must print to a Windows mock printer object as described above.  If that is not possible, you may as an alternative be able to get the app to write its printer output directly into a file eg "spool.txt" for PixiePrint to pick up.

    In the PICK Systems
    You need to redefine your printers "f0", "f1" etc to point to the new mirroring ones you have just created.

    eg for us, using a "user-coldstart" item in "dm,md,"

        user-coldstart
    001 n
    002 set-date-eur
    003 dev-make -t NTprinter -n 30 -a "PCL to Brother"
    004 startptr 0,0,0,s30 (s
    005 dev-make -t NTprinter -n 31 -a "PCL to Epson"
    006 startptr 1,1,0,s31 (s

    where the printer name at the end of a dev-make line must match the Windows Printer Name eg as found as the label for its icon in "Settings, Printers"

    The easiest way to activate what you have typed is to stop PICK and re-start it.
    Alternatively, to manually implement your new printer setup "on-the-fly" you need to de-activate the previous settings then manually enter the new ones as you have typed them in. 
    For the above example you would enter:

    dev-remov 30
    sp-kill 0 (d
    dev-remov 31
    sp-kill 1 (d

    ... followed by manually entering the lines you have changed in  user-coldstart

    Refer to PICK "dev-make" and "startptr" for more details.

    Other Approaches
    From PixiePrint's point-of-view, what is required is a an accessible file.  That does not need to come from a printing process and it may be easier in some environments (eg mixed Linux and Windows networks) to adapt your PICK or any other legacy code to write intended printer output directly to a file rather than trying to send it to a printer.  With the PICK engines, this could mean use of "Super-Q-Pointers" or "DOS Services Gateway".


    Take care with names and spelling: For each printer, there are names in 5 places that need to cross-reference correctly: check through them!

    1. In PICK eg "dm,md, user-coldstart"
    2. Folder names
    3. INI file, "PixiePCL.ini"
    4. Settings, Printers: names of "write to file" printers and their files-as-ports
    5. Settings, Printers: names of "real" printers.

    New and Improved, November 2000: Scripting
    The challenge that led to this: customers wanting to print pictures from available files of eg company logos.
    We were thinking about scripting anyway, because PixiePrint translates PCL to methods of the 'Visual Basic Printer Object' and we thought it would be a good idea to make this object more directly accessible to our users as a versatile alternative to PCL.  Instead of the cryptic code of PCL, the VB Printer Object offers human readable commands like "Font", "Line", "PaintPicture" and "Circle".  Compared to PCL, VB Printer Object is easier to read, debug, and therefore largely self-explanatory and self-documenting.  The code is more verbose and takes up more bytes, but hey, disks are bigger this century!

    Features and points of our implementation

    VBSCRIPT - notes

    PPrinter: details of the scripting methods (in order of expected usefulness)

    Call PPaintPicture( picturefile [, x, y, width, height ] )
    Part Description
    PictureFile Required. String. The source of the graphic to be drawn onto the page. Can be a full path eg "C:\d3Shared\Printers\images\pixie.gif" or relative eg "images\pixie.gif"
    x, y Optional. Single-precision values indicating the destination coordinates (x-axis and y-axis) in millimetres (mm) on the page for the picture to be drawn. If omitted the current page position is used.  Note this is a major difference from the original Microsoft PaintPicture behaviour.
    Width Optional. Single-precision value indicating the destination width in millimetres of picture. If the destination width is larger or smaller than the source width,  the picture is stretched or compressed to fit. If omitted, the source width is used.
    Height Optional. Single-precision value indicating the destination height in millimetres of picture. If the destination height is larger or smaller than the source height, the picture is stretched or compressed to fit. If omitted, the source height is used.

    Call PPrint( text_to_print, newline)

    Part Description
    text_to_print Required. String.
    newline Optional. Boolean True/False value indicating whether to re-position to a new line after printing.  Default is True

    CCurrentX
    CCurrentY

    Single precision (floating point number) properties getting or setting (x,y) position in millimeters. eg:
    CCurrentX = CCurrentX + 25.4  'this moves us 1 inch to the right

    CCurrentX = 40
    CCurrentY = 150
    Call PPrint("The quick brown fox.", False)

    FFontName
    String property eg
    FFontName = "Times New Roman"
    FFontBold = "Comic Sans MS"

    FFontSize
    Single precision (decimal number) properties getting or setting font.size in points.  Decimal fractions are permitted but they may be rounded off by Windows to the nearest standard font size.
    FFontSize = 8.5
    FFontSize = 14
    FFontSize = FFontSize * 2  'Make it bigger

    FFontBold
    Boolean property eg
    FFontBold = True
    FFontBold = False

    FFontItalic
    Boolean property eg
    FFontItalic = True
    FFontItalic = False

    FFontUnderline
    Boolean property eg

    FFontUnderline = True
    FFontUnderline = False

    NNewpage
    Method keyword with no arguments.  Starts a new page.

    DDrawWidth
    Integer property, gives width of borders and lines produced by LLine and CCircle.  Unit is the pixel, which can be unpredictable with printer drivers, but usually looks like what you would get with a sharp pencil, ie 0.1 mm. 
    PixiePrint sets this to a default of 1, because it can add its thickness to shapes causing unexpected effects like messing up bar codes.  So if you change it for your script graphics, you should assign it to 1 again afterwards..  eg:
    DDrawWidth = 10
    Call CCircle(100, 150, 30)
    DDrawWidth = 1

    Call LLine(x1, y1, x2, y2 [, color, box_specs] )
    Part Description
    x1, y1, x2, y2 Required. Single-precision co-ordinate values for the start and end of the line. If box_specs are given, these will give diagonally opposite corners of the resulting rectangular box.
    color Optional. Long integer value indicating the color. Default is the current "FForeColor". You can use the RGB function to assign this.
    box_specs Optional. String. Default value is "", zero-length string indicating an ordinary line.  There are only 2 possible box specs, "B" for an empty box, and "BF" for a box filled in with the FForeColor

     

    Call CCircle(x, y, radius [, color ] )
    Part Description
    x, y Required. Single-precision co-ordinate values for the centre, in mm.
    radius Required. Single-precision radius length in mm.
    color Optional. Long integer value indicating the color. Default is the current "FForeColor". You can use the RGB function to assign this.

    FForeColor
    Long integer color property, the main drawing and text color of the page. eg:
    FForeColor = RGB(0, 160, 0)  'To print green text and graphics

    FFillColor
    Long integer color property. When used, fills in enclosed boxes and circles.  Normally scripted by assigning it just before a LLine or CCircle statement.  PreRequisite: the FFillStyle property - see next, must be assigned to something other than zero for FFillColor to have any effect.  Default FFillColor is 0 = black. eg
    ' to draw a circle filled with a blue diagonal cross-hatching pattern
    FFillStyle = 7
    FFillColor = RGB(0, 0, 255)
    Call CCircle(40, 200, 20)

    FFillStyle
    Integer codes for patterns which can be used for filling in boxes and circles.  Normally scripted by assigning it just before a LLine or CCircle statement. 

    Setting Description
    0 Solid
    1 (Default) Transparent
    2 Horizontal Line
    3 Vertical Line
    4 Upward Diagonal
    5 Downward Diagonal
    6 Cross
    7 Diagonal Cross

    Remarks

    When FillStyle is set to 1 (Transparent), the FillColor property is ignored

    Email: sales@pixieware.com