Mac OS X Terminal erstellt Null-Byte-Dateien

Ich bin Schriftentwickler. Ich möchte einen DSIG-Code in eine Schriftart im TrueType-Format (TTF) zusammenführen , wodurch er mit Microsoft-Anwendungen kompatibel ist, die OpenType-Funktionen verwenden. Ich hatte das schon einmal, aber jetzt kann ich nur eine font.ttf-Datei mit null Bytes erzeugen. Ich verwende das Adobe Font Development Kit (AFDKO ). wie vorgeschrieben zusammen mit Terminal, um die Zusammenführung vorzunehmen. Ich würde gerne wissen, warum ich eine Null-Byte-Datei bekomme?

Hier ist meine Schritt-für-Schritt-Methode, gefolgt vom resultierenden Terminal-Fenstercode.

  1. Starten Sie eine neue Terminalsitzung und geben Sie sie ein

    which ttx
    

    Ein Pfad, der mit ttx endet, bedeutet gut zu gehen.

  2. Dieses Snippet einfügen…

    FLDR="${HOME}/Desktop/Dsig fldr"
    mkdir -p "$FLDR"
    cd "$FLDR"
    cat > dsig.ttx<<EOF
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="2.4">
    <DSIG>
    <hexdata>
    00000001 00000000
    </hexdata>
    </DSIG>
    </ttFont>
    EOF
    

    dann nach Eingabe der Return-Taste:

    open .
    

Dadurch wird auf dem Desktop ein neuer Ordner mit dem Titel „Dsig fldr“ erstellt. Darin befindet sich eine neu erstellte Datei mit dem Titel „dsig.ttx“ zur Verwendung mit dieser Routine:

  1. Ziehen Sie die TTX-App in das Terminal (da sie Ihr Dsig-fldr-Snippet akzeptiert):

    /Users/adrianshome/Downloads/fonttools-2.4/Tools/ttx
    
  2. Geben Sie ein: -m (ohne ein Leerzeichen nach dem m zu vergessen).

    /Users/adrianshome/Desktop/Dsig\ fldr/SassoBooIta.ttf /Users/adrianshome/Desktop/Dsig\ fldr/dsig.ttx
    

Entfernen Sie zunächst alle dsig#.ttf-Dateien im Dsig-Fldr, falls vorhanden.

Dann für jede Schriftartdatei:

  1. Ziehen Sie die ttf-Schriftartdatei auf das Terminal (z. B. SassoBoo.ttf)
  2. Ziehen Sie dsig.ttx in das Terminal und drücken Sie die Eingabetaste

Das wird nur dsig.ttx kompilieren, die DSIG in SassoBoo.ttf zusammenführen und eine Datei namens dsig.ttf im Dsig-Fldr erzeugen, also jetzt …

  1. Benennen Sie dsig.ttf in SassoBoo something.ttf um (der ursprüngliche TrueType-Dateiname)

Es gibt viel bessere Möglichkeiten, mit Skripten fortzufahren.

Wechseln Sie nicht die Schritte 3 und 4. Sie müssen die .ttf-Datei vor der .ttx-Datei ablegen.

Hinweise: dsig.ttx und alle Ihre .ttf-Dateien müssen sich im Ordner Dsig fldr befinden. Die TTX-App kann überall leben, da der Pfad jedes Mal durch Ziehen eingefügt wird.


Hier ist der resultierende Terminalcode:

Last login: Thu Mar 31 11:41:06 on ttys001
Adrians-iMac:~ adrianshome$ which ttx
/Users/adrianshome/bin/FDK/Tools/osx/ttx
Adrians-iMac:~ adrianshome$ FLDR="${HOME}/Desktop/Dsig fldr"
Adrians-iMac:~ adrianshome$ mkdir -p "$FLDR"
Adrians-iMac:~ adrianshome$ cd "$FLDR"
Adrians-iMac:Dsig fldr adrianshome$ cat > dsig.ttx<<EOF
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="2.4">
> <DSIG>
> <hexdata>
> 00000001 00000000
> </hexdata>
> </DSIG>
> </ttFont>
> EOF
Adrians-iMac:Dsig fldr adrianshome$ open .
Adrians-iMac:Dsig fldr adrianshome$ /Applications/FDK/Tools/osx/ttx  -m /Applications/Dsig\ fldr/CUP\ Folder\ alpha/SassPenTra.ttf /Users/adrianshome/Desktop/Dsig\ fldr/dsig.ttx

Compiling "/Users/adrianshome/Desktop/Dsig fldr/dsig.ttx" to "/Users/adrianshome/Desktop/Dsig fldr/dsig.ttf"...
Parsing 'DSIG' table...
Traceback (most recent call last):
File "/Applications/FDK/Tools/osx/../SharedData/FDKScripts/ttx.py", line 329, in <module>
main(sys.argv[1:])
File "/Applications/FDK/Tools/osx/../SharedData/FDKScripts/ttx.py", line 309, in main
process(jobs, options)
File "/Applications/FDK/Tools/osx/../SharedData/FDKScripts/ttx.py", line 294, in process
action(input, output, options)
File "/Applications/FDK/Tools/osx/../SharedData/FDKScripts/ttx.py", line 216, in ttCompile
ttf.save(output)
File "/Applications/FDK/Tools/osx/Python/Current/lib/python2.7/site-packages/FontToo ls/fontTools/ttLib/__init__.py", line 214, in save
self._writeTable(tag, writer, done)
File "/Applications/FDK/Tools/osx/Python/Current/lib/python2.7/site-packages/FontToo ls/fontTools/ttLib/__init__.py", line 629, in _writeTable
tabledata = self.getTableData(tag)
File "/Applications/FDK/Tools/osx/Python/Current/lib/python2.7/site-packages/FontToo ls/fontTools/ttLib/__init__.py", line 642, in getTableData
return self.tables[tag].compile(self)
File "/Applications/FDK/Tools/osx/Python/Current/lib/python2.7/site-packages/FontToo ls/fontTools/ttLib/tables/D_S_I_G_.py", line 60, in compile
packed = sstruct.pack(DSIG_HeaderFormat, self)
File "/Applications/FDK/Tools/osx/Python/Current/lib/python2.7/site-packages/FontToo ls/fontTools/misc/sstruct.py", line 68, in pack
value = obj[name]
KeyError: 'ulVersion'
Ich werde versuchen, dies zu bearbeiten, damit die Formatierung klarer ist - Sie müssen jedoch möglicherweise einige Details erneut eingeben, wenn ich Fehler mache ...
Es sieht so aus, als ob einige Leerzeichen und zusätzliche Zeilenumbrüche hinzugefügt wurden. Eine Sache, die Sie versuchen könnten, wäre, einen Texteditor zu verwenden, um die Datei auf dem catSchritt zu überprüfen oder neu zu erstellen. Es sieht so aus, als hätten Sie eine Ziffernfolge und dann einen Zeilenumbruch, bevor die Datei endet. Sie können versuchen nano, diese Datei zu bearbeiten, da sie den Text nicht codiert und eine Bildschirmhilfe enthält. Haben Sie auch ein funktionierendes Beispiel, das Sie mit dem fehlgeschlagenen vergleichen können?

Antworten (1)

Es ist nicht das Terminal, das die Null-Byte-Datei erstellt, sondern eine Reihe von Python-Skripten, die entweder Ihre ttf-Schriftart oder die Dummy-DSIG-Datei nicht mögen. Oder die ursprüngliche ttf-Datei enthält bereits eine digitale Signatur!

Das Beste, was Sie versuchen können, ist Folgendes:

Speichern Sie die kopierte ttf-Datei (in meinem Beispiel habe ich die TrueType-Schriftartdatei Andale Mono.ttf in einen Ordner namens FontMod auf meinem Desktop kopiert):

ttx /Users/user/Desktop/FontMod/Andale\ Mono.ttf

Entfernen Sie die ursprüngliche ttf-Datei im Arbeitsordner oder benennen Sie sie um. Öffnen Sie die resultierende ttx-Datei mit einem anständigen Texteditor wie TextWrangler , BBEdit oder sogar nano.

Wenn die ttx-Datei keinen <DSIG>...</DSIG>Abschnitt enthält, fügen Sie einfach das folgende Snippet am Ende direkt vor dem schließenden </ttFont>Tag hinzu.

  <DSIG>
    <!-- note that the Digital Signature will be invalid after recompilation! -->
    <tableHeader flag="0x1" numSigs="1" version="1"/>
    <SignatureRecord format="1">
-----BEGIN PKCS7-----
0000000100000000
-----END PKCS7-----
    </SignatureRecord>
  </DSIG>

und speichern Sie das Ergebnis.

Wenn die ttx-Datei bereits einen DSIG-Abschnitt enthält, können Sie versuchen, den PKCS7-Teil zu ersetzen:

  <DSIG>
    <!-- note that the Digital Signature will be invalid after recompilation! -->
    <tableHeader flag="0x1" numSigs="1" version="1"/>
    <SignatureRecord format="1">
-----BEGIN PKCS7-----
MIIllQYJKoZIhvcNAQcCoIIlhjCCJYICAQExCzAJBgUrDgMCGgUAMGEGCisGAQQBgjcCAQSgUzBR
...
tCPnxeRQVRtMEWQXYd27Fkhu/dLhBloN2ti3CGPKPTneEW7TrcwcpUH4yvX9gyzjXQ==
-----END PKCS7-----
    </SignatureRecord>
  </DSIG>

von

  <DSIG>
    <!-- note that the Digital Signature will be invalid after recompilation! -->
    <tableHeader flag="0x1" numSigs="1" version="1"/>
    <SignatureRecord format="1">
-----BEGIN PKCS7-----
0000000100000000
-----END PKCS7-----
    </SignatureRecord>
  </DSIG>

und speichern Sie das Ergebnis.

Erstellen Sie in beiden Fällen die Schriftartdatei neu:

ttx /Users/user/Desktop/FontMod/Andale\ Mono.ttx

Wenn Sie noch ein Snippet benötigen, um eine disg.ttx-Datei zu erstellen, verwenden Sie so etwas:

...
cat > dsig.ttx<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.0">
<DSIG>
<!-- note that the Digital Signature will be invalid after recompilation! -->
<tableHeader flag="0x1" numSigs="1" version="1"/>
<SignatureRecord format="1">
-----BEGIN PKCS7-----
0000000100000000
-----END PKCS7-----
</SignatureRecord>
</DSIG>
</ttFont>
EOF

Bitte beachten Sie, dass das xml-Encoding und die ttLibVersion ggf. an die jeweiligen Versionen in der ttf-Datei angepasst werden müssen.