--- poppler-30jul09/utils/pdftops.1- 2009-07-30 01:10:42.000000000 +0100 +++ poppler-30jul09/utils/pdftops.1 2009-07-31 22:36:32.000000000 +0100 @@ -1,5 +1,5 @@ .\" Copyright 1996-2004 Glyph & Cog, LLC -.TH pdftops 1 "22 January 2004" +.TH pdftops 1 "31 July 2009" .SH NAME pdftops \- Portable Document Format (PDF) to PostScript converter (version 3.00) @@ -120,6 +120,12 @@ embedding. No attempt is made to substitute for non-embedded CID TrueType fonts. .TP +.B \-passfonts +By default, references to non-embedded 8-bit fonts in the PDF file are +substituted with the closest "Helvetica", "Times-Roman", or "Courier" font. +This option passes references to non-embedded fonts +through to the PostScript file. +.TP .B \-preload preload images and forms .TP --- poppler-30jul09/utils/pdftops.cc- 2009-07-30 01:10:42.000000000 +0100 +++ poppler-30jul09/utils/pdftops.cc 2009-07-31 22:29:55.000000000 +0100 @@ -86,6 +86,7 @@ static GBool noEmbedTTFonts = gFalse; static GBool noEmbedCIDPSFonts = gFalse; static GBool noEmbedCIDTTFonts = gFalse; +static GBool noSubstFonts = gFalse; static GBool preload = gFalse; static char paperSize[15] = ""; static int paperWidth = -1; @@ -136,6 +137,8 @@ "don't embed CID PostScript fonts"}, {"-noembcidtt", argFlag, &noEmbedCIDTTFonts, 0, "don't embed CID TrueType fonts"}, + {"-passfonts", argFlag, &noSubstFonts,0, + "don't substitute missing fonts"}, {"-preload", argFlag, &preload, 0, "preload images and forms"}, {"-paper", argString, paperSize, sizeof(paperSize), @@ -269,6 +272,9 @@ if (noEmbedCIDTTFonts) { globalParams->setPSEmbedCIDTrueType(!noEmbedCIDTTFonts); } + if (noSubstFonts) { + globalParams->setPSSubstFonts(!noSubstFonts); + } if (preload) { globalParams->setPSPreload(preload); } --- poppler-30jul09/poppler/GlobalParams.h- 2009-07-30 01:10:42.000000000 +0100 +++ poppler-30jul09/poppler/GlobalParams.h 2009-07-30 01:12:09.000000000 +0100 @@ -193,6 +193,7 @@ GBool getPSEmbedTrueType(); GBool getPSEmbedCIDPostScript(); GBool getPSEmbedCIDTrueType(); + GBool getPSSubstFonts(); GBool getPSPreload(); GBool getPSOPI(); GBool getPSASCIIHex(); @@ -238,6 +239,7 @@ void setPSEmbedTrueType(GBool embed); void setPSEmbedCIDPostScript(GBool embed); void setPSEmbedCIDTrueType(GBool embed); + void setPSSubstFonts(GBool substFonts); void setPSPreload(GBool preload); void setPSOPI(GBool opi); void setPSASCIIHex(GBool hex); @@ -317,6 +319,7 @@ GBool psEmbedTrueType; // embed TrueType fonts? GBool psEmbedCIDPostScript; // embed CID PostScript fonts? GBool psEmbedCIDTrueType; // embed CID TrueType fonts? + GBool psSubstFonts; // substitute missing fonts? GBool psPreload; // preload PostScript images and forms into // memory GBool psOPI; // generate PostScript OPI comments? --- poppler-30jul09/poppler/GlobalParams.cc- 2009-07-30 01:10:42.000000000 +0100 +++ poppler-30jul09/poppler/GlobalParams.cc 2009-07-30 01:12:09.000000000 +0100 @@ -602,6 +602,7 @@ psEmbedTrueType = gTrue; psEmbedCIDPostScript = gTrue; psEmbedCIDTrueType = gTrue; + psSubstFonts = gTrue; psPreload = gFalse; psOPI = gFalse; psASCIIHex = gFalse; @@ -1280,6 +1281,15 @@ return e; } +GBool GlobalParams::getPSSubstFonts() { + GBool e; + + lockGlobalParams; + e = psSubstFonts; + unlockGlobalParams; + return e; +} + GBool GlobalParams::getPSPreload() { GBool preload; @@ -1649,6 +1659,12 @@ unlockGlobalParams; } +void GlobalParams::setPSSubstFonts(GBool substFonts) { + lockGlobalParams; + psSubstFonts = substFonts; + unlockGlobalParams; +} + void GlobalParams::setPSPreload(GBool preload) { lockGlobalParams; psPreload = preload; --- poppler-30jul09/poppler/PSOutputDev.h- 2009-07-30 01:10:42.000000000 +0100 +++ poppler-30jul09/poppler/PSOutputDev.h 2009-07-30 01:12:09.000000000 +0100 @@ -358,6 +358,7 @@ // (only psModePSOrigPageSizes output mode) int imgLLX, imgLLY, // imageable area, in pts imgURX, imgURY; + GBool substFonts; // substitute missing fonts GBool preload; // load all images into memory, and // predefine forms --- poppler-30jul09/poppler/PSOutputDev.cc- 2009-07-30 01:10:42.000000000 +0100 +++ poppler-30jul09/poppler/PSOutputDev.cc 2009-07-31 04:10:55.000000000 +0100 @@ -1106,6 +1104,7 @@ paperHeight = 1; } } + substFonts = globalParams->getPSSubstFonts(); preload = globalParams->getPSPreload(); if (imgLLX == 0 && imgURX == 0 && imgLLY == 0 && imgURY == 0) { imgLLX = imgLLY = 0; @@ -1751,34 +1750,39 @@ } } if (!psName) { - if (font->isFixedWidth()) { - i = 8; - } else if (font->isSerif()) { - i = 4; - } else { - i = 0; - } - if (font->isBold()) { - i += 2; - } - if (font->isItalic()) { - i += 1; - } - psName = new GooString(psSubstFonts[i].psName); - for (code = 0; code < 256; ++code) { - if ((charName = ((Gfx8BitFont *)font)->getCharName(code)) && - charName[0] == 'm' && charName[1] == '\0') { - break; + if (substFonts) { + if (font->isFixedWidth()) { + i = 8; + } else if (font->isSerif()) { + i = 4; + } else { + i = 0; + } + if (font->isBold()) { + i += 2; + } + if (font->isItalic()) { + i += 1; + } + psName = new GooString(psSubstFonts[i].psName); + for (code = 0; code < 256; ++code) { + if ((charName = ((Gfx8BitFont *)font)->getCharName(code)) && + charName[0] == 'm' && charName[1] == '\0') { + break; + } + } + if (code < 256) { + w1 = ((Gfx8BitFont *)font)->getWidth(code); + } else { + w1 = 0; + } + w2 = psSubstFonts[i].mWidth; + xs = w1 / w2; + if (xs < 0.1) { + xs = 1; } - } - if (code < 256) { - w1 = ((Gfx8BitFont *)font)->getWidth(code); } else { - w1 = 0; - } - w2 = psSubstFonts[i].mWidth; - xs = w1 / w2; - if (xs < 0.1) { + psName = new GooString(name); xs = 1; } if (font->getType() == fontType3) {