domenica 10 gennaio 2010

Font embedded con latex

Se lavorate nel settore della ricerca, può esservi capitato, a volte, di avere la necessità di sottomettere un lavoro ad una conferenza che richiede l'utilizzo del sito IEEE PDF eXpress, per verificare se il vostro pdf rispetta le specifiche di compatibilità del sito IEEE Xplore PDF, nel quale avviene la pubblicazione online dei lavori.
Se vi è capitato, quasi sicuramente vi siete imbattuti in un errore di questo tipo:

Errors were found on pages 1-14. Font Helvetica, Times-Italic, Times-Roman, Times-Bold, Times-BoldItalic, Helvetica-Oblique, Courier is not embedded (1659x on pages 1-14).

Tale errore indica che i font che il vostro pdf richiede non sono inglobati nel pdf stesso. Questo comporta che, se un utente scarica il vostro articolo dal sito IEEE Xplore PDF e non ha installati sulla propria macchina i font che il pdf richiede, non sarà in grado di leggerlo correttamente. Proprio per questo la verifica dei font embedded è una delle prime effettuate dal tool automatico di verifica presente in IEEE PDF eXpress.

Esiste un comando che vi permette di verificare se il vostro pdf presenta dei font embedded o no e quali sono quelli non inclusi:
$ pdffonts mypdf.pdf

L'output è qualcosa del genere:
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
[none]                               Type 3            yes no  no      11  0
Helvetica                            Type 1            no  no  no       8  0
Times-Italic                         Type 1            no  no  no      14  0
Times-Roman                          Type 1            no  no  no       9  0
Times-Bold                           Type 1            no  no  no      13  0
[none]                               Type 3            yes no  yes     26  0
[none]                               Type 3            yes no  yes     35  0
Times-BoldItalic                     Type 1            no  no  no      33  0
Helvetica-Oblique                    Type 1            no  no  no      44  0
[none]                               Type 3            yes no  no      43  0
Courier                              Type 1            no  no  no      51  0
[none]                               Type 3            yes no  yes     62  0
[none]                               Type 3            yes no  no      73  0
[none]                               Type 3            yes no  no     109  0
[none]                               Type 3            yes no  no      93  0
[none]                               Type 3            yes no  no      90  0
[none]                               Type 3            yes no  no      88  0
[none]                               Type 3            yes no  no     154  0
[none]                               Type 3            yes no  no     152  0
[none]                               Type 3            yes no  no     150  0
[none]                               Type 3            yes no  yes    148  0

Tutti i no nella 3° colonna sotto emb sono i responsabili dell'errore che ci infastidisce.

Bando alle ciance come è possibile inserire i font all'interno del pdf in modo che questo errore scompaia? Niente di più semplice. Basta utilizzare il comando updmap per configurare pdflatex e tutti gli altri tool latex in modo da inserire i font all'interno dei file di output generati. In particolare basterà lanciare la seguente serie di comandi:

$ updmap --setoption pdftexDownloadBase14 true
$ updmap --setoption dvipsPreferOutline true
$ updmap --setoption dvipsDownloadBase35 true
$ updmap --setoption dvipdfmDownloadBase14 true

Compilando il vostro sorgente latex e rilanciando il comando

$ pdffonts mypdf.pdf
adesso otterremo un output come il seguente output:

name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
XUWBUR+NimbusRomNo9L-ReguItal        Type 1C           yes yes no      16  0
YXMBPZ+NimbusRomNo9L-Medi            Type 1C           yes yes no      14  0
XGMSCW+CMSY10                        Type 1C           yes yes no      12  0
LSNASR+NimbusRomNo9L-Regu            Type 1C           yes yes no      10  0
PKDQII+NimbusSanL-Regu               Type 1C           yes yes no       8  0
CVCBUP+CMMI12                        Type 1C           yes yes no      28  0
GQHPRH+CMMI8                         Type 1C           yes yes no      37  0
RHZTYV+NimbusRomNo9L-MediItal        Type 1C           yes yes no      35  0
URIFNC+NimbusSanL-ReguItal           Type 1C           yes yes no      46  0
EKJBZX+CMMI10                        Type 1C           yes yes no      44  0
KNVWMN+NimbusMonL-Regu               Type 1C           yes yes no      53  0
WNGVSG+CMR12                         Type 1C           yes yes no      60  0
OZBJDZ+CMMI6                         Type 1C           yes yes no      72  0
SYGRQK+CMSY8                         Type 1C           yes yes yes     78  0
YICAIF+CMR8                          Type 1C           yes yes no      76  0
VMCEHD+CMEX10                        Type 1C           yes yes yes     74  0
OTJKZH+CMR7                          Type 1C           yes yes no      96  0
YGZXPE+CMSY7                         Type 1C           yes yes no      94  0
QSBHWY+CMR10                         Type 1C           yes yes no      92  0
EHWOBO+CMMI7                         Type 1C           yes yes no      90  0
Helvetica                            Type 1            no  no  no     103  0

Come vedete i font vengono adesso riconosciuti e abbiamo tutta una serie di yes nella terza colonna sotto emb. Noterete che è presente un solo no in corrispondenza del font Helvetica. Nel mio caso tale font è utilizzato solo all'interno delle immagini inserite nell'articolo. Per fare in modo che le immagini eps o pdf prodotte da tool come gnuplot o inkscape (sono i tool che utilizzo io) presentino anch'esse i font embedded sarà necessario qualche accorgimento che sarà oggetto di un prossimo post.


PS: una procedura più semplice:

$ pdftops mypdf.pdf
$ mv mypdf.ps mypdf_ok.ps
$ ps2pdf -dEmbedAllFonts=true -dPDFSETTINGS=/prepress mypdf_ok.ps