Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make Ghostscript's `ps2pdf14` stop subsetting fonts

Tags:

I am using the ps2pdf14 utility that ships with Ghostscript, and I am having a problem with fonts.

It does not seem to matter what instructions I pass to the command, it insists on subsetting any fonts it finds in the source document.

e.g

-dPDFSETTINGS#/prepress 
-dEmbedAllFonts#true 
-dSubsetFonts#false 
-dMaxSubsetPct#0

Note that the # is because the command is running on Windows, it is the same as =.

If anyone has any idea how to tell ps2pdf not to subset fonts, I would be very grateful.

--------------------------Notes ------------------------------------------

The source file is a PDF containing embedded fonts, so it is the fonts already embedded in the source file, that I need to prevent being subset in the destination file.

Currently all source file embedded fonts are subset, in some cases this is not apparent from the font name, i.e it contains no hash, and appears at first glance to be the full font, however the widths array has been subset in all cases.

like image 934
Gavin Avatar asked Sep 13 '09 16:09

Gavin


1 Answers

I'm not sure what exactly you do want to achieve. Possibly no fonts at all embedded (not even as a subset)? Or is it "I want not subset, but the complete font"?

Note 1:

  • the ps2pdf14 utility is a batch file which invokes the real gswin32c.exe with a pre-set array of command line parameters. You are more flexible to experiment if you construct the gswin32c commandline fully on your own.

Note 2:

  • Ghostscript cannot un-embed fonts from a source PDF (at least AFAIK).

I have always had success controlling font embedding policies with the following commandlines:

  gswin32c.exe ^
    -dBATCH ^
    -dNOPAUSE ^
    -sOutputFile=c:/path/to/my/output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/prepress ^
    -dCompressFonts=false ^
    -dSubsetFonts=false ^
    -dEmbedAllFonts=true ^
    -c ".setpdfwrite <</NeverEmbed [ ]>> setdistillerparams" ^
    -f c:/path/to/my/postscript.ps

The previous one embeds all fonts (even the "Base 14" ones), fully (no subsetting). The next one does not embed any fonts:

  gswin32c.exe ^
    -dBATCH ^
    -dNOPAUSE ^
    -sOutputFile=c:/path/to/my/output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/default ^
    -dEmbedAllFonts=false ^
    -c ".setpdfwrite <</AlwaysEmbed [ ]>> setdistillerparams" ^
    -f c:/path/to/my/postscript.ps

Note 3:

  • the .setpdfwrite part invokes defaults deemed to be beneficial for PDF creation. If it appears last on the commandline, it may override what you did set before. Hence the /NeverEmbed [ ] and/or /AlwaysEmbed [ ] p parts added afterwards, just before invoking the input file.
like image 199
Kurt Pfeifle Avatar answered Oct 04 '22 19:10

Kurt Pfeifle