|
|
- <?php
- /*
- MINIMALRTF - A minimal set of RTF coding methods to produce Rich Text Format documents on the fly.
- v1.5
-
- Released through http://bibliophile.sourceforge.net under the GPL licence.
- Do whatever you like with this -- some credit to the author(s) would be appreciated.
-
- If you make improvements, please consider contacting the administrators at bibliophile.sourceforge.net so that your improvements can be added to the release package.
-
- Mark Grimshaw 2006
- http://bibliophile.sourceforge.net
- */
-
- // COMMAND LINE TESTS:
- // For a quick command-line test (php -f MINIMALRTF.php) after installation, uncomment the following:
- /**************************************************
- $centred = "This is some centred text.";
- $full = "This is some full justified and italicized text.";
- $weird = "Indented UNICODE: ¿ßŽŒ‰fl™ŁÞßØ€∑≠◊∝∞∅Ωπ¿";
- $largeText = "Here's some large text (font size 20)";
- $urlText = "Here's a URL: ";
- $url = "http://bibliophile.sourceforge.net";
- $urlDisplayText = "Bibliophile's home page!";
- $emailText = "Here's an email: ";
- $email = "billgates@microsoft.com";
- $emailDisplayText = "I love SPAM";
- $colouredText = "This text is red text";
- $backToBlackText = "This text is black text again";
- $rtf = new MINIMALRTF();
- $string = $rtf->openRtf();
- $rtf->createFontBlock(0, "Arial");
- $rtf->createFontBlock(1, "Times New Roman");
- $string .= $rtf->setFontBlock();
- $string .= $rtf->justify("centre");
- $string .= $rtf->textBlock(0, 12, $centred);
- $string .= $rtf->justify("full");
- $string .= $rtf->paragraph();
- $string .= $rtf->textBlock(1, 12, $rtf->italics($full));
- $string .= $rtf->justify("full", 2, 2);
- $string .= $rtf->paragraph();
- // Depending on your character set, you may need to encode $weird as UTF-8 first using PHP's inbuilt utf8_encode() function:
- // $weird = $rtf->utf8_2_unicode(utf8_encode($weird));
- $weird = $rtf->utf8_2_unicode($weird);
- $string .= $rtf->textBlock(1, 12, $weird);
- $string .= $rtf->justify("full");
- $string .= $rtf->paragraph();
- $string .= $rtf->textBlock(1, 20, $largeText);
- $string .= $rtf->paragraph();
- $string .= $rtf->textBlock(1, 12, $urlText . $rtf->urlText($url, $urlDisplayText));
- $string .= $rtf->paragraph();
- $string .= $rtf->textBlock(1, 12, $emailText . $rtf->emailText($email, $emailDisplayText));
- $string .= $rtf->paragraph();
- $string .= $rtf->setFontColour('red');
- $string .= $rtf->textBlock(1, 12, $colouredText);
- $string .= $rtf->paragraph();
- $string .= $rtf->setFontColour(); // i.e. set it back to black
- $string .= $rtf->textBlock(1, 12, $backToBlackText);
- $string .= $rtf->closeRtf();
-
- // Copy and paste the commandline output to a text editor, save with a .rtf extension and load in a word processor.
- print $string . "\n\n";
-
- **************************************************/
-
- class MINIMALRTF
- {
- /**
- * Constructor method called by user.
- */
- function MINIMALRTF()
- {
- /**
- * some defaults
- */
- $this->justify = array(
- "centre" => "qc",
- "left" => "ql",
- "right" => "qr",
- "full" => "qj",
- );
- $this->colourTable = array(
- 'black' => "\\red0\\green0\\blue0;",
- 'maroon' => "\\red128\\green0\\blue0;",
- 'green' => "\\red0\\green128\\blue0;",
- 'olive' => "\\red128\\green128\\blue0;",
- 'navy' => "\\red0\\green0\\blue128;",
- 'purple' => "\\red128\\green0\\blue128;",
- 'teal' => "\\red0\\green128\\blue128;",
- 'gray' => "\\red128\\green128\\blue128;",
- 'silver' => "\\red192\\green192\\blue192;",
- 'red' => "\\red255\\green0\\blue0;",
- 'lime' => "\\red0\\green255\\blue0;",
- 'yellow' => "\\red255\\green255\\blue0;",
- 'blue' => "\\red0\\green0\\blue255;",
- 'fuchsia' => "\\red255\\green0\\blue255;",
- 'aqua' => "\\red0\\green255\\blue255;",
- 'white' => "\\red255\\green255\\blue255;",
- );
- }
- /**
- * Create the RTF opening tag and the colorTable
- * @return string
- */
- function openRtf()
- {
- $text = "{\\rtf1\\ansi\\ansicpg1252\n\n";
- $text .= "{\\colortbl;";
- $index = 1;
- foreach($this->colourTable as $colour => $colourCode)
- {
- $text .= $colourCode;
- $this->colours[$colour] = "\\s1\\cf$index";
- ++$index;
- }
- $text .= "}\n\n";
- unset($this->colourTable);
- return $text . "\n\n";
- }
- /**
- * Create the RTF closing tag
- * @return string
- */
- function closeRtf()
- {
- return "\n}\n\n";
- }
- /**
- * Convert input text to bold text
- * @parameter string $input - text to be converted
- */
- function bold($input = "")
- {
- return "{\b $input}";
- }
- /**
- * Convert input text to italics text
- * @parameter string $input - text to be converted
- */
- function italics($input = "")
- {
- return "{\i $input}";
- }
- /**
- * Convert input text to underline text
- * @parameter string $input - text to be converted
- */
- function underline($input = "")
- {
- return "{\ul $input}";
- }
- /**
- * Convert input text to superscript text
- * @parameter string $input - text to be converted
- */
- function superscript($input = "")
- {
- return "{\super $input}";
- }
- /**
- * Convert input text to subscript text
- * @parameter string $input - text to be converted
- */
- function subscript($input = "")
- {
- return "{\sub $input}";
- }
- /**
- * Set font size for each paragraph
- * @parameter integer $fontBlock - number of this fontblock
- * @parameter string $font - required font
- */
- function createFontBlock($fontBlock = FALSE, $font = FALSE)
- {
- if(($fontBlock === FALSE) || ($font === FALSE))
- return FALSE;
- $this->fontBlocks[] = "{\\f$fontBlock\\fcharset0 $font;}\n";
- return TRUE;
- }
- /**
- * Set font blocks
- * @return string fontblock string
- */
- function setFontBlock()
- {
- if(!isset($this->fontBlocks))
- return FALSE;
- $string = "{\\fonttbl\n";
- foreach($this->fontBlocks as $fontBlock)
- $string .= $fontBlock;
- $string .= "}\n\n";
- return $string;
- }
- /**
- * Justify and indent
- * Each TAB is equivalent to 720 units of indent
- * @parameter string $justify - either "centre", "left", "right" or "full"
- * @parameter integer $indentL - no. TABs to indent from the left
- * @parameter integer $indentR - no. TABs to indent from the right
- * @parameter integer $indentF - no. TABs to indent first line
- */
- function justify($justify = "full", $indentL = 0, $indentR = 0, $indentF = 0)
- {
- if(!array_key_exists($justify, $this->justify))
- $justifyC = "qj";
- else
- $justifyC = $this->justify[$justify];
- $indentL *= 720;
- $indentR *= 720;
- $indentF *= 720;
- return "\\$justifyC\\li$indentL\\ri$indentR\\fi$indentF\n";
- }
- /**
- * Create empty paragraph
- * Font Size is twice what is shown in a word processor
- * @return string
- */
- function paragraph($fontBlock = 0, $fontSize = 12)
- {
- $fontSize *= 2;
- return "{\\f$fontBlock\\fs$fontSize \\par}\n";
- }
- /**
- * Create text block
- * @parameter string $input - input string
- * @return string
- */
- function textBlock($fontBlock = FALSE, $fontSize = FALSE, $input = FALSE)
- {
- if(($fontBlock === FALSE) || ($fontSize === FALSE) || ($input === FALSE))
- return FALSE;
- $fontSize *= 2;
- return "{\\f$fontBlock\\fs$fontSize $input\\par}\n";
- }
- /**
- * Create email link
- * @parameter string $email - email address
- * @return string
- */
- function emailText($email, $displayText = FALSE)
- {
- if(!$displayText)
- $displayText = $email;
- return "{\\field{\\fldinst { HYPERLINK \"mailto:$email\" }}{\\fldrslt {\\cs1\\ul\\cf13 $displayText}}}";
- }
- /**
- * Create URL link
- * @parameter string $url - URL
- * @return string
- */
- function urlText($url, $displayText = FALSE)
- {
- if(!$displayText)
- $displayText = $url;
- return "{\\field{\\fldinst { HYPERLINK \"$url\" }}{\\fldrslt {\\cs1\\ul\\cf13 $displayText}}}";
- }
- /**
- * Set font color
- * @parameter string - colour
- * @return string
- */
- function setFontColour($colour = 'black')
- {
- if(!array_key_exists($colour, $this->colours))
- $colour = $this->colours['black'];
- else
- $colour = $this->colours[$colour];
- return "\n$colour\n";
- }
- /**
- * UTF-8 to unicode
- * returns an array of unicode character codes
- * Code adapted from opensource PHP code by Scott Reynen at:
- * http://www.randomchaos.com/document.php?source=php_and_unicode
- *
- * @parameter string $string UTF-8 encoded string
- * @return string unicode character code
- */
- function utf8_2_unicode($string)
- {
- $unicode = array();
- $values = array();
- $lookingFor = 1;
- for($i = 0; $i < strlen($string); $i++)
- {
- $thisValue = ord($string[$i]);
- if($thisValue < 128)
- $unicode[] = $string[$i];
- else
- {
- if(count($values) == 0)
- $lookingFor = ($thisValue < 224) ? 2 : 3;
- $values[] = $thisValue;
- if(count($values) == $lookingFor)
- {
- $number = ($lookingFor == 3) ?
- (($values[0] % 16) * 4096) + (($values[1] % 64) * 64) + ($values[2] % 64) :
- (($values[0] % 32) * 64) + ($values[1] % 64);
- // $unicode[] = '\u' . $number . " ?";
- // A better unicode function?
- $decModulus = $number % 256;
- $modulus = dechex($number % 256);
- if($decModulus < 16)
- $modulus = '0' . $modulus;
- $unicode[] = '\u' . $number . "\'$modulus";
- $values = array();
- $lookingFor = 1;
- }
- }
- }
- return join('', $unicode);
- }
- }
- ?>
|