Mac OS X Terminal crea archivos de cero bytes

1

Soy un desarrollador de fuentes. Quiero fusionar un código DSIG en un formato TrueType ( TTF) font , que la hace compatible con las aplicaciones de Microsofts que utilizan las funciones de OpenType. He tenido este trabajo anteriormente, pero ahora solo puedo producir un archivo font.ttf de cero bytes. Estoy usando Kit de desarrollo de fuentes de Adobe (AFDKO ). según lo prescrito junto con la Terminal para hacer la fusión. Apreciaría saber por qué obtengo un archivo de cero bytes.

Aquí está mi método paso a paso, seguido del código de la ventana del Terminal resultante.

  1. Inicia una nueva sesión de Terminal e ingresa

    which ttx
    

    Una ruta que termina en ttx significa que está bien para ir.

  2. Pega este fragmento ...

    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
    

    luego de ingresar la clave de retorno:

    open .
    

Esto crea una nueva carpeta en el escritorio titulada ‘Dsig fldr’. Dentro habrá un archivo creado recientemente titulado 'dsig.ttx' para usar con esta rutina:

  1. Arrastre la aplicación TTX a la Terminal (ya que aceptó su fragmento de código Dsig fldr):

    /Users/adrianshome/Downloads/fonttools-2.4/Tools/ttx
    
  2. Escriba: -m (sin olvidar un espacio después de la m).

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

Primero elimine todos los archivos dsig # .ttf en Dsig fldr si hay alguno.

Luego para cada archivo de fuente:

  1. Arrastre el archivo de fuente ttf a la terminal (diga SassoBoo.ttf)
  2. Arrastra dsig.ttx a la terminal y pulsa devolver.

Eso compilará solo dsig.ttx, combinará el DSIG en SassoBoo.ttf y producirá un archivo llamado dsig.ttf en el archivo Dsig fldr, así que ahora ...

  1. Renombra dsig.ttf como SassoBoo something.ttf (el nombre de archivo TrueType original)

Hay formas mucho mejores de proceder usando scripts.

No cambie los pasos 3 y 4. Debe colocar el archivo .ttf antes del archivo .ttx.

Notas: dsig.ttx y todos sus archivos .ttf deben residir en la carpeta Dsig fldr. La aplicación TTX puede vivir en cualquier lugar, ya que su resistencia inserta la ruta cada vez.

Aquí está el código de Terminal resultante:

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

1 respuesta

1

No es la Terminal la que crea el archivo de cero bytes, sino una serie de scripts de Python que no gustan de su fuente ttf o el archivo DSIG ficticio. ¡O el archivo ttf original ya contiene una firma digital!

Lo mejor que puedes probar es lo siguiente:

Volcar el archivo de ttf copiado (en mi ejemplo copié el archivo de fuente TrueType Andale Mono.ttf a una carpeta llamada FontMod en mi escritorio):

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

Elimine o cambie el nombre del archivo ttf original en la carpeta de trabajo. Abra el archivo ttx resultante con un editor de texto decente como TextWrangler , BBEdit o incluso nano.

Si el archivo ttx no contiene una sección <DSIG>...</DSIG> , simplemente agregue el siguiente fragmento de código al final justo delante de la etiqueta de cierre </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>

y guarda el resultado.

Si el archivo ttx ya contiene una sección DSIG, puede intentar reemplazar 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>

por

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

y guarda el resultado.

En cualquier caso, reconstruya el archivo de fuente:

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

Si aún necesita un fragmento de código para crear un archivo disg.ttx, use algo como eso:

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

Tenga en cuenta que la codificación xml y ttLibVersion probablemente tienen que adaptarse a las versiones respectivas en el archivo ttf.

    
respondido por el klanomath 31.03.2016 - 19:21

Lea otras preguntas en las etiquetas