eideticpdf 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. data/fonts/AntiqueOlive-Bold.afm +406 -0
  2. data/fonts/AntiqueOlive-Bold.inf +27 -0
  3. data/fonts/AntiqueOlive-Compact.afm +401 -0
  4. data/fonts/AntiqueOlive-Compact.inf +27 -0
  5. data/fonts/AntiqueOlive-Italic.afm +401 -0
  6. data/fonts/AntiqueOlive-Italic.inf +27 -0
  7. data/fonts/AntiqueOlive-Roman.afm +409 -0
  8. data/fonts/AntiqueOlive-Roman.inf +27 -0
  9. data/fonts/AvantGarde-Book.afm +667 -0
  10. data/fonts/AvantGarde-Book.inf +26 -0
  11. data/fonts/AvantGarde-BookOblique.afm +667 -0
  12. data/fonts/AvantGarde-BookOblique.inf +26 -0
  13. data/fonts/AvantGarde-Demi.afm +673 -0
  14. data/fonts/AvantGarde-Demi.inf +26 -0
  15. data/fonts/AvantGarde-DemiOblique.afm +673 -0
  16. data/fonts/AvantGarde-DemiOblique.inf +26 -0
  17. data/fonts/Bookman-Demi.afm +669 -0
  18. data/fonts/Bookman-Demi.inf +25 -0
  19. data/fonts/Bookman-DemiItalic.afm +669 -0
  20. data/fonts/Bookman-DemiItalic.inf +25 -0
  21. data/fonts/Bookman-Light.afm +643 -0
  22. data/fonts/Bookman-Light.inf +25 -0
  23. data/fonts/Bookman-LightItalic.afm +620 -0
  24. data/fonts/Bookman-LightItalic.inf +25 -0
  25. data/fonts/Clarendon-Bold.afm +412 -0
  26. data/fonts/Clarendon-Bold.inf +27 -0
  27. data/fonts/Clarendon-Light.afm +410 -0
  28. data/fonts/Clarendon-Light.inf +27 -0
  29. data/fonts/Clarendon.afm +410 -0
  30. data/fonts/Clarendon.inf +27 -0
  31. data/fonts/CooperBlack-Italic.afm +421 -0
  32. data/fonts/CooperBlack-Italic.inf +26 -0
  33. data/fonts/CooperBlack.afm +427 -0
  34. data/fonts/CooperBlack.inf +26 -0
  35. data/fonts/Coronet-Regular.afm +327 -0
  36. data/fonts/Coronet-Regular.inf +25 -0
  37. data/fonts/Courier-Bold.afm +342 -0
  38. data/fonts/Courier-Bold.inf +26 -0
  39. data/fonts/Courier-BoldOblique.afm +342 -0
  40. data/fonts/Courier-BoldOblique.inf +26 -0
  41. data/fonts/Courier-Oblique.afm +342 -0
  42. data/fonts/Courier-Oblique.inf +26 -0
  43. data/fonts/Courier.afm +342 -0
  44. data/fonts/Courier.inf +26 -0
  45. data/fonts/Eurostile.afm +419 -0
  46. data/fonts/Eurostile.inf +27 -0
  47. data/fonts/Goudy-ExtraBold.afm +412 -0
  48. data/fonts/Goudy-ExtraBold.inf +27 -0
  49. data/fonts/Helvetica-Bold.afm +2827 -0
  50. data/fonts/Helvetica-Bold.inf +26 -0
  51. data/fonts/Helvetica-BoldOblique.afm +2827 -0
  52. data/fonts/Helvetica-BoldOblique.inf +26 -0
  53. data/fonts/Helvetica-Condensed-Bold.afm +623 -0
  54. data/fonts/Helvetica-Condensed-Bold.inf +25 -0
  55. data/fonts/Helvetica-Condensed-BoldObl.afm +623 -0
  56. data/fonts/Helvetica-Condensed-BoldObl.inf +25 -0
  57. data/fonts/Helvetica-Condensed-Oblique.afm +528 -0
  58. data/fonts/Helvetica-Condensed-Oblique.inf +25 -0
  59. data/fonts/Helvetica-Condensed.afm +528 -0
  60. data/fonts/Helvetica-Condensed.inf +25 -0
  61. data/fonts/Helvetica-Narrow-Bold.afm +1439 -0
  62. data/fonts/Helvetica-Narrow-Bold.inf +26 -0
  63. data/fonts/Helvetica-Narrow-BoldOblique.afm +1439 -0
  64. data/fonts/Helvetica-Narrow-BoldOblique.inf +26 -0
  65. data/fonts/Helvetica-Narrow-Oblique.afm +1556 -0
  66. data/fonts/Helvetica-Narrow-Oblique.inf +26 -0
  67. data/fonts/Helvetica-Narrow.afm +1556 -0
  68. data/fonts/Helvetica-Narrow.inf +26 -0
  69. data/fonts/Helvetica-Oblique.afm +3051 -0
  70. data/fonts/Helvetica-Oblique.inf +26 -0
  71. data/fonts/Helvetica.afm +3051 -0
  72. data/fonts/Helvetica.inf +26 -0
  73. data/fonts/LetterGothic-Bold.afm +443 -0
  74. data/fonts/LetterGothic-Bold.inf +26 -0
  75. data/fonts/LetterGothic-BoldSlanted.afm +443 -0
  76. data/fonts/LetterGothic-BoldSlanted.inf +26 -0
  77. data/fonts/LetterGothic-Slanted.afm +443 -0
  78. data/fonts/LetterGothic-Slanted.inf +26 -0
  79. data/fonts/LetterGothic.afm +443 -0
  80. data/fonts/LetterGothic.inf +26 -0
  81. data/fonts/LubalinGraph-Book.afm +351 -0
  82. data/fonts/LubalinGraph-Book.inf +25 -0
  83. data/fonts/LubalinGraph-BookOblique.afm +351 -0
  84. data/fonts/LubalinGraph-BookOblique.inf +25 -0
  85. data/fonts/LubalinGraph-Demi.afm +351 -0
  86. data/fonts/LubalinGraph-Demi.inf +25 -0
  87. data/fonts/LubalinGraph-DemiOblique.afm +351 -0
  88. data/fonts/LubalinGraph-DemiOblique.inf +25 -0
  89. data/fonts/Marigold.afm +491 -0
  90. data/fonts/Marigold.inf +27 -0
  91. data/fonts/MonaLisa-Recut.afm +663 -0
  92. data/fonts/MonaLisa-Recut.inf +27 -0
  93. data/fonts/NewCenturySchlbk-Bold.afm +886 -0
  94. data/fonts/NewCenturySchlbk-Bold.inf +25 -0
  95. data/fonts/NewCenturySchlbk-BoldItalic.afm +1521 -0
  96. data/fonts/NewCenturySchlbk-BoldItalic.inf +26 -0
  97. data/fonts/NewCenturySchlbk-Italic.afm +1113 -0
  98. data/fonts/NewCenturySchlbk-Italic.inf +26 -0
  99. data/fonts/NewCenturySchlbk-Roman.afm +1067 -0
  100. data/fonts/NewCenturySchlbk-Roman.inf +26 -0
  101. data/fonts/Optima-Bold.afm +515 -0
  102. data/fonts/Optima-Bold.inf +27 -0
  103. data/fonts/Optima-BoldItalic.afm +712 -0
  104. data/fonts/Optima-BoldItalic.inf +26 -0
  105. data/fonts/Optima-Italic.afm +737 -0
  106. data/fonts/Optima-Italic.inf +26 -0
  107. data/fonts/Optima.afm +501 -0
  108. data/fonts/Optima.inf +27 -0
  109. data/fonts/Palatino-Bold.afm +675 -0
  110. data/fonts/Palatino-Bold.inf +26 -0
  111. data/fonts/Palatino-BoldItalic.afm +702 -0
  112. data/fonts/Palatino-BoldItalic.inf +26 -0
  113. data/fonts/Palatino-Italic.afm +700 -0
  114. data/fonts/Palatino-Italic.inf +26 -0
  115. data/fonts/Palatino-Roman.afm +718 -0
  116. data/fonts/Palatino-Roman.inf +26 -0
  117. data/fonts/StempelGaramond-Bold.afm +412 -0
  118. data/fonts/StempelGaramond-Bold.inf +27 -0
  119. data/fonts/StempelGaramond-BoldItalic.afm +413 -0
  120. data/fonts/StempelGaramond-BoldItalic.inf +27 -0
  121. data/fonts/StempelGaramond-Italic.afm +413 -0
  122. data/fonts/StempelGaramond-Italic.inf +27 -0
  123. data/fonts/StempelGaramond-Roman.afm +412 -0
  124. data/fonts/StempelGaramond-Roman.inf +27 -0
  125. data/fonts/Symbol.afm +213 -0
  126. data/fonts/Symbol.inf +27 -0
  127. data/fonts/Times-Bold.afm +2588 -0
  128. data/fonts/Times-Bold.inf +26 -0
  129. data/fonts/Times-BoldItalic.afm +2384 -0
  130. data/fonts/Times-BoldItalic.inf +26 -0
  131. data/fonts/Times-Italic.afm +2667 -0
  132. data/fonts/Times-Italic.inf +26 -0
  133. data/fonts/Times-Roman.afm +2419 -0
  134. data/fonts/Times-Roman.inf +26 -0
  135. data/fonts/Univers-Bold.afm +712 -0
  136. data/fonts/Univers-Bold.inf +27 -0
  137. data/fonts/Univers-BoldOblique.afm +712 -0
  138. data/fonts/Univers-BoldOblique.inf +27 -0
  139. data/fonts/Univers-Condensed.afm +403 -0
  140. data/fonts/Univers-Condensed.inf +27 -0
  141. data/fonts/Univers-CondensedOblique.afm +403 -0
  142. data/fonts/Univers-CondensedOblique.inf +27 -0
  143. data/fonts/Univers-Light.afm +737 -0
  144. data/fonts/Univers-Light.inf +27 -0
  145. data/fonts/Univers-LightOblique.afm +737 -0
  146. data/fonts/Univers-LightOblique.inf +27 -0
  147. data/fonts/Univers-Oblique.afm +656 -0
  148. data/fonts/Univers-Oblique.inf +27 -0
  149. data/fonts/Univers.afm +656 -0
  150. data/fonts/Univers.inf +27 -0
  151. data/fonts/ZapfChancery-MediumItalic.afm +842 -0
  152. data/fonts/ZapfChancery-MediumItalic.inf +26 -0
  153. data/fonts/ZapfDingbats.afm +225 -0
  154. data/fonts/ZapfDingbats.inf +26 -0
  155. data/lib/epdfafm.rb +334 -0
  156. data/lib/epdfdw.rb +710 -0
  157. data/lib/epdfk.rb +3142 -0
  158. data/lib/epdfo.rb +882 -0
  159. data/lib/epdfpw.rb +1749 -0
  160. data/lib/epdfs.rb +101 -0
  161. data/lib/epdfsw.rb +267 -0
  162. data/lib/epdft.rb +145 -0
  163. data/lib/epdftt.rb +458 -0
  164. data/test/pdf_tests.rb +16 -0
  165. data/test/test.rb +816 -0
  166. data/test/test_epdfafm.rb +202 -0
  167. data/test/test_epdfdw.rb +369 -0
  168. data/test/test_epdfk.rb +47 -0
  169. data/test/test_epdfo.rb +762 -0
  170. data/test/test_epdfpw.rb +129 -0
  171. data/test/test_epdfs.rb +54 -0
  172. data/test/test_epdfsw.rb +314 -0
  173. data/test/test_epdft.rb +198 -0
  174. data/test/test_epdftt.rb +34 -0
  175. data/test/test_helpers.rb +18 -0
  176. data/test/testimg.jpg +0 -0
  177. metadata +247 -0
@@ -0,0 +1,26 @@
1
+ FontName (ZapfChancery-MediumItalic)
2
+ FullName (ITC Zapf Chancery Medium Italic)
3
+ AppleName (Zapf Chancery)
4
+ AppleFONDID 18
5
+ FamilyName (ITC Zapf Chancery)
6
+ version (002.000)
7
+ isFixedPitch false
8
+ CharacterSet (isoadobe)
9
+ Encoding (StandardEncoding)
10
+ ItalicAngle -14
11
+ CapHeight 594
12
+ UnderlinePosition -100
13
+ UnderlineThickness 50
14
+ StemWidth 70
15
+ Serif true
16
+ Pi false
17
+ SuperiorBaseline 244
18
+ MSMenuName (ZapfChancery)
19
+ VPMenuName (Zapf Chancery)
20
+ WORDMenuName (ZapfChancery)
21
+ VPTypefaceID 29
22
+ VPStyle (N)
23
+ PCFileNamePrefix (ZCMI_)
24
+ PCLTypefaceID 20523
25
+ PCLStrokeWeight 0
26
+ PCLStyle 1
@@ -0,0 +1,225 @@
1
+ StartFontMetrics 4.1
2
+ Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.
3
+ Comment Creation Date: Thu May 1 15:14:13 1997
4
+ Comment UniqueID 43082
5
+ Comment VMusage 45775 55535
6
+ FontName ZapfDingbats
7
+ FullName ITC Zapf Dingbats
8
+ FamilyName ZapfDingbats
9
+ Weight Medium
10
+ ItalicAngle 0
11
+ IsFixedPitch false
12
+ CharacterSet Special
13
+ FontBBox -1 -143 981 820
14
+ UnderlinePosition -100
15
+ UnderlineThickness 50
16
+ Version 002.000
17
+ Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.
18
+ EncodingScheme FontSpecific
19
+ StdHW 28
20
+ StdVW 90
21
+ StartCharMetrics 202
22
+ C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
23
+ C 33 ; WX 974 ; N a1 ; B 35 72 939 621 ;
24
+ C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;
25
+ C 35 ; WX 974 ; N a202 ; B 35 72 939 621 ;
26
+ C 36 ; WX 980 ; N a3 ; B 35 0 945 692 ;
27
+ C 37 ; WX 719 ; N a4 ; B 34 139 685 566 ;
28
+ C 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ;
29
+ C 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ;
30
+ C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;
31
+ C 41 ; WX 690 ; N a117 ; B 34 138 655 553 ;
32
+ C 42 ; WX 960 ; N a11 ; B 35 123 925 568 ;
33
+ C 43 ; WX 939 ; N a12 ; B 35 134 904 559 ;
34
+ C 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ;
35
+ C 45 ; WX 855 ; N a14 ; B 34 59 820 632 ;
36
+ C 46 ; WX 911 ; N a15 ; B 35 50 876 642 ;
37
+ C 47 ; WX 933 ; N a16 ; B 35 139 899 550 ;
38
+ C 48 ; WX 911 ; N a105 ; B 35 50 876 642 ;
39
+ C 49 ; WX 945 ; N a17 ; B 35 139 909 553 ;
40
+ C 50 ; WX 974 ; N a18 ; B 35 104 938 587 ;
41
+ C 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ;
42
+ C 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ;
43
+ C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;
44
+ C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;
45
+ C 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ;
46
+ C 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ;
47
+ C 57 ; WX 763 ; N a25 ; B 35 0 728 692 ;
48
+ C 58 ; WX 760 ; N a26 ; B 35 0 726 692 ;
49
+ C 59 ; WX 759 ; N a27 ; B 35 0 725 692 ;
50
+ C 60 ; WX 754 ; N a28 ; B 35 0 720 692 ;
51
+ C 61 ; WX 494 ; N a6 ; B 35 0 460 692 ;
52
+ C 62 ; WX 552 ; N a7 ; B 35 0 517 692 ;
53
+ C 63 ; WX 537 ; N a8 ; B 35 0 503 692 ;
54
+ C 64 ; WX 577 ; N a9 ; B 35 96 542 596 ;
55
+ C 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ;
56
+ C 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ;
57
+ C 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ;
58
+ C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;
59
+ C 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ;
60
+ C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;
61
+ C 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ;
62
+ C 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ;
63
+ C 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ;
64
+ C 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ;
65
+ C 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ;
66
+ C 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ;
67
+ C 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ;
68
+ C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;
69
+ C 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ;
70
+ C 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ;
71
+ C 81 ; WX 744 ; N a44 ; B 35 0 710 692 ;
72
+ C 82 ; WX 723 ; N a45 ; B 35 0 688 692 ;
73
+ C 83 ; WX 749 ; N a46 ; B 35 0 714 692 ;
74
+ C 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ;
75
+ C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;
76
+ C 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ;
77
+ C 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ;
78
+ C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;
79
+ C 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ;
80
+ C 90 ; WX 759 ; N a53 ; B 35 0 725 692 ;
81
+ C 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ;
82
+ C 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ;
83
+ C 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ;
84
+ C 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ;
85
+ C 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ;
86
+ C 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ;
87
+ C 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ;
88
+ C 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ;
89
+ C 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ;
90
+ C 100 ; WX 687 ; N a63 ; B 36 0 651 692 ;
91
+ C 101 ; WX 696 ; N a64 ; B 35 0 661 691 ;
92
+ C 102 ; WX 689 ; N a65 ; B 35 0 655 692 ;
93
+ C 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ;
94
+ C 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ;
95
+ C 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ;
96
+ C 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ;
97
+ C 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ;
98
+ C 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ;
99
+ C 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ;
100
+ C 110 ; WX 761 ; N a73 ; B 35 0 726 692 ;
101
+ C 111 ; WX 762 ; N a74 ; B 35 0 727 692 ;
102
+ C 112 ; WX 762 ; N a203 ; B 35 0 727 692 ;
103
+ C 113 ; WX 759 ; N a75 ; B 35 0 725 692 ;
104
+ C 114 ; WX 759 ; N a204 ; B 35 0 725 692 ;
105
+ C 115 ; WX 892 ; N a76 ; B 35 0 858 705 ;
106
+ C 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ;
107
+ C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;
108
+ C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;
109
+ C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;
110
+ C 120 ; WX 138 ; N a82 ; B 35 0 104 692 ;
111
+ C 121 ; WX 277 ; N a83 ; B 35 0 242 692 ;
112
+ C 122 ; WX 415 ; N a84 ; B 35 0 380 692 ;
113
+ C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;
114
+ C 124 ; WX 392 ; N a98 ; B 34 263 357 705 ;
115
+ C 125 ; WX 668 ; N a99 ; B 35 263 633 705 ;
116
+ C 126 ; WX 668 ; N a100 ; B 36 263 634 705 ;
117
+ C 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ;
118
+ C 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ;
119
+ C 130 ; WX 317 ; N a93 ; B 35 0 283 692 ;
120
+ C 131 ; WX 317 ; N a94 ; B 35 0 283 692 ;
121
+ C 132 ; WX 276 ; N a91 ; B 35 0 242 692 ;
122
+ C 133 ; WX 276 ; N a92 ; B 35 0 242 692 ;
123
+ C 134 ; WX 509 ; N a205 ; B 35 0 475 692 ;
124
+ C 135 ; WX 509 ; N a85 ; B 35 0 475 692 ;
125
+ C 136 ; WX 410 ; N a206 ; B 35 0 375 692 ;
126
+ C 137 ; WX 410 ; N a86 ; B 35 0 375 692 ;
127
+ C 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ;
128
+ C 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ;
129
+ C 140 ; WX 334 ; N a95 ; B 35 0 299 692 ;
130
+ C 141 ; WX 334 ; N a96 ; B 35 0 299 692 ;
131
+ C 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ;
132
+ C 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ;
133
+ C 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ;
134
+ C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;
135
+ C 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ;
136
+ C 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ;
137
+ C 167 ; WX 760 ; N a108 ; B 0 121 758 569 ;
138
+ C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;
139
+ C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;
140
+ C 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ;
141
+ C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;
142
+ C 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ;
143
+ C 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ;
144
+ C 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ;
145
+ C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;
146
+ C 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ;
147
+ C 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ;
148
+ C 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ;
149
+ C 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ;
150
+ C 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ;
151
+ C 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ;
152
+ C 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ;
153
+ C 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ;
154
+ C 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ;
155
+ C 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ;
156
+ C 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ;
157
+ C 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ;
158
+ C 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ;
159
+ C 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ;
160
+ C 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ;
161
+ C 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ;
162
+ C 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ;
163
+ C 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ;
164
+ C 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ;
165
+ C 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ;
166
+ C 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ;
167
+ C 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ;
168
+ C 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ;
169
+ C 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ;
170
+ C 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ;
171
+ C 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ;
172
+ C 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ;
173
+ C 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ;
174
+ C 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ;
175
+ C 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ;
176
+ C 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ;
177
+ C 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ;
178
+ C 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ;
179
+ C 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ;
180
+ C 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ;
181
+ C 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ;
182
+ C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;
183
+ C 213 ; WX 838 ; N a161 ; B 35 152 803 540 ;
184
+ C 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ;
185
+ C 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ;
186
+ C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;
187
+ C 217 ; WX 924 ; N a165 ; B 35 140 890 552 ;
188
+ C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;
189
+ C 219 ; WX 918 ; N a166 ; B 35 166 884 526 ;
190
+ C 220 ; WX 927 ; N a167 ; B 35 32 892 660 ;
191
+ C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;
192
+ C 222 ; WX 928 ; N a169 ; B 35 128 893 563 ;
193
+ C 223 ; WX 834 ; N a170 ; B 35 155 799 537 ;
194
+ C 224 ; WX 873 ; N a171 ; B 35 93 838 599 ;
195
+ C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;
196
+ C 226 ; WX 924 ; N a173 ; B 35 98 889 594 ;
197
+ C 227 ; WX 924 ; N a162 ; B 35 98 889 594 ;
198
+ C 228 ; WX 917 ; N a174 ; B 35 0 882 692 ;
199
+ C 229 ; WX 930 ; N a175 ; B 35 84 896 608 ;
200
+ C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;
201
+ C 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ;
202
+ C 232 ; WX 883 ; N a178 ; B 35 71 848 623 ;
203
+ C 233 ; WX 836 ; N a179 ; B 35 44 802 648 ;
204
+ C 234 ; WX 836 ; N a193 ; B 35 44 802 648 ;
205
+ C 235 ; WX 867 ; N a180 ; B 35 101 832 591 ;
206
+ C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;
207
+ C 237 ; WX 696 ; N a181 ; B 35 44 661 648 ;
208
+ C 238 ; WX 696 ; N a200 ; B 35 44 661 648 ;
209
+ C 239 ; WX 874 ; N a182 ; B 35 77 840 619 ;
210
+ C 241 ; WX 874 ; N a201 ; B 35 73 840 615 ;
211
+ C 242 ; WX 760 ; N a183 ; B 35 0 725 692 ;
212
+ C 243 ; WX 946 ; N a184 ; B 35 160 911 533 ;
213
+ C 244 ; WX 771 ; N a197 ; B 34 37 736 655 ;
214
+ C 245 ; WX 865 ; N a185 ; B 35 207 830 481 ;
215
+ C 246 ; WX 771 ; N a194 ; B 34 37 736 655 ;
216
+ C 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ;
217
+ C 248 ; WX 967 ; N a186 ; B 35 124 932 568 ;
218
+ C 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ;
219
+ C 250 ; WX 831 ; N a187 ; B 35 113 796 579 ;
220
+ C 251 ; WX 873 ; N a188 ; B 36 118 838 578 ;
221
+ C 252 ; WX 927 ; N a189 ; B 35 150 891 542 ;
222
+ C 253 ; WX 970 ; N a190 ; B 35 76 931 616 ;
223
+ C 254 ; WX 918 ; N a191 ; B 34 99 884 593 ;
224
+ EndCharMetrics
225
+ EndFontMetrics
@@ -0,0 +1,26 @@
1
+ FontName (ZapfDingbats)
2
+ FullName (ITC Zapf Dingbats)
3
+ AppleName (Zapf Dingbats)
4
+ AppleFONDID 13
5
+ FamilyName (ITC Zapf Dingbats)
6
+ version (002.000)
7
+ isFixedPitch false
8
+ CharacterSet (charset)
9
+ Encoding (encoding.ps)
10
+ ItalicAngle 0
11
+ CapHeight 692
12
+ UnderlinePosition -100
13
+ UnderlineThickness 50
14
+ StemWidth 90
15
+ Serif false
16
+ Pi true
17
+ MSMenuName (ZapfDingbats)
18
+ VPMenuName (Zapf Dingbats)
19
+ WORDMenuName (ZapfDingbats)
20
+ VPTypefaceID 129
21
+ VPStyle (N)
22
+ PCFileNamePrefix (ZD___)
23
+ PCLTypefaceID 20525
24
+ PCLStrokeWeight 0
25
+ PCLStyle 0
26
+ PCLSymbolSet 10L
data/lib/epdfafm.rb ADDED
@@ -0,0 +1,334 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: ASCII-8BIT
3
+ #
4
+ # Created by Brent Rowland on 2007-12-18.
5
+ # Copyright (c) 2007, Eidetic Software. All rights reserved.
6
+
7
+ require 'epdfk'
8
+ require 'epdfo'
9
+ require 'epdfs'
10
+
11
+ module EideticPDF
12
+ module AFM # :nodoc: all
13
+ # AfmChar = Struct.new(:code, :name, :w0x, :w1x, :w0y, :w1y, :w0, :w1, :vv, :b, :l)
14
+ AfmChar = Struct.new(:code, :name, :width)
15
+ FontPath = [File.join(File.dirname(__FILE__), '..', 'fonts')]
16
+
17
+ class Codepoints
18
+ def self.for_encoding(encoding)
19
+ require 'iconv'
20
+ encoding = 'CP1252' if encoding == 'WinAnsiEncoding'
21
+ @@codepoints_by_encoding ||= {}
22
+ @@codepoints_by_encoding[encoding] ||= Iconv.open("UCS-2BE//IGNORE", encoding) do |ic|
23
+ (0..255).map { |c| ic.iconv(c.chr) }.map { |s| s.unpack('n') }.map { |a| a.first }
24
+ end
25
+ end
26
+ end
27
+
28
+ class Glyphs
29
+ def self.for_codepoints(codepoints)
30
+ codepoints.map { |codepoint| PdfK::glyph_name(codepoint) }
31
+ end
32
+
33
+ def self.for_encoding(encoding)
34
+ @@glyphs_by_encoding ||= {}
35
+ @@glyphs_by_encoding[encoding] ||= for_codepoints(Codepoints.for_encoding(encoding))
36
+ end
37
+
38
+ def self.widths_for_glyphs(glyphs, chars_by_name)
39
+ glyphs.map { |glyph| (ch = chars_by_name[glyph]) ? ch.width : 0 }
40
+ end
41
+
42
+ def self.widths_for_encoding(encoding, chars_by_name)
43
+ widths_for_glyphs(for_encoding(encoding), chars_by_name)
44
+ end
45
+
46
+ def self.differences_for_encodings(encoding1, encoding2)
47
+ @@glyph_differences_for_encodings ||= {}
48
+ key = "#{encoding1}-#{encoding2}"
49
+ result = @@glyph_differences_for_encodings[key]
50
+ if result.nil?
51
+ glyphs1, glyphs2 = for_encoding(encoding1), for_encoding(encoding2)
52
+ diffs = []
53
+ same = true
54
+ 1.upto(255) do |i|
55
+ if same
56
+ if (glyphs1[i] != glyphs2[i]) and !glyphs2[i].nil?
57
+ same = false
58
+ diffs << PdfObjects::PdfInteger.new(i)
59
+ diffs << PdfObjects::PdfName.new(glyphs2[i])
60
+ end
61
+ else
62
+ if glyphs1[i] == glyphs2[i]
63
+ same = true
64
+ else
65
+ diffs << PdfObjects::PdfName.new(glyphs2[i])
66
+ end
67
+ end
68
+ end
69
+ result = @@glyph_differences_for_encodings[key] = PdfObjects::PdfArray.new(diffs)
70
+ end
71
+ result
72
+ end
73
+ end
74
+
75
+ class AdobeFontMetrics
76
+ FixedPitch = 0x01
77
+ Serif = 0x02
78
+ Symbolic = 0x04
79
+ Script = 0x08
80
+ NonSymbolic = 0x20
81
+ Italic = 0x40
82
+ AllCap = 0x10000
83
+ SmallCap = 0x20000
84
+ ForceBold = 0x40000
85
+
86
+ attr_reader :font_name, :full_name, :family_name, :weight, :italic_angle, :is_fixed_pitch
87
+ attr_reader :font_b_box, :underline_position, :underline_thickness, :missing_width, :leading
88
+ attr_reader :version, :notice
89
+ attr_reader :character_set, :encoding_scheme
90
+ attr_reader :cap_height, :x_height, :ascender, :descender, :std_h_w, :std_v_w, :serif
91
+ attr_reader :chars_by_name, :chars_by_code
92
+
93
+ def load_afm(lines)
94
+ lines.each do |line|
95
+ break if @kern_data_started
96
+ if @char_metrics_started
97
+ load_char_metrics(line)
98
+ else
99
+ load_line(line)
100
+ end
101
+ end
102
+ # symbolic fonts don't specify ascender and descender, so default to reasonable numbers.
103
+ @ascender ||= 750
104
+ @descender ||= -188
105
+ @missing_width = 0 # for CJK charsets only?
106
+ @leading = 0 # for CJK charsets only?
107
+ self
108
+ end
109
+
110
+ def load_inf(lines)
111
+ lines.grep(/^Serif/).each do |line|
112
+ load_line(line)
113
+ end
114
+ self
115
+ end
116
+
117
+ def flags
118
+ @flags = 0
119
+ @flags |= FixedPitch if @is_fixed_pitch
120
+ @flags |= Serif if @serif
121
+ if ['Symbol','ZapfDingbats'].include?(@family_name)
122
+ @flags |= Symbolic
123
+ else
124
+ @flags |= NonSymbolic
125
+ end
126
+ # TODO: detect Script
127
+ @flags |= Italic if @italic_angle != 0
128
+ @flags |= ForceBold if @weight =~ /Bold|Demi/i
129
+ @flags
130
+ end
131
+
132
+ def italic
133
+ @italic_angle != 0
134
+ end
135
+
136
+ def needs_descriptor(encoding)
137
+ if encoding_scheme == 'FontSpecific'
138
+ false
139
+ else
140
+ !(0...14).include?(PdfK::font_index(font_name)) || !PdfK::STANDARD_ENCODINGS.include?(encoding)
141
+ end
142
+ end
143
+
144
+ def differences(encoding)
145
+ if (encoding != :unicode) and needs_descriptor(encoding)
146
+ Glyphs.differences_for_encodings('WinAnsiEncoding', encoding)
147
+ else
148
+ false
149
+ end
150
+ end
151
+
152
+ def widths(encoding)
153
+ result = (@widths ||= {})[encoding]
154
+ if result.nil?
155
+ if encoding == :unicode
156
+ result = Hash.new(missing_width)
157
+ chars_by_name.each do |name, ch|
158
+ results[PdfK::CODEPOINTS[name]] = ch.width
159
+ end
160
+ elsif encoding.nil? or encoding == 'StandardEncoding'
161
+ result = Array.new(256, 0)
162
+ chars_by_code.each do |ch|
163
+ result[ch.code] = ch.width unless ch.nil?
164
+ end
165
+ else
166
+ result = Glyphs.widths_for_encoding(encoding, chars_by_name)
167
+ end
168
+ @widths[encoding] = result
169
+ end
170
+ result
171
+ end
172
+
173
+ def self.load(afm_file)
174
+ result = self.new
175
+ result.load_afm(IO.readlines(afm_file))
176
+ inf_file = afm_file.sub(/\.afm$/, '.inf')
177
+ result.load_inf(IO.readlines(inf_file)) if File.exist?(inf_file)
178
+ result
179
+ end
180
+
181
+ def self.find_font(full_name)
182
+ if full_name.is_a?(Regexp)
183
+ afm_cache.find { |afm| full_name =~ afm.font_name }
184
+ else
185
+ afm_cache.find { |afm| full_name.casecmp(afm.font_name) == 0 }
186
+ end
187
+ end
188
+
189
+ def self.find_fonts(options)
190
+ afm_cache.select do |afm|
191
+ options.all? do |key, value|
192
+ if value.respond_to?(:to_str)
193
+ value.casecmp(afm.send(key)) == 0
194
+ elsif value.is_a?(Regexp)
195
+ value =~ afm.send(key)
196
+ else
197
+ value == afm.send(key)
198
+ end
199
+ end
200
+ end
201
+ end
202
+
203
+ def self.afm_cache(reload=false)
204
+ return $afm_cache unless $afm_cache.nil? or reload
205
+ $afm_cache = []
206
+ FontPath.each do |path|
207
+ Dir[File.join(path, '*.afm')].each do |file|
208
+ $afm_cache << AdobeFontMetrics.load(file)
209
+ end
210
+ end
211
+ $afm_cache
212
+ end
213
+
214
+ protected
215
+ def load_line(line)
216
+ case line
217
+ when /^FontName\s+(.*)$/
218
+ @font_name = $1.chomp
219
+ when /^FullName\s+(.*)/
220
+ @full_name = $1.chomp
221
+ when /^FamilyName\s+(.*)/
222
+ @family_name = $1.chomp
223
+ when /^Weight\s+(\w+)/
224
+ @weight = $1
225
+ when /^ItalicAngle\s+(-?\d+(\.\d+)?)/
226
+ @italic_angle = $1.to_f
227
+ when /^IsFixedPitch\s+(\w+)/
228
+ @is_fixed_pitch = ($1 == 'true')
229
+ when /^CharacterSet\s+(\w+)/
230
+ @character_set = $1
231
+ when /^FontBBox((\s+-?\d+){4})/
232
+ @font_b_box = $1.split.map { |d| d.to_i }
233
+ when /^UnderlinePosition\s+(-?\d+)/
234
+ @underline_position = $1.to_i
235
+ when /^UnderlineThickness\s+(\d+)/
236
+ @underline_thickness = $1.to_i
237
+ when /^Version\s+(.*)/
238
+ @version = $1.chomp
239
+ when /^Notice\s+(.*)/
240
+ @notice = $1.chomp
241
+ when /^EncodingScheme\s+(\w+)/
242
+ @encoding_scheme = $1
243
+ when /^CapHeight\s+(\d+)/
244
+ @cap_height = $1.to_i
245
+ when /^XHeight\s+(\d+)/
246
+ @x_height = $1.to_i
247
+ when /^Ascender\s+(\d+)/
248
+ @ascender = $1.to_i
249
+ when /^Descender\s+(-?\d+)/
250
+ @descender = $1.to_i
251
+ when /^StdHW\s+(\d+)/
252
+ @std_h_w = $1.to_i
253
+ when /^StdVW\s+(\d+)/
254
+ @std_v_w = $1.to_i
255
+ when /^StartCharMetrics/
256
+ @chars_by_name = {}
257
+ @chars_by_code = []
258
+ @char_metrics_started = true
259
+ when /^Serif\s+(\w+)/
260
+ @serif = ($1 == 'true')
261
+ when /^StartKernData/
262
+ @kern_data_started = true
263
+ end
264
+ end
265
+
266
+ def load_char_metrics(line)
267
+ if line =~ /^EndCharMetrics/
268
+ @char_metrics_started = false
269
+ else
270
+ ch = AfmChar.new
271
+ if line =~ /^C\s+(-?\d+)\s*;\s*WX\s+(\d+)\s*;\s*N\s+(\w+)/
272
+ ch.code = $1.to_i
273
+ ch.width = $2.to_i
274
+ ch.name = $3
275
+ else
276
+ line.split(';').map { |kv| kv.strip }.each do |kv|
277
+ k, v = kv.split
278
+ case k
279
+ when 'C' then ch.code = v.to_i
280
+ when 'CH' then ch.code = v[1..-2].to_i(16)
281
+ when 'WX', 'W0X' then ch.width = v.to_i
282
+ when 'N' then ch.name = v
283
+ end
284
+ end
285
+ end
286
+ raise Exception.new("bad: #{kv}") if ch.name.nil? or ch.code.nil?
287
+ @chars_by_name[ch.name] = ch
288
+ # cbc1 = @chars_by_code.compact.size
289
+ @chars_by_code[ch.code] = ch if ch.code > 0
290
+ # cbc2 = @chars_by_code.compact.size
291
+ # raise Exception.new("trouble: #{line}") if cbc2 != cbc1 + 1 and ch.code > 0
292
+ end
293
+ end
294
+ end
295
+
296
+ def find_font(family, weight='', style='')
297
+ italic = (style =~ /Italic|Oblique/i) ? '(Italic|Obl(ique)?)' : ''
298
+ weight_style = "#{weight}#{italic}"
299
+ re_s = '^' + family
300
+ if weight_style.empty?
301
+ re_s << '(-Roman)?'
302
+ else
303
+ re_s << '-' << weight_style
304
+ end
305
+ re_s << '$'
306
+ re = Regexp.new(re_s, Regexp::IGNORECASE)
307
+ afm = AdobeFontMetrics.find_font(re)
308
+ end
309
+
310
+ def font_metrics(name, options={})
311
+ afm = find_font(name, options[:weight], options[:style])
312
+ raise Exception.new("Unknown font %s." % name) if afm.nil?
313
+ encoding = (afm.encoding_scheme == 'FontSpecific') ? nil : options[:encoding] || 'WinAnsiEncoding'
314
+ needs_descriptor = afm.needs_descriptor(encoding)
315
+ differences = afm.differences(encoding)
316
+ widths = afm.widths(encoding)
317
+ cwidths = widths.compact.extend(Statistics)
318
+ fm = PdfK::FontMetrics.new(needs_descriptor, widths, afm.ascender, afm.descender, afm.flags, afm.font_b_box, afm.missing_width,
319
+ afm.std_v_w, afm.std_h_w, afm.italic_angle, afm.cap_height, afm.x_height, afm.leading, cwidths.max, cwidths.mean.round,
320
+ afm.underline_position, afm.underline_thickness, differences)
321
+ fm
322
+ end
323
+
324
+ def font_weights(family_name)
325
+ AdobeFontMetrics.find_fonts(:family_name => family_name).map { |afm| afm.weight }.sort.uniq
326
+ end
327
+
328
+ def font_names(reload=false)
329
+ AdobeFontMetrics.afm_cache(reload).map { |afm| afm.font_name }
330
+ end
331
+
332
+ module_function :find_font, :font_metrics, :font_weights, :font_names
333
+ end
334
+ end