DigiGuide Print Template Basic Example

Below is an example of a simplified Finder report. Hyperlinks will take you to the documentation for that function or variable


//
//	nColumsToPrint is the number of colums to use, can't be zero. Setting it too high will produce a large
//	number of pages so beware!
var nColumsToPrint = 3;


//
//	Set some constants for the report
var nProgCount = GetProgrammeCount();
var nPageWidth = GetPageWidth();
var nPageHeight = GetPageHeight();

//
//	If we have multple columns then we need to get the column width
var nColumnWidth = nPageWidth / nColumsToPrint;


//
//	Header template
var strHeaderTemplate = "<p><h1>Finder View: Search for " + Options.ReportDescription + 
						"<hr noshade width=\"100%%\">";

var strProgrammeDetailsTemplate = "<p><b>$StartTime</b> $ProgrammeName<br>" +
									"Category: $CategoryName, Duration($Duration)<br>" +
									"$Description</p>";

var strProgrammeDetailsTemplateWithoutDescription = "<p><b>$StartTime</b> $ProgrammeName<br>" +
									"Category: $CategoryName, Duration($Duration)<br>";

//
//	Could add a footer in here too...
var nPageBottom = nPageHeight;

var nCurrentX = 0;
var nCurrentY = 0;
var nTopY = 0;
var nMaxY = 0;
var nCurrentColumn = 1;
var dtDay;

//
//	Just set the top and the "current" day.
if( nProgCount )
{
	nTopY = PlaceHeader( 0 );
	nCurrentY = nTopY;
	dtDay = new Date( GetProgrammeInfo( 0, "$USStartDateTime" ) );
}


function NextColumn( nProg )
//
//	Go to the next column, if we are on the last column then throw a new page
{
	//
	//	If we are on the last column then we should do a page throw.
	if( nCurrentColumn >= nColumsToPrint )
	{
		DebugOut( "Newpage");

		NewPage();
		nCurrentColumn = 0;
		nTopY = PlaceHeader( nProg );
		nCurrentY = nTopY;
		nCurrentX = 0;
	}
	else
	{
		nCurrentY = nTopY;
		nCurrentX += nColumnWidth;
		nCurrentColumn++;
	}
}


function PlaceHeader( nProg )
{
	var strPrintHeader;
	strPrintHeader = GetProgrammeInfo( 1, strHeaderTemplate );

	nHeaderHeight = MeasureText( nPageWidth, strPrintHeader );
	PlaceText( 0, 0, nPageWidth, strPrintHeader );
	return nHeaderHeight;
}


for (var nProg = 0; nProg < nProgCount; nProg++ )
{
	//
	//	Decide whether to show the descriptions for shows based on how they have been highlighted
	//		and the options the user has selected.
	var strProgrammeDetails;
	if( ShouldIncludeProgrammeDescription( nProg ) )
	{
		strProgrammeDetails = GetProgrammeInfo( nProg, strProgrammeDetailsTemplate );
	}
	else
	{
		strProgrammeDetails = GetProgrammeInfo( nProg, strProgrammeDetailsTemplateWithoutDescription );
	}

	var nProgHeight = MeasureText( nColumnWidth, strProgrammeDetails );

	//
	//	If the object wont fit then try another column
	if( nCurrentY + nProgHeight > nPageBottom )
	{
		NextColumn( nProg );
	}

	PlaceText( nCurrentX, nCurrentY, nColumnWidth, strProgrammeDetails );
	nCurrentY += nProgHeight;
}