You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.5 KiB

12 years ago
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Pdf
  17. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  18. * @license http://framework.zend.com/license/new-bsd New BSD License
  19. * @version $Id: Binary.php 24593 2012-01-05 20:35:02Z matthew $
  20. */
  21. /** Zend_Pdf_Element_String */
  22. // require_once 'Zend/Pdf/Element/String.php';
  23. /**
  24. * PDF file 'binary string' element implementation
  25. *
  26. * @category Zend
  27. * @package Zend_Pdf
  28. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  29. * @license http://framework.zend.com/license/new-bsd New BSD License
  30. */
  31. class Zend_Pdf_Element_String_Binary extends Zend_Pdf_Element_String
  32. {
  33. /**
  34. * Object value
  35. *
  36. * @var string
  37. */
  38. public $value;
  39. /**
  40. * Escape string according to the PDF rules
  41. *
  42. * @param string $inStr
  43. * @return string
  44. */
  45. public static function escape($inStr)
  46. {
  47. return strtoupper(bin2hex($inStr));
  48. }
  49. /**
  50. * Unescape string according to the PDF rules
  51. *
  52. * @param string $inStr
  53. * @return string
  54. */
  55. public static function unescape($inStr)
  56. {
  57. $chunks = array();
  58. $offset = 0;
  59. $length = 0;
  60. while ($offset < strlen($inStr)) {
  61. // Collect hexadecimal characters
  62. $start = $offset;
  63. $offset += strspn($inStr, "0123456789abcdefABCDEF", $offset);
  64. $chunks[] = substr($inStr, $start, $offset - $start);
  65. $length += strlen(end($chunks));
  66. // Skip non-hexadecimal characters
  67. $offset += strcspn($inStr, "0123456789abcdefABCDEF", $offset);
  68. }
  69. if ($length % 2 != 0) {
  70. // We have odd number of digits.
  71. // Final digit is assumed to be '0'
  72. $chunks[] = '0';
  73. }
  74. return pack('H*' , implode($chunks));
  75. }
  76. /**
  77. * Return object as string
  78. *
  79. * @param Zend_Pdf_Factory $factory
  80. * @return string
  81. */
  82. public function toString($factory = null)
  83. {
  84. return '<' . self::escape((string)$this->value) . '>';
  85. }
  86. }