[poppler] [PATCH] per-collection fallback for missing CID-keyed fonts on Win32

mpsuzuki at hiroshima-u.ac.jp mpsuzuki at hiroshima-u.ac.jp
Fri Apr 6 06:59:17 PDT 2012

Dear Albert,

On Fri, 06 Apr 2012 15:14:47 +0200
Albert Astals Cid <aacid at kde.org> wrote:

>El Dilluns, 2 d'abril de 2012, a les 18:50:16, mpsuzuki at hiroshima-u.ac.jp va 
>> I think, pdffonts should notice how the fonts are fallbacked
>> in the rasterization (or the conversion to vector output
>> device), primarily. 
>Are you speaking of pdffonts -subst here? Seems to work fine for me. Or are 
>you saying it doesn't work in Windows?

Thank you very much for clarification that this is Windows
issue. I'm quite sorry for unclear mention about this.

Yes, I'm speaking of "pdffonts -subst". On Windows, the result
by "pdffonts -subst" for a sample PDF of base14 fonts
( https://bugs.freedesktop.org/show_bug.cgi?id=48040 ),
is inconsistent with the rasterization result of pdftoppm.

The "pdffonts -subst" on Windows is like following.

name                                 object ID substitute font                      substitute font file
------------------------------------ --------- ------------------------------------ ------------------------------------
Courier-BoldOblique                      14  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Helvetica                                15  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Helvetica-Oblique                        16  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Helvetica-Bold                           17  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Helvetica-BoldOblique                    18  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Times-Roman                              19  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Times-Italic                             20  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Times-Bold                               21  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Times-BoldItalic                         22  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Symbol                                   24  0 [none]                               C:\WINDOWS\Fonts\SYMBOL.TTF
ZapfDingbats                             26  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
CourierNew                               27  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
CourierNew,Italic                        28  0 [none]                               C:\WINDOWS\Fonts\COUR.TTF
CourierNew,Bold                          29  0 [none]                               C:\WINDOWS\Fonts\COUR.TTF
CourierNew,BoldItalic                    30  0 [none]                               C:\WINDOWS\Fonts\COURI.TTF
Arial                                    31  0 [none]                               C:\WINDOWS\Fonts\ARIAL.TTF
Arial,Italic                             32  0 [none]                               C:\WINDOWS\Fonts\ARIALI.TTF
Arial,Bold                               33  0 [none]                               C:\WINDOWS\Fonts\ARIALBD.TTF
Arial,BoldItalic                         34  0 [none]                               C:\WINDOWS\Fonts\ARIALBI.TTF
TimesNewRoman                            35  0 [none]                               C:\WINDOWS\Fonts\TIMES.TTF
TimesNewRoman,Italic                     36  0 [none]                               C:\WINDOWS\Fonts\TIMESI.TTF
TimesNewRoman,Bold                       37  0 [none]                               C:\WINDOWS\Fonts\TIMESBD.TTF
TimesNewRoman,BoldItalic                 38  0 [none]                               C:\WINDOWS\Fonts\TIMESBI.TTF
Courier                                  39  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Courier-Oblique                          40  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf
Courier-Bold                             41  0 C:\WINDOWS\Fonts\arial.ttf           C:\WINDOWS\Fonts\arial.ttf

It looks like as if Courier and Times-Roman will be substituted
by Arial. It is unwanted result. But, as you can find by the pictures
(pdftoppm) on https://bugs.freedesktop.org/show_bug.cgi?id=48040 ,
Courier is substituted by Courier New, Times-Roman is substituted
by Timew New Roman (it is wanted result). I think pdffonts is
expected to return the font substititions that pdftoppm will do.
If the consistency between pdftoppm and "pdffonts -subst" is
agreed, I will post a patch. However, the change by my patch for
this issue will modifies non-Windows part too. So I don't want to
do it for 0.20 because insufficient time to testing.

>> As the extra features, the indication of
>> the last rule choosing the final result would be helpful,
>> when poppler have external configuration file to control the
>> font substition (it's since 0.20!).
>External configuration file to control font substitution is something we do 
>*not* want.

Oh, thank you again for the clarification. I remember your
attitude about external configuration file when we discussed
about the hint control - I know you don't want it, and I will
follow your decision. But, the patch by Thomas for GlobalParamsWin.cc
includes a feature to use external font substitution mapping
table "cidfmap". It should be removed, or should be kept?

commit dae29c6c201cd69cbf4f008de865cc19a36f29b3
Author: Thomas Freitag <Thomas.Freitag at alfa.de>
Date:   Sun Mar 4 15:22:02 2012 +0100

    CJK substitute implementation on WIndows platforms.
    When You install ghostscript on WIndows You're able to switch on CJK
    support. This will create a  cidfmap file in the gs-lib directory. The
    ps file which creates it (mkcidfm.ps) runs over the windows font
    directory and tries to create a suitable substitution table for missing
    CJK fonts. The cidfmap file is more or less PDF like, so it's quite easy
    to parse it with our parser and create a substitution table in
    GlobalParamsWin and use that table. But I expect it in the poppler data
    dir instead of searching for ghostscript installation. If it is not
    there, it always returns the default CID font of point 2.
    You can either copy it from the gs lib directory or create it with the
    ghostscript tool calling
    gswin32c -q -dBATCH -sFONTDIR=<windows font directory>
    -sCIDFMAP=<popper data dir>/cidfmap mkcidfm.ps

In my personal opinion, I'm questionable about the requirement
of this feature. There might be some people who want to make the
font substitutions by Ghostscript and poppler-related softwares
aligned, and "cidfmap" support may be useful for their purpose.

But, at present, cidfmap support is only implemented for Windows
(to serve for the people expecting same font substitution, non-
Windows platforms should support cidfmap, I think), and, Ghostscript
is not good tool to generate & maintain cidfmap automatically.

What should we do for "cidfmap" feature?


More information about the poppler mailing list