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

11 years ago
10 years ago
11 years ago
11 years ago
11 years ago
10 years ago
11 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-2015 Zend Technologies USA Inc. (http://www.zend.com)
  18. * @license http://framework.zend.com/license/new-bsd New BSD License
  19. * @version $Id$
  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-2015 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. }