This software is not provided or supported by SoftTouch Developments inc. or the EasyWorship team but by a customer for their own use. Please see the copyright notice and terms below.

EasyWorship and Printing

One of the few flaws in the [Off Site]EasyWorship church projection software relates not to its primary function but the printing facilities. It was perhaps thought that these were entirely secondary but we are aware that some people can't (or won't) get on with the projected image and need a paper copy. When the church is geared to a bookless service, perhaps by necessity because the songs now in use are not in the books, there needs to be a way of providing a few paper copies. It is not worth expending large amounts of administrator time in producing these as used to be done when printed orders of service were provided to everyone, so a means to reproduce what otherwise appears on the screen is needed.

The EasyWorship software provides a “Print Schedule (Details)” facility but this is of fixed format and one song (or whatever) to a page. Variations to this may well be needed. In our church we project liturgy, sometimes only two lines per item. This would be very wasteful of paper and a thick pile for someone to handle. The only alternative has been to cut and paste the song details to a word processor document but this was exceedingly tedious and took too much time. The best time to produce this leaflet is just before the service.

This program is intended to provide a more flexible and customisable printed schedule output from EasyWorship. It utilises RTF file formats so the output file can be printed directly or further adjusted using a standard word processor. For customisation, this is not very user friendly but is a quick and dirty solution to a problem that I hope, in the near future, SoftTouch will fix in the main software.

It was originally intended that the data would be picked up from the schedule itself but it seems that the format is proprietary and not published. I managed to figure out most of the table of contents part but not the song words themselves. So, as a fall back option, I have picked up the data from a “Generic/Text Only Print to File” output, a publicly available interface. This is a little known but standard Windows feature that can be installed to print to a file (see below).

To use it successfully, verses of songs (if there are more than one) have to be marked with tags (Verse, Chorus etc.) as the divisions are not otherwise available. If tags are not present, the song will appear as all one verse. It is not possible to discover the displayed format of songs such as integral blank lines, italic, bold and underlines that were in the original schedule but I don't think this is a huge loss. Other information not available includes the Song Administrator and Song Number. Even so, it is possible to produce a very acceptable output to suit most needs.

Running the program

The program is a command line system, no GUI I'm afraid, but it is very simple.

First print the schedule to a file using EasyWorship menus and the “Generic/Text Print to File” option (as described below)—say sunday.txt.

Then, double click schedprt.exe

Enter command : sunday.txt

This will produce an output file called sunday.rtf which can be opened in a word processor and edited or printed as required.

Alternatively, if you are easy with the command window you can put the parameters on the same line.

There is one configuration data file which is required—default: schedprt.dat which defines how the output will look. If you like the default output I have provided then that is all you need to do.

Optionally specify an alternative configuration data file

Enter command : -c largeprint.dat sunday.txt

Optionally specify an alternative output file

Enter command : -o minister.rtf sunday.txt

or both.

By changing the configuration file there is no limit to what could be achieved, but what you see here is about the limit of my ingenuity.

The configuration data file

This is a plain text file (default schedprt.dat) and contains sections which configure how the final output is generated. Each section is coded as an RTF file snippet with escape codes where EasyWorship schedule data is inserted.

The basic structure is:

Schedule template

Song template

Stanza template


Comments (lines not starting with %) can be placed anywhere outside the definition blocks.

The schedule template defines the layout for the overall output file and will contain such things as the font definitions, document title, headers and footers. It can contain these escapes where variable data is inserted:—


{\f0\fnil\fcharset0 Tahoma;}
{\f1\fnil\fcharset0 Georgia;}
{\footer\f0\fs20\qr\sb90\sa0\chdate  Page \chpgn\par}
\f0\fs36\qc\sb0\sa0\b St. Matthew's Church\par
\f0\fs32\qc\sb0\sa0\b Songs and Prayers for the Morning Service - %S\b0\par


The Song template is the layout for each individual song and will contain the song title, author, copyright information and the song text itself. Any formatting required between the songs also needs to be included in this template, e.g. page breaks. It can contain these escapes where the variable data is inserted:—

It can also use the Schedule escapes above except %C (Content).


{\pard\f0\fs30\ql\sb360\sa90\keepn\b %T\b0\par
\f0\fs24\ql\sb0\sa90\keepn\i %A\i0\par
\pard\f0\fs18\ql\sb90\sa0 %c - %L\par

Each stanza (a verse, chorus, slide etc.) is extracted from the source song using the tag as delimiter and is laid out using the Stanza template. The generic print source data does not recognise blank lines within a stanza (Shift-Enter) so in that situation they will all run together. Any formatting required between the stanzas also needs to be included in this template. It can contain these escapes where the variable data is inserted:—

It can also use the Schedule and Song escapes above except %C (Content) and %s (song content).


\pard\plain\f0\fs22\ql\sb90\sa0\sl0\keepn %t %n\par
\pard\plain\f1\fs30\ql\sb0\sa0\sl0\li180\keep %z\par


If you want different formatting for the different tag types then you can define the %Chorus, %Bridge etc escapes. %Stanza is used by default if these are not defined.


\pard\plain\f0\fs22\ql\sb90\sa0\sl0\keepn %t %n\par
\pard\plain\f1\fs30\ql\sb0\sa0\sl0\li360\keep\i %z\i0\par


The full list available is %Verse, %Chorus, %Bridge, %Intro, %End, %Slide and %Tag

In the EasyWorship database, each line is a separate paragraph, however in this program hard line breaks (\line in RTF) are automatically substituted so that each stanza forms a single paragraph which makes for easier formatting. The %Line escape can be redefined to vary this behaviour.

Example (to remove output line breaks altogether)



Finally a facility exists to give a value to any escape not otherwise reserved in the definitions above (single letters, upper and lower case). These values can be substituted into any template.


CCL# 640000

e.g. this example would be useful if you wanted the licence information as part of the header/footer rather than on each song.

An assignment can include any text, including new lines and references to other escapes, but the consequences of a recursive loop are undefined and would probably cause the program to hang (use CTRL-C to break out). The leading and trailing new lines of the value are suppressed, if one is required include an extra one. All 52 possible variables (less the reserved ones) are available and initialised with a null string. They are limited to 2K characters each.

Simple RTF Structure

This is a very basic sample of the Microsoft RTF structure definition. It ought to be possible to create any layout that can be created by a word processor, but I don't necessarily know how. You are on your own with this.

Please do not contact me for help or errors regarding RTF formatting, I know as little as you. These guidelines are all that I can provide to help you.

All commands start with \ and are terminated either by another command or a single whitespace which is suppressed. Sections of the document can be contained in {...}. Any characters not part of commands are output to the printed document. If \, { or } are required to be printed, use \\, \{ or \}. Don't forget the space between the last command and the content. Don't forget to match the braces { and } in logical sections. In all these descriptions “N” is where a numerical value is placed.

Paragraph settings

Inline settings

Inserted values

Most measurements are in 1/20 of a point (1/1440") 1cm = 567 units.

Page sizes: US Letter=12240 x 15840, A4=11906 x 16838, A5=8419 x 11906. You can use the paper in landscape orientation.

Font sizes are in 1/2 points (1/144")

Languages: English British=2057, English United States=1033

Code page: Western European=1252

The settings at the start of the example Schedule template are about the minimum requirement and it is beyond the scope of this summary to go into more detail. A full RTF specification can be found at [Off Site] (A very long and impenetrable document)

We use the sample provided which we then print in an A5 booklet using the Canon print driver which automatically reduces and orders the pages so they can just be folded and stapled. This accounts for the rather large apparent font sizes we have used.

Generic/Text Only Print to File

This is a little known standard Windows feature. These are the steps to install it:

  1. Open Control Panel => Printers and Faxes
  2. Open "Add a Printer"
  3. Select "Local Printer" but not "Plug and Play"
  4. For the Port select "FILE: (Print to File)
  5. Use Manufacturer: Generic, Model: Generic/Text Only
  6. Don't select "Use as Default"
  7. Don't Share the Printer
  8. Don't Print a Test Page
  9. Finish.

In the Print Preview Window of EasyWorship, to the left of the Printer Icon there is one for Printer Setup. Select your new Generic/Text Only printer and when you print, it will ask for a file name (use the .txt extension). This has to be done each time a print is selected as it reverts to the default every time.

Known bugs and limitations

Before you report any bugs (and there are bound to be some) please first check that the problem is with the program not with your RTF templates. If you need to report a problem please send the schedule text file (the output from the Generic/Text Only Printer not the .ews schedule itself) and your configuration file so I can work with the same information that you have.

Contact information can be found on my Home Page.

Copyright ©2006–07 Rick Parsons, Bristol, England except those things that belong to SoftTouch Development inc. including the EasyWorship name.

This software is published Open Source Freeware. You are free to use the programs either in full or part without charge. I would ask however that this notice is included with any extract or onward distribution.

No charge may be made for the use of this code, however there is no objection to including modest extracts (with acknowledgement) in otherwise commercial software.

No warranty is given or implied by the use of the software which you do at your own risk. No compensation can be considered regarding damage to data, computers or any thing else arising as a result of using these programs.


I try to keep my system virus free but you do check downloaded files yourself, don’t you? <grin>

The zip file contains the full source code, executables for MS-DOS/Windows and a sample configuration file.

27 Feb 2014—Version 1.2 for EasyWorship 2009 (build 1.9)—with control file Version 3 (36K)


Unzip the files into any convenient location. It works best if at least schedprt.exe and schedprt.dat are in the same folder as your schedules. The only files that are needed for operation are those two. The rest are for information.

Release Notes

V1.2—Output a running tally to reassure the user.

V1.1—Fixed bug where songs that exactly fitted one page of the Generic/Text Only Printer caused the author and copyright information to be appended to the song. A chunk of subroutine get_song was re-written.

V1.0—Initial Alpha test release.

Control files

V3—Include page numbers, slightly larger margins and consolidate Title and Author onto one line.

V2—Larger print.

V1—Initial Alpha test release.