getType() != Zend_Pdf_Element::TYPE_DICTIONARY) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Annotation dictionary resource has to be a dictionary.'); } if ($annotationDictionary->Subtype === null || $annotationDictionary->Subtype->getType() != Zend_Pdf_Element::TYPE_NAME || !in_array( $annotationDictionary->Subtype->value, array(self::SUBTYPE_HIGHLIGHT, self::SUBTYPE_UNDERLINE, self::SUBTYPE_SQUIGGLY, self::SUBTYPE_STRIKEOUT) )) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Subtype => Markup entry is omitted or has wrong value.'); } parent::__construct($annotationDictionary); } /** * Create markup annotation object * * Text markup annotations appear as highlights, underlines, strikeouts or * jagged ("squiggly") underlines in the text of a document. When opened, * they display a pop-up window containing the text of the associated note. * * $subType parameter may contain * Zend_Pdf_Annotation_Markup::SUBTYPE_HIGHLIGHT * Zend_Pdf_Annotation_Markup::SUBTYPE_UNDERLINE * Zend_Pdf_Annotation_Markup::SUBTYPE_SQUIGGLY * Zend_Pdf_Annotation_Markup::SUBTYPE_STRIKEOUT * for for a highlight, underline, squiggly-underline, or strikeout annotation, * respectively. * * $quadPoints is an array of 8xN numbers specifying the coordinates of * N quadrilaterals default user space. Each quadrilateral encompasses a word or * group of contiguous words in the text underlying the annotation. * The coordinates for each quadrilateral are given in the order * x1 y1 x2 y2 x3 y3 x4 y4 * specifying the quadrilateral’s four vertices in counterclockwise order * starting from left bottom corner. * The text is oriented with respect to the edge connecting points * (x1, y1) and (x2, y2). * * @param float $x1 * @param float $y1 * @param float $x2 * @param float $y2 * @param string $text * @param string $subType * @param array $quadPoints [x1 y1 x2 y2 x3 y3 x4 y4] * @return Zend_Pdf_Annotation_Markup * @throws Zend_Pdf_Exception */ public static function create($x1, $y1, $x2, $y2, $text, $subType, $quadPoints) { $annotationDictionary = new Zend_Pdf_Element_Dictionary(); $annotationDictionary->Type = new Zend_Pdf_Element_Name('Annot'); $annotationDictionary->Subtype = new Zend_Pdf_Element_Name($subType); $rectangle = new Zend_Pdf_Element_Array(); $rectangle->items[] = new Zend_Pdf_Element_Numeric($x1); $rectangle->items[] = new Zend_Pdf_Element_Numeric($y1); $rectangle->items[] = new Zend_Pdf_Element_Numeric($x2); $rectangle->items[] = new Zend_Pdf_Element_Numeric($y2); $annotationDictionary->Rect = $rectangle; $annotationDictionary->Contents = new Zend_Pdf_Element_String($text); if (!is_array($quadPoints) || count($quadPoints) == 0 || count($quadPoints) % 8 != 0) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('$quadPoints parameter must be an array of 8xN numbers'); } $points = new Zend_Pdf_Element_Array(); foreach ($quadPoints as $quadPoint) { $points->items[] = new Zend_Pdf_Element_Numeric($quadPoint); } $annotationDictionary->QuadPoints = $points; return new Zend_Pdf_Annotation_Markup($annotationDictionary); } }