Mac OS X Terminal crea file di zero byte

1

Sono uno sviluppatore di font. Voglio unire un codice DSIG in un formato TrueType ( TTF) , che lo rende compatibile con le applicazioni Microsofts che utilizzano le funzionalità OpenType. Ho avuto questo lavoro prima, ma ora può solo produrre un file di byte.ttf zero byte. Utilizzo Adobe Development Kit Kit (AFDKO ). come prescritto insieme a Terminal per fare l'unione. Gradirei sapere perché ottengo un file di byte zero?

Ecco il mio metodo passo-passo, seguito dal codice della finestra Terminale risultante.

  1. Avvia una nuova sessione Terminale e inserisci

    which ttx
    

    Un percorso che termina con ttx significa andare bene.

  2. Incolla questo snippet ...

    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
    

    quindi dopo aver inserito la chiave di ritorno:

    open .
    

Crea una nuova cartella sul desktop intitolata "Dsig fldr". All'interno verrà creato un file appena creato denominato "dsig.ttx" da utilizzare con questa routine:

  1. Trascina l'app TTX su Terminale (dato che ha accettato il frammento di Dsig fldr):

    /Users/adrianshome/Downloads/fonttools-2.4/Tools/ttx
    
  2. Scrivi: -m (senza dimenticare uno spazio dopo la m).

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

Prima rimuovi tutti i file dsig # .ttf in Dsig fldr se ce ne sono.

Quindi per ogni file di font:

  1. Trascina il file di font ttf sul terminale (ad esempio SassoBoo.ttf)
  2. Trascina dsig.ttx sul terminale e premi Invio

Questo compilerà solo dsig.ttx, unirà il DSIG in SassoBoo.ttf e produrrà un file chiamato dsig.ttf nel Dsig fldr, quindi ora ...

  1. Rinomina dsig.ttf come SassoBoo something.ttf (il nome file TrueType originale)

Ci sono modi migliori per procedere usando gli script.

Non passare i passaggi 3 e 4. È necessario inserire il file .ttf prima del file .ttx.

Note: dsig.ttx e tutti i tuoi file .ttf devono risiedere nella cartella Dsig fldr. L'app TTX può vivere ovunque, poiché il trascinamento di esso inserisce il percorso ogni volta.

Ecco il codice terminale risultante:

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'
    
posta Adrian 31.03.2016 - 15:44
fonte

1 risposta

1

Non è il terminale che crea il file zero byte ma un sacco di script Python a cui non piace il tuo font ttf o il dummy file DSIG. Oppure il file ttf originale contiene già una firma digitale!

Il meglio che puoi provare è il seguente:

Scarica il file ttf copiato (nel mio esempio ho copiato il file di font TrueType Andale Mono.ttf in una cartella chiamata FontMod sul mio desktop):

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

Rimuovi o rinomina il file ttf originale nella cartella di lavoro. Apri il file ttx risultante con un editor di testo decente come TextWrangler , BBEdit o anche nano.

Se il file ttx non contiene una sezione <DSIG>...</DSIG> , aggiungi semplicemente lo snippet di sotto alla fine proprio di fronte al tag di chiusura </ttFont> .

  <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>

e salva il risultato.

Se il file ttx contiene già una sezione DSIG, puoi provare a sostituire la parte PKCS7:

  <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>

di

  <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>

e salva il risultato.

In entrambi i casi, ricostruisci il file font:

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

Se hai ancora bisogno di uno snippet per creare un file disg.ttx, usa qualcosa del genere:

...
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

Tieni presente che la codifica xml e ttLibVersion probabilmente devono essere adattate alle rispettive versioni nel file ttf.

    
risposta data 31.03.2016 - 19:21
fonte

Leggi altre domande sui tag