Mac OS X Terminal crea archivos de cero bytes

Soy un desarrollador de fuentes. Quiero fusionar un código DSIG en una fuente de formato TrueType (TTF) , lo que lo hace compatible con las aplicaciones de Microsoft que usan funciones OpenType. He tenido esto funcionando antes, pero ahora solo puedo producir un archivo font.ttf de cero bytes. Estoy usando el kit de desarrollo de Adobe Font (AFDKO ). según lo prescrito junto con Terminal para realizar la fusión. Agradecerí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 de Terminal resultante.

  1. Inicie una nueva sesión de Terminal e ingrese

    which ttx
    

    Una ruta que termina en ttx significa que está listo para continuar.

  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, después de ingresar la tecla de retorno:

    open .
    

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

  1. Arrastre la aplicación TTX a la Terminal (ya que aceptó su fragmento 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 (digamos SassoBoo.ttf)
  2. Arrastre dsig.ttx a la terminal y presione regresar

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

  1. Cambie el nombre de 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 el arrastre 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'
Intentaré editar esto para que el formato sea más claro; aunque es posible que tengas que volver a ingresar algunos de los detalles si me equivoco...
Parece que se agregaron algunos espacios y saltos de línea adicionales. Una cosa que puede intentar sería usar un editor de texto para verificar o volver a hacer el archivo en el catpaso. Parece que tiene una secuencia de dígitos y luego un salto de línea antes de que finalice el archivo. Puede intentar nanoeditar ese archivo ya que no codifica el texto y tiene ayuda en pantalla. Además, ¿tiene un ejemplo de trabajo para comparar con el que falla?

Respuestas (1)

No es la Terminal la que crea el archivo de cero bytes, sino un montón de secuencias de comandos de Python a las que no les gusta 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 ttf copiado (en mi ejemplo, copié el archivo de fuente TrueType Andale Mono.ttf en 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 <DSIG>...</DSIG>sección, simplemente agregue el siguiente fragmento al final, justo en frente de la </ttFont>etiqueta de cierre.

  <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 guarde 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 guarde el resultado.

En cualquier caso, reconstruya el archivo de fuente:

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

Si aún necesita un fragmento 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 la versión ttLibVersion probablemente deban adaptarse a las versiones respectivas en el archivo ttf.