====== Zugriff per Unicode ====== Diese Methode ist nur bei TrueType möglich, und mit einigen Einschränkungen verbunden. Sie ist aber recht einfach, und darum trotzdem recht beliebt. Aus der TrueType-Schrift müssen wir hier für alle Unicodenummern von 0 bis 65535 die GID und die Zeichenbreite ermitteln. Das können wir mit denselben Mitteln, die wir bis anhin verwendet haben. ===== das Teilschriftobjekt ===== Im Eintrag ''/W'' müssen die Zeichenbreiten nach Unicode-Nummer sortiert angegeben werden. Wir müssen einen zusätzlichen Eintrag ''/CIDToGIDMap'' anlegen. Dieser muss eine Referenz auf einen Stream sein. ===== der CIDToGIDMap Stream ===== Dieser Stream enthält eine Liste mit den GIDs für alle Unicode-Nummern. Der PDF Interpreter stützt sich hierauf, nicht auf den cmap Block. Die Liste ist in einem sehr einfachen, aber binären Format. Für jede der Unicode-Nummern werden zwei Bytes abgelegt, welche die GID als uint16 in Big-Endian Anordnung enthalten. Die Liste ist folglich (ohne Kompression und vor Anwendung von ASCIIHex oder ASCII85) immer genau 131072 Bytes lang. ===== der ToUnicode Stream ===== Dieser Stream definiert, wie eine Konversion von den im PDF verwendeten Strings nach Unicode vorgenommen werden muss. Bei dieser Methode sind die Strings bereits in Unicode. Dementsprechend definieren wir eine 1:1 "Konversion". Wenn mehrere Schriften mit dieser Methode eingebunden werden, so können alle auf denselben ToUnicode Stream verweisen. Der Stream muss folgenden Inhalt haben: /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def /CMapName /Adobe-Identity-UCS def /CMapType 2 def 1 begincodespacerange <0000> endcodespacerange 100 beginbfrange <0000> <00FF> <0000> <0100> <01FF> <0100> <0200> <02FF> <0200> <0300> <03FF> <0300> <0400> <04FF> <0400> <0500> <05FF> <0500> <0600> <06FF> <0600> <0700> <07FF> <0700> <0800> <08FF> <0800> <0900> <09FF> <0900> <0A00> <0AFF> <0A00> <0B00> <0BFF> <0B00> <0C00> <0CFF> <0C00> <0D00> <0DFF> <0D00> <0E00> <0EFF> <0E00> <0F00> <0FFF> <0F00> <1000> <10FF> <1000> <1100> <11FF> <1100> <1200> <12FF> <1200> <1300> <13FF> <1300> <1400> <14FF> <1400> <1500> <15FF> <1500> <1600> <16FF> <1600> <1700> <17FF> <1700> <1800> <18FF> <1800> <1900> <19FF> <1900> <1A00> <1AFF> <1A00> <1B00> <1BFF> <1B00> <1C00> <1CFF> <1C00> <1D00> <1DFF> <1D00> <1E00> <1EFF> <1E00> <1F00> <1FFF> <1F00> <2000> <20FF> <2000> <2100> <21FF> <2100> <2200> <22FF> <2200> <2300> <23FF> <2300> <2400> <24FF> <2400> <2500> <25FF> <2500> <2600> <26FF> <2600> <2700> <27FF> <2700> <2800> <28FF> <2800> <2900> <29FF> <2900> <2A00> <2AFF> <2A00> <2B00> <2BFF> <2B00> <2C00> <2CFF> <2C00> <2D00> <2DFF> <2D00> <2E00> <2EFF> <2E00> <2F00> <2FFF> <2F00> <3000> <30FF> <3000> <3100> <31FF> <3100> <3200> <32FF> <3200> <3300> <33FF> <3300> <3400> <34FF> <3400> <3500> <35FF> <3500> <3600> <36FF> <3600> <3700> <37FF> <3700> <3800> <38FF> <3800> <3900> <39FF> <3900> <3A00> <3AFF> <3A00> <3B00> <3BFF> <3B00> <3C00> <3CFF> <3C00> <3D00> <3DFF> <3D00> <3E00> <3EFF> <3E00> <3F00> <3FFF> <3F00> <4000> <40FF> <4000> <4100> <41FF> <4100> <4200> <42FF> <4200> <4300> <43FF> <4300> <4400> <44FF> <4400> <4500> <45FF> <4500> <4600> <46FF> <4600> <4700> <47FF> <4700> <4800> <48FF> <4800> <4900> <49FF> <4900> <4A00> <4AFF> <4A00> <4B00> <4BFF> <4B00> <4C00> <4CFF> <4C00> <4D00> <4DFF> <4D00> <4E00> <4EFF> <4E00> <4F00> <4FFF> <4F00> <5000> <50FF> <5000> <5100> <51FF> <5100> <5200> <52FF> <5200> <5300> <53FF> <5300> <5400> <54FF> <5400> <5500> <55FF> <5500> <5600> <56FF> <5600> <5700> <57FF> <5700> <5800> <58FF> <5800> <5900> <59FF> <5900> <5A00> <5AFF> <5A00> <5B00> <5BFF> <5B00> <5C00> <5CFF> <5C00> <5D00> <5DFF> <5D00> <5E00> <5EFF> <5E00> <5F00> <5FFF> <5F00> <6000> <60FF> <6000> <6100> <61FF> <6100> <6200> <62FF> <6200> <6300> <63FF> <6300> endbfrange 100 beginbfrange <6400> <64FF> <6400> <6500> <65FF> <6500> <6600> <66FF> <6600> <6700> <67FF> <6700> <6800> <68FF> <6800> <6900> <69FF> <6900> <6A00> <6AFF> <6A00> <6B00> <6BFF> <6B00> <6C00> <6CFF> <6C00> <6D00> <6DFF> <6D00> <6E00> <6EFF> <6E00> <6F00> <6FFF> <6F00> <7000> <70FF> <7000> <7100> <71FF> <7100> <7200> <72FF> <7200> <7300> <73FF> <7300> <7400> <74FF> <7400> <7500> <75FF> <7500> <7600> <76FF> <7600> <7700> <77FF> <7700> <7800> <78FF> <7800> <7900> <79FF> <7900> <7A00> <7AFF> <7A00> <7B00> <7BFF> <7B00> <7C00> <7CFF> <7C00> <7D00> <7DFF> <7D00> <7E00> <7EFF> <7E00> <7F00> <7FFF> <7F00> <8000> <80FF> <8000> <8100> <81FF> <8100> <8200> <82FF> <8200> <8300> <83FF> <8300> <8400> <84FF> <8400> <8500> <85FF> <8500> <8600> <86FF> <8600> <8700> <87FF> <8700> <8800> <88FF> <8800> <8900> <89FF> <8900> <8A00> <8AFF> <8A00> <8B00> <8BFF> <8B00> <8C00> <8CFF> <8C00> <8D00> <8DFF> <8D00> <8E00> <8EFF> <8E00> <8F00> <8FFF> <8F00> <9000> <90FF> <9000> <9100> <91FF> <9100> <9200> <92FF> <9200> <9300> <93FF> <9300> <9400> <94FF> <9400> <9500> <95FF> <9500> <9600> <96FF> <9600> <9700> <97FF> <9700> <9800> <98FF> <9800> <9900> <99FF> <9900> <9A00> <9AFF> <9A00> <9B00> <9BFF> <9B00> <9C00> <9CFF> <9C00> <9D00> <9DFF> <9D00> <9E00> <9EFF> <9E00> <9F00> <9FFF> <9F00> endbfrange 56 beginbfrange endbfrange endcmap CMapName currentdict /CMap defineresource pop end end