@BANNER = Ventura Publisher<190> @APP NOTE = Application Note #7 @NAME = Subjects: Database Publishing Lotus 1-2-3 dBase III Database publishing is the process of extracting information from a database or spreadsheet and automatically formatting it into a typeset document. Database publishing represents the largest single category of typeset documents. These documents include: @BULLET 1 = Directory listings (e.g., phone books, membership directories, etc.) @BULLET 1 = Tables (e.g., census, almanac, government statistics, etc.) @BULLET 1 = Catalogs @BULLET 1 = Parts lists @BULLET 1 = Financial statements All of these documents are typeset, and all currently require extensive labor to produce because of the number of steps involved and lack of automation in the page layout process. One of Ventura Publisher's greatest strengths is that decisions on where text and pictures should be placed is made by the software rather than by the operator. Features like widow and orphan control, keep this paragraph with the next paragraph, break controls, shift text in from left/right margins, and in/out alignment, anchored frames, automatic headers & footers, ruling lines attached to text <197> to name a few <197> automatically place the text and pictures in the correct locations without the operator needing to create the document by hand. The document in many cases can be completely formatted through codes placed in the text. When using a database or spreadsheet, these codes can be generated directly by the database program or spreadsheet macro. The purpose of this application note is to describe techniques that you can use to produce the kinds of documents mentioned above when using dBase III Plus <197> the most common database <197> and Lotus 1-2-3, the leading spreadsheet. @HEAD 1 = Steps<197> Summary Most database publishing consists of the following steps: @BULLET 1 = Enter information into a database or spreadsheet. @BULLET 1 = Create a Ventura Publisher style sheet which translates the tags into both format and placement information. @BULLET 1 = Create a Ventura Publisher chapter to act as a template for the database text. @BULLET 1 = Write a database program, spreadsheet macro, or custom code to extract the desired records, add Ventura Publisher tags and formatting codes, create an ASCII text file, and place this text file into a Ventura Publisher chapter file. Once these steps have been performed you can publish the database automatically at any time. Simply run the database program or spreadsheet macro, run Ventura Publisher, and print the document. You don't need to do anything within Ventura Publisher once this is set up. @HEAD 2 = Style sheet: The key to it all The key to making database publishing simple is to create a style sheet which contains tags that will format the text automatically. If these tags are created correctly, you need to write very little database or spreadsheet code in order to completely automate the creation of your documents. The most important options in Ventura Publisher which make this automation possible are: @BULLET 1 = Paragraph Alignment @BULLET 1 = Paragraph Spacing @BULLET 1 = Paragraph Breaks @BULLET 1 = Paragraph Tab Settings As you design each tag, you use the Alignment, Spacing, and Breaks options to place text vertically and horizontally with respect to the surrounding paragraphs and margins. Use the Tab Settings option to add leaders to the text, even when tab characters have not been inserted. With simple database publishing, once the style sheet is designed, most of the work has been done. @HEAD 2 = Three style sheet strategies The way in which you design the style sheet depends on what strategy you plan to use to format the database or spreadsheet information. While you can probably think of lots of ways to use Ventura Publisher's capabilities to automatically format text, this application note covers three general strategies: 1.<~>Put each field in a separate paragraph and then use the Paragraph menu's Break, Spacing, and Alignment options to position each paragraph horizontally and vertically on the page. 2.<~>Put all fields in one paragraph, but separate them with tab characters. 3.<~>Separate each field with a comma followed by a space in order to automatically generate a table which can be read by Ventura Publisher's Professional Extension. The first technique has the following advantages: @BULLET 1 = Lets you easily change the design of your document without changing your database program. @BULLET 1 = Lets you create fields which are more than one line long. @BULLET 1 = Lets you automatically extract fields into a header or footer (useful for directory headings). @BULLET 1 = Lets you insert footnote information, which Ventura Publisher will then extract and place on the correct page. @BULLET 1 = Lets you automatically generate numbers and special effects such as bullets or first big character. The disadvantages to this technique are: @BULLET 1 = It results in a lot of paragraphs. This slows the loading of each chapter since Ventura Publisher takes a fixed amount of time to load each paragraph, even if it is only one character long. Also, Ventura Publisher can only handle a maximum of 64,000 paragraphs per chapter, even with the Professional Extension. @BULLET 1 = The text is not easily understood or used by another program. By contrast, when you use the second strategy (tabs between fields), the text is easily read and edited with any word processor. The second technique has the following advantages: @BULLET 1 = It is easy to understand because it is exactly the way you would extract text for use in a word processor. @BULLET 1 = It results in fewer paragraphs, especially if you put line breaks between most records instead of a carriage<196>return<197>line<196>feed combination (i.e., a new paragraph). This in turn lets you create truly monstrous chapters. The disadvantages of this strategy include: @BULLET 1 = Without the Professional Extension, you can easily exceed the number of line elements per frame (see Appendix J in your Reference Guide for an explanation), because each tab consumes two line elements. @BULLET 1 = Each record must be only one line. The final approach provides by far the most flexibility and is the best general approach if you own the Professional Extension. With the tables feature you get almost all the advantages of either of the first two approaches plus: @BULLET 1 = You can easily put pictures into a cell in the table. @BULLET 1 = You can easily rotate text within a cell. @BULLET 1 = The table ruling lines can easily be controlled @BULLET 1 = Tints can be easily placed within any cell in the table. Although the Professional Extension tables provides the best all around approach, it does suffer from a few disadvantages: @BULLET 1 = You must convert comma spaces within fields to comma comma space. Otherwise a comma followed by a space within the field of the database will cause Ventura Publisher to recognize the information following the comma space as a new field. @BULLET 1 = Cannot extract headers or insert footnotes into a table. @BULLET 1 = Requires custom code and in general more work to set up than the first two approaches. @HEAD 1 = Chapter template The examples which follow illustrate how to generate a single document from your database. However, suppose you want to generate another identical document, but with different data? For instance, each month you might need to create a revised membership directory. Once you have created a chapter which contains appropriate formatting information, page number, headers, footers, etc., you don't want to spend time in Ventura Publisher each month recreating this information. Fortunately, with any of the approaches outlined in the application note, you never need to recreate a chapter. All you do is to let your database or spreadsheet program write this month's text to the same file name as you used for last month's issue. When you open the old chapter, it still points to the same text file name, but this file now contains this month's information. Since Ventura Publisher generates headers, footers, page number, section numbering, etc. at the time that it loads the chapter, rather than saving it with the chapter file, all of these things are automatically updated to reflect the new database information. The number of pages will be increased or decreased as necessary to fit the latest version. To create and use a chapter template, follow these steps: @BULLET 1 = Create a text file using one of the techniques described in this application note. @BULLET 1 = Load this text file using the Load Text/Picture option (file menu). Place the text onto the page (rather than into a frame that you draw). @BULLET 1 = Use all the features in Ventura Publisher to create your document. @BULLET 1 = Save the chapter using the Save As option in the File menu. @BULLET 1 = Quit from Ventura Publisher. @BULLET 1 = At some later time when you want to create a new chapter using the updated information in your database, simply run your database program or spreadsheet macro again and save the resulting text into the same file name as before. @BULLET 1 = Run Ventura Publisher and Open the chapter that you saved before. @HEAD 1 = dBase III Examples Rather than describe the three strategies and the chapter template concept any further, this application note will provide a series of examples from which you can learn the necessary techniques. Each example is available on the diskette which accompanies this application note. For the database examples, simply copy all the files in the dBase directory on the diskette to the dBase subdirectory on your computer, run dBase, and then type DO EXAMP? where ? is replaced by the example number. Then quit from dBase, run Ventura Publisher, and load the corresponding chapter. For example, if you type DO EXAMP2 within dBase, then you would open the chapter called EXAMP2.CHP. @HEAD 2 = Directory List Probably the simplest type of publishing is the directory list. This list usually includes at least three fields from the database or spreadsheet: @BULLET 1 = Last name @BULLET 1 = First name @BULLET 1 = Phone number It may also include address and other information. By using a database's report generator, you can extract the information you want and simultaneously add Ventura Publisher tags. Ventura Publisher then takes this tagged text and automatically creates the phone list. Using the first strategy, each last name field is tagged as a separate paragraph, each first name field as another paragraph, and the phone number as a third paragraph. Each field is tagged with its own unique tag. The illustrations show the steps, along with how to accomplish the same thing with strategy two (tabs between fields. The following is a listing of the important information for each tag for strategy one. The important tag settings are highlighted. @Z_TBL_BEG = COLUMNS(3), DIMENSION(IN), COLWIDTHS(1.10,3.71,E1), ABOVE(.167), BELOW(.167), VJTOP(.167), VJBOT(.167), HGUTTER(.083), VGUTTER(.083), BOX(Z_DOUBLE), HGRID(Z_SINGLE), VGRID(Z_SINGLE), KEEP(OFF) @Z_TBL_HEAD = TABLE 2, TABLE 2, TABLE 2 Command<$!B11>, Use<$!B11>, Example<$!B11> @Z_TBL_BODY = TABLE 2, TABLE 2, TABLE 2 @@Z_TBL_BEG = , Place at the beginning of a table, @Z_TBL_BEG = COLUMNS( ), Defines the number of columns in the table, COLUMNS(4) DIMENSION( ), Defines the dimensions used for the parameters which follow. IN specifies inches; PT specifies points; CM specifies centimeters; PI specifies picas. You can locally override the global setting by placing these parameters directly after the parameter, DIMENSION(IN) COLWIDTHS(W1,, W2,, ... WN), Defines the width of each cell within the table. E specifies variable width., COLWIDTHS(.67,2.97,E1), WIDTH( ), Optional parameter. Width of column if Custom is specified., WIDTH(5.00) INDENT( ), Optional parameter. Indent from left column if custom width is less than current column width., INDENT(1.00) ABOVE( ), Optional parameter. Space above the table., ABOVE(.049) BELOW( ), Optional parameter. Space below the table., BELOW(.017) VJTOP( ), Optional parameter. Vertical justification above the table., VJTOP(.015) VJBOT( ), Optional parameter. Vertical justification below the table., VJBOT(.031) HGUTTER( ), Optional parameter. Space between columns., HGUTTER(.032) VGUTTER( ), Optional parameter. Space between rows., VGUTTER(.059) BOX( ), Optional parameter. Tag to be used for ruling lines around., BOX( Z_DOUBLE) HGRID( ), Optional parameter. Tag to be used for ruling lines between rows., HGRID(Z_SINGLE) VGRID( ), Optional parameter. Tag to be used for ruling lines between columns., VGRID(Z_SINGLE) KEEP( ), Breaks are allowed (OFF) or not allowed (ON)., KEEP(OFF) RULE(Tag Name,, Cell Range), Optional parameter(s). Defines ruling line override for any range in the cell. List all ruling line overrides at the beginning of table in one paragraph separated by commas., RULE(Z_HIDDEN,R9C2..R9C3) @@Z_TBL_HEAD = tag1,, tag2,, ...,, tagn, Defines the tags for each column in the header row, @Z_TBL_HEAD = TABLE TEXT,, TABLE 2,, TABLE 3,, TABLE 4 @@Z_TBL_BODY = tag1,, tag2,, ...,, tagn, Defines the tags for each column in a row. Use before first non-header row and before any row whose tags are different from preceding row. A tag for each column must be specified, @Z_TBL_BODY = TABLE TEXT,, TABLE TEXT,, TABLE TEXT,, TABLE TEXT C1,, C2,, C3,, C4, Data for each column in a row. Use a ^ character before the comma to indicate this cell is joined with the one above; + to indicate this cell is joined with cell to the right., 1,, 2,, 3,, 4 5,, 6,, ^,, 8 9,, 10,, 11,, +,, + <<$!Bnm>>, Set tint for cell. Tint appears at end of cell entry. n is color,, m is pattern., 1b,, 2b,, 3b,, 4b<<$!B26>> @@Z_TBL_END = , Indicates the end of the table., @Z_TBL_END = @Z_TBL_END = The beauty of Ventura Publisher's table feature is that from your database program or spreadsheet macro you can specify the number of columns using the COLUMNS parameter, and the width of each column using the COLWIDTHS parameter, and Ventura Publisher will do the rest, automatically adjusting the height of each row to accommodate the tallest cell. If you specify the @Z_TBL_HEAD tag followed by one or more rows of text, this text will be repeated at the top of each page onto which the table continues. For instance, if you wanted the headings NAME, AGE, and RANK to appear at the top of every page in a three column table, then the immediately following the KEEP or RULE parameter you would have two lines that look like this: @TAB 1 = @Z_TBL_HEAD = tag1, tag2, tag3 @TAB 1 = NAME, AGE, RANK These two lines are then followed by: @Z_TBL_BODY = tag1, tag2, tag3 which is then followed by the actual data in the table. @HEAD 2 = Separating fields The only real problem in extracting information from databases is that many of them provide very limited export facilities and most provide no search and replace capabilities. This latter feature is important because each field in a Ventura Publisher table is separated by a comma followed by a space. However, if data within a field contains a comma space, Ventura Publisher will interpret this as the end of one field and the beginning of another field. Obviously this won't work. Fortunately, if you place two commas followed by a space within a field, Ventura Publisher will interpret this as a single comma followed by a space, but no new field. If your database program allows search and replace, you can simply copy the database to a temporary database, search for every occurrence of comma-space and replace it with comma-comma-space, and export the resulting database. Unfortunately, dBase III Plus doesn't come very close to providing these capabilities and therefore some programming may be required. However, if your database contains no comma-spaces within any field, then you can simply extract fields using the label generator. You then create the file using the LABEL FORM command as in the previous example. Of course this doesn't put the table heading into the file. The simple way to do this is to create the table header in a separate file and the table end statement in another file and merely use the DOS COPY command to combine them altogether. Take a look at the example at the bottom of the page. This example also shows how to put frames within tables, which brings us to the next section <193> @HEAD 2 = Frames within tables Another frequent request is the ability to create documents which contain illustrations. Ideally these should be automatically placed at the correct location within your document. One way to do this is to have your database program place automatic frame anchors within a table. If these anchors are placed by themselves in a cell in the table, then any pictures which already exist within the chapter template and which have been previously assigned anchor names which match those placed into the text will automatically move to the correct location in the table. One way to easily generate lots of frame anchor names is to use the record number as part of the anchor name. For instance, dBase label code shown at the bottom of the page generates a series of anchor names starting with FR1, FR2, FR3 <193> etc. Of course to make this work, you must have frames in a chapter template which have matching anchor names, and which contain the pictures which you want to appear. How do you create the frames in the chapter template? The most straightforward way, although rather tedious, is to: @BULLET 1 = Start with a blank chapter @BULLET 1 = Immediately add a new page after the current page. @BULLET 1 = Go to this inserted page (i.e., page 2) and draw one frame @BULLET 1 = Copy this frame to the clipboard. @BULLET 1 = Repeatedly paste a copy of this frame by pressing the INS key. The frames can be all piled up on top of each other on the same page and Ventura Publisher will sort them all out when a text file containing the corresponding frame anchors is loaded. To add anchor names to the pasted frames, select the Anchors and Captions option in the Frame menu after each frame is pasted, and then assign an anchor name. (You can use the Ctrl X shortcut to immediately recall the Anchors and Captions dialog box.) @HEAD 2 = Edit chapter file You can also edit the chapter file to create the additional frames and automatically insert frame anchor names. This is a little tricky, but if you want to create a chapter which has hundreds or thousands of frames, you really don't have much choice. By the way, before you begin, keep in mind that a chapter file can be no bigger than 64K, and the limit of the number of files in a chapter is 128. Follow these steps to create a chapter which contains a large number of frames, each containing its own unique frame anchor name: @BULLET 1 = Run Ventura Publisher. @BULLET 1 = Insert a new page after the current page. @BULLET 1 = Draw a frame which is the desired size. @BULLET 1 = Load a file into the frame. @BULLET 1 = Apply all appropriate frame attributes (i.e., all the options in the Frame menu), including an anchor name. @BULLET 1 = Save the chapter. @BULLET 1 = Copy the frame to the clipboard. @BULLET 1 = Paste a copy of the frame back to the page. @BULLET 1 = Load a different file into this new frame. @BULLET 1 = Immediately select the Anchors & Captions option and assign an anchor name. @BULLET 1 = Save the chapter under a new name using the Save As option in the File menu. You now have two chapters which differ only by the addition of one frame. If you compare the two in your word processor, you will find that the only three differences are: @BULLET 1 = The file counter has been incremented (see the figure below). @BULLET 1 = The frame counter has been incremented. @BULLET 1 = Several lines have been added to the end of the chapter file. This added information describes the new frame. You can then load the second chapter file into your word processor (make sure you import and export it as an ASCII file). You then write a macro which duplicates the added portion as many times as necessary in order to create the number of frames in your chapter (or simply use the cut/copy/paste facilities in your word processor). You can then also write a macro to update the file frame anchor names so that each new frame has its own unique file and anchor names. Finally, when you are finished, update the frame and file counters so that they describe the total number of files and frames in this template chapter (the counter operates in HEX). To summarize: If you create text using the codes shown at the bottom of the previous page, and then load this text into the chapter template created using the method described above, you will end up with something that looks like this: <$&Anchor examp[-]> @HEAD 1 = Subtotal publishing So far you've seen how to use the three strategies (i.e., each field in a separate paragraph, each field separated by tabs, and each field in a different cell in a table) to create fairly simple documents. The main vehicle for extracting information from dBase III has been its label generator. You can also use the report generator to create documents which contain subtotals. This section shows how. Armed with this information, you should begin to see how you could publish a more complex document such as a catalog. Unfortunately the dBase report generator places a lot of extraneous heading information, carriage returns, and other characters into the output file. While you can write custom code to create any file you want, this takes time and doesn't execute as fast as a dBase program. However, if you use a search and replace utility, you can eliminate all of the extraneous information in the file after you have created it. For example, a utility called SNR is a shareware utility from Thomas A. Lundin, Graphics Unlimited Inc., 3000 2nd St. N., Minneapolis, MN 55411, (612) 588-7571. It lets you construct a search and replace table in which you can specify several search and replace strings so that several items can be altered or removed during one single pass through the file. A typical search table looks like this: <$&snr[-]> Thus, if you want to publish a database using the dBase report code described above, you could write a little dBase PRG file that looks like this: @TABLE 2 = use examp3 @TABLE 2 = report form examp3 to examp3 @TABLE 2 = !snr examp3.txt xxx snr.snr @TABLE 2 = !del examp3.txt @TABLE 2 = !rename examp3.xxx examp3.txt The file SNR.SNR contains the search table shown in the previous column. @HEAD 1 = Custom dBase code If you are willing to write custom dBase code, you can create just about any text file you wish. You could even create your own chapter files! However, this is beyond most people's abilities. To give you some idea of what is possible with custom dBase code, a modest dBase program is included with this application note (example 4). This program allows you to specify any valid dBase database file and then lets you specify which fields you wish to extract and in which order. You can also optionally apply a different tag to each field. The program then extracts the information into a Ventura Publisher Professional Extension table. The width of each column is set to the width of the field in the database. Unlike many dBase programs, this one will extract memo fields. You will find this program quite useful, with one caveat: It is slow. dBase code just doesn't execute very fast. However, if you own Foxbase, Clipper, or similar dBase compilers, you should be able to compile this code and notice a marked improvement. The program is heavily commented to help you if you should choose to modify it. @HEAD 2 = Catalog publishing Example 5 on the distribution disk provides a good example of catalog publishing. The techniques used are the same as already discussed. @HEAD 1 = Spreadsheet publishing All of the examples so far have concentrated on how to extract information from a database (using dBase III as the example). The same three strategies also apply to a spreadsheet. This section describes several methods for exporting information from Lotus <->1-2-3 into Ventura Publisher. @HEAD 2 = PRN to Table If you own the Professional Extension, you can print a spreadsheet to a file using the /PF command. You then specify the file name and the range you wish to export, and 1-2-3 does the rest. When you then run Ventura Publisher, you select the Load Text/Picture option, choose PRN-to-table, and then select the file you created in 1-2-3. This feature works very well, except for the fact that you must first make sure that you have at least two spaces between each column. This means you may need to use the /WCS or /WGC commands to increase the width of some or all of the columns. Since extra spaces between columns are deleted by the PRN-to-table converter, you should err on the side of making the columns too wide. If you don't own the Professional Extension, then you can still export the text to a PRN file using the /PF command in 1-2-3, and then load it as a Wordstar 3 file (the Wordstar 3 converter treats each line of text as a separate paragraph, whereas the ASCII converter requires a blank line between each line). The result is a line of text for each row in the spreadsheet. However, you must use the Courier (mono-spaced) font, or else columns will no longer align. This is due to the fact that Ventura Publisher uses proportionally spaced fonts. Thus, if the first column in a row contains many narrow characters (such as i) and the row below contains lots of wide characters (such as w), the second column in the first row will start further to the left than the second column in the second row. You can purchase one of several utilities (listed at the end of this note) which remove multiple space characters between columns and replace them with tab characters. You then use the Tab Settings option (Paragraph menu) to set the tab stops in Ventura Publisher's style sheet to make the columns line up. This works extremely well for many spreadsheets because Ventura Publisher includes a decimal tab which forces numbers to line up at the decimal point. @HEAD 2 = Lotus 1-2-3 simple macro The reason why you need to use an external utility is that 1-2-3 does not let you place a tab character within a cell of the spreadsheet. (When you press the tab key, or ALT 9, the screen moves.) If you could place a tab character within a cell, you could then insert one-character-wide columns between each existing column, copy the tab character into each column, and then print the spreadsheet. You would then have a spreadsheet file which contains tabs between text. Well, with a little work, you can place a tab character within a cell. The key is to use a simple 1-2-3 macro. For instance, type the following into any six cells in your spreadsheet: @TABLE 2 = Col1 Col2 @TABLE 2 = Row1 \m {LET Tab,@CHAR(9)}~ @TABLE 2 = Row2 @TABLE 2 = Row3 Tab Then place the cursor in the cell which contains \m, type /RNLR and the press the down arrow twice so that both \m and the word Tab are covered. Then press the enter key. If you then press ALT M, the tab character will be placed in Row3, Column2. Once you have run this macro, you can then copy the tab character to any other range by typing: /Ctab followed by the destination range. @HEAD 2 = Lotus 1-2-3 advanced macro If you really know 1-2-3 macro programming, you can almost completely automate the file tagging and export process. Included with this application note is a very sophisticated macro contained in a file called 123TOVP.WK1. This macro is designed to be combined with any existing spreadsheet. Once combined, you simply: @BULLET 1 = Select the range to export. @BULLET 1 = Decide which of the three strategies you wish to use (tags between columns, tabs between columns, or Professional Extension table export). @BULLET 1 = Specify a file and export the text to that file. To use this macro: @BULLET 1 = Copy the file 123TOVP.WK1 to your Lotus 1-2-3 default directory. @BULLET 1 = Run 1-2-3. @BULLET 1 = Use the 1-2-3 /FR command to retrieve your spreadsheet file. @BULLET 1 = Press the END then HOME key followed by the down arrow and right arrow keys to go to the end of your spreadsheet. @BULLET 1 = Type /FCCE123TOVP.WK1 followed by the Enter key. @BULLET 1 = Immediately type /RNLR followed by Enter. @BULLET 1 = Press ALT V to start the Ventura Publisher macro. @BULLET 1 = Follow the instructions given on screen. After you are finished, use the /WEY command to erase the spreadsheet. This macro is provided as is for your own use and is not for sale and is not supported. If you want to modify the macro to try to speed it up, go right ahead. @HEAD 1 = External products The following is a list of programs designed to aid in the export of database and spreadsheet information into Ventura Publisher. @HEAD 2 = Advanced Systems, Ltd. @TAB 1 = 803 West Main Street, Suite 112 League City, TX 77573 (713) 333-9717 @TAB 1 = 1-2-3 to Professional Extension tables. All formatting (e.g., join cells, tints, tagging) done in 1-2-3. Assures that table format is not lost when spreadsheet changes. @HEAD 2 = Corel Systems Corporation @TAB 1 = Corel Building 1600 Carling Avenue Ottawa, Ontario, Canada K1Z 7M4 (613) 728-8200 @TAB 1 = Tabin. Inserts tabs into spreadsheet printouts for proportional spaced printouts of tables. @HEAD 2 = The Desktop Publishing Group @TAB 1 = 978 Douglas Avenue Altamonte Springs, FL 32714 (800) 257-8087 (305) 862-7755 @TAB 1 = Table Manners. Transfers Lotus 123 files to Ventura Publisher. @HEAD 2 = Digital Presentation Services @TAB 1 = 220 W. 24th St. New York, NY 10011 (212) 924-7661 @TAB 1 = VP Utility Pak I. Table creation and text creation utilities for preparing documents and spreadsheets for importation into Ventura Publisher. @HEAD 2 = The Laser Edge @TAB 1 = 360 17th Street Suite 203 Oakland, CA 94612 (415) 835-1581 @TAB 1 = XVP/BASE. dBase III to Ventura Publisher translator. @TAB 1 = XVP/Tabs. Inserts tabs into spreadsheet printouts for perfect proportional spaced printouts of tables. @HEAD 2 = Original Software Concepts @TAB 1 = Kent Lodge, 38 Castle Hill Maidenhead, Berkshire, SL6 4JJ England FAX (011 44) 628 770658 @TAB 1 = Database Publisher. GEM-based database extraction and automatic tagging program. @HEAD 2 = Publishing Solutions @TAB 1 = 205 E. 78th St. Ste. 17-T New York, NY 10021 (212) 288-2470 @TAB 1 = dataTAG. Incorporate database information into Ventura Publisher.