pdftoppm.cc (xpdf-4.03) | : | pdftoppm.cc (xpdf-4.04) | ||
---|---|---|---|---|
skipping to change at line 29 | skipping to change at line 29 | |||
#include "gmem.h" | #include "gmem.h" | |||
#include "gmempp.h" | #include "gmempp.h" | |||
#include "parseargs.h" | #include "parseargs.h" | |||
#include "GString.h" | #include "GString.h" | |||
#include "GlobalParams.h" | #include "GlobalParams.h" | |||
#include "Object.h" | #include "Object.h" | |||
#include "PDFDoc.h" | #include "PDFDoc.h" | |||
#include "SplashBitmap.h" | #include "SplashBitmap.h" | |||
#include "Splash.h" | #include "Splash.h" | |||
#include "SplashOutputDev.h" | #include "SplashOutputDev.h" | |||
#include "Error.h" | ||||
#include "config.h" | #include "config.h" | |||
static int firstPage = 1; | static int firstPage = 1; | |||
static int lastPage = 0; | static int lastPage = 0; | |||
static double resolution = 150; | static double resolution = 150; | |||
static GBool mono = gFalse; | static GBool mono = gFalse; | |||
static GBool gray = gFalse; | static GBool gray = gFalse; | |||
#if SPLASH_CMYK | #if SPLASH_CMYK | |||
static GBool cmyk = gFalse; | static GBool cmyk = gFalse; | |||
#endif | #endif | |||
static int rotate = 0; | static int rotate = 0; | |||
static char enableFreeTypeStr[16] = ""; | static char enableFreeTypeStr[16] = ""; | |||
static char antialiasStr[16] = ""; | static char antialiasStr[16] = ""; | |||
static char vectorAntialiasStr[16] = ""; | static char vectorAntialiasStr[16] = ""; | |||
static char ownerPassword[33] = ""; | static char ownerPassword[33] = ""; | |||
static char userPassword[33] = ""; | static char userPassword[33] = ""; | |||
static GBool verbose = gFalse; | ||||
static GBool quiet = gFalse; | static GBool quiet = gFalse; | |||
static char cfgFileName[256] = ""; | static char cfgFileName[256] = ""; | |||
static GBool printVersion = gFalse; | static GBool printVersion = gFalse; | |||
static GBool printHelp = gFalse; | static GBool printHelp = gFalse; | |||
static ArgDesc argDesc[] = { | static ArgDesc argDesc[] = { | |||
{"-f", argInt, &firstPage, 0, | {"-f", argInt, &firstPage, 0, | |||
"first page to print"}, | "first page to print"}, | |||
{"-l", argInt, &lastPage, 0, | {"-l", argInt, &lastPage, 0, | |||
"last page to print"}, | "last page to print"}, | |||
skipping to change at line 79 | skipping to change at line 81 | |||
"enable FreeType font rasterizer: yes, no"}, | "enable FreeType font rasterizer: yes, no"}, | |||
#endif | #endif | |||
{"-aa", argString, antialiasStr, sizeof(antialiasStr), | {"-aa", argString, antialiasStr, sizeof(antialiasStr), | |||
"enable font anti-aliasing: yes, no"}, | "enable font anti-aliasing: yes, no"}, | |||
{"-aaVector", argString, vectorAntialiasStr, sizeof(vectorAntialiasStr) , | {"-aaVector", argString, vectorAntialiasStr, sizeof(vectorAntialiasStr) , | |||
"enable vector anti-aliasing: yes, no"}, | "enable vector anti-aliasing: yes, no"}, | |||
{"-opw", argString, ownerPassword, sizeof(ownerPassword), | {"-opw", argString, ownerPassword, sizeof(ownerPassword), | |||
"owner password (for encrypted files)"}, | "owner password (for encrypted files)"}, | |||
{"-upw", argString, userPassword, sizeof(userPassword), | {"-upw", argString, userPassword, sizeof(userPassword), | |||
"user password (for encrypted files)"}, | "user password (for encrypted files)"}, | |||
{"-verbose", argFlag, &verbose, 0, | ||||
"print per-page status information"}, | ||||
{"-q", argFlag, &quiet, 0, | {"-q", argFlag, &quiet, 0, | |||
"don't print any messages or errors"}, | "don't print any messages or errors"}, | |||
{"-cfg", argString, cfgFileName, sizeof(cfgFileName), | {"-cfg", argString, cfgFileName, sizeof(cfgFileName), | |||
"configuration file to use in place of .xpdfrc"}, | "configuration file to use in place of .xpdfrc"}, | |||
{"-v", argFlag, &printVersion, 0, | {"-v", argFlag, &printVersion, 0, | |||
"print copyright and version info"}, | "print copyright and version info"}, | |||
{"-h", argFlag, &printHelp, 0, | {"-h", argFlag, &printHelp, 0, | |||
"print usage information"}, | "print usage information"}, | |||
{"-help", argFlag, &printHelp, 0, | {"-help", argFlag, &printHelp, 0, | |||
"print usage information"}, | "print usage information"}, | |||
skipping to change at line 104 | skipping to change at line 108 | |||
}; | }; | |||
int main(int argc, char *argv[]) { | int main(int argc, char *argv[]) { | |||
PDFDoc *doc; | PDFDoc *doc; | |||
char *fileName; | char *fileName; | |||
char *ppmRoot; | char *ppmRoot; | |||
GString *ppmFile; | GString *ppmFile; | |||
GString *ownerPW, *userPW; | GString *ownerPW, *userPW; | |||
SplashColor paperColor; | SplashColor paperColor; | |||
SplashOutputDev *splashOut; | SplashOutputDev *splashOut; | |||
GBool ok; | GBool ok, toStdout, printStatusInfo; | |||
int exitCode; | int exitCode; | |||
int pg, n; | int pg, n; | |||
const char *ext; | const char *ext; | |||
#ifdef DEBUG_FP_LINUX | #ifdef DEBUG_FP_LINUX | |||
// enable exceptions on floating point div-by-zero | // enable exceptions on floating point div-by-zero | |||
feenableexcept(FE_DIVBYZERO); | feenableexcept(FE_DIVBYZERO); | |||
// force 64-bit rounding: this avoids changes in output when minor | // force 64-bit rounding: this avoids changes in output when minor | |||
// code changes result in spills of x87 registers; it also avoids | // code changes result in spills of x87 registers; it also avoids | |||
// differences in output with valgrind's 64-bit floating point | // differences in output with valgrind's 64-bit floating point | |||
skipping to change at line 150 | skipping to change at line 154 | |||
fprintf(stderr, "%s\n", xpdfCopyright); | fprintf(stderr, "%s\n", xpdfCopyright); | |||
if (!printVersion) { | if (!printVersion) { | |||
printUsage("pdftoppm", "<PDF-file> <PPM-root>", argDesc); | printUsage("pdftoppm", "<PDF-file> <PPM-root>", argDesc); | |||
} | } | |||
goto err0; | goto err0; | |||
} | } | |||
fileName = argv[1]; | fileName = argv[1]; | |||
ppmRoot = argv[2]; | ppmRoot = argv[2]; | |||
// read config file | // read config file | |||
if (cfgFileName[0] && !pathIsFile(cfgFileName)) { | ||||
error(errConfig, -1, "Config file '{0:s}' doesn't exist or isn't a file", | ||||
cfgFileName); | ||||
} | ||||
globalParams = new GlobalParams(cfgFileName); | globalParams = new GlobalParams(cfgFileName); | |||
globalParams->setupBaseFonts(NULL); | globalParams->setupBaseFonts(NULL); | |||
if (enableFreeTypeStr[0]) { | if (enableFreeTypeStr[0]) { | |||
if (!globalParams->setEnableFreeType(enableFreeTypeStr)) { | if (!globalParams->setEnableFreeType(enableFreeTypeStr)) { | |||
fprintf(stderr, "Bad '-freetype' value on command line\n"); | fprintf(stderr, "Bad '-freetype' value on command line\n"); | |||
} | } | |||
} | } | |||
if (antialiasStr[0]) { | if (antialiasStr[0]) { | |||
if (!globalParams->setAntialias(antialiasStr)) { | if (!globalParams->setAntialias(antialiasStr)) { | |||
fprintf(stderr, "Bad '-aa' value on command line\n"); | fprintf(stderr, "Bad '-aa' value on command line\n"); | |||
} | } | |||
} | } | |||
if (vectorAntialiasStr[0]) { | if (vectorAntialiasStr[0]) { | |||
if (!globalParams->setVectorAntialias(vectorAntialiasStr)) { | if (!globalParams->setVectorAntialias(vectorAntialiasStr)) { | |||
fprintf(stderr, "Bad '-aaVector' value on command line\n"); | fprintf(stderr, "Bad '-aaVector' value on command line\n"); | |||
} | } | |||
} | } | |||
if (verbose) { | ||||
globalParams->setPrintStatusInfo(verbose); | ||||
} | ||||
if (quiet) { | if (quiet) { | |||
globalParams->setErrQuiet(quiet); | globalParams->setErrQuiet(quiet); | |||
} | } | |||
// open PDF file | // open PDF file | |||
if (ownerPassword[0]) { | if (ownerPassword[0]) { | |||
ownerPW = new GString(ownerPassword); | ownerPW = new GString(ownerPassword); | |||
} else { | } else { | |||
ownerPW = NULL; | ownerPW = NULL; | |||
} | } | |||
skipping to change at line 213 | skipping to change at line 224 | |||
} else if (gray) { | } else if (gray) { | |||
ext = "pgm"; | ext = "pgm"; | |||
#if SPLASH_CMYK | #if SPLASH_CMYK | |||
} else if (cmyk) { | } else if (cmyk) { | |||
ext = "pam"; | ext = "pam"; | |||
#endif | #endif | |||
} else { | } else { | |||
ext = "ppm"; | ext = "ppm"; | |||
} | } | |||
// check for stdout; set up to print per-page status info | ||||
toStdout = !strcmp(ppmRoot, "-"); | ||||
printStatusInfo = !toStdout && globalParams->getPrintStatusInfo(); | ||||
// write PPM files | // write PPM files | |||
if (mono) { | if (mono) { | |||
paperColor[0] = 0xff; | paperColor[0] = 0xff; | |||
splashOut = new SplashOutputDev(splashModeMono1, 1, gFalse, paperColor); | splashOut = new SplashOutputDev(splashModeMono1, 1, gFalse, paperColor); | |||
} else if (gray) { | } else if (gray) { | |||
paperColor[0] = 0xff; | paperColor[0] = 0xff; | |||
splashOut = new SplashOutputDev(splashModeMono8, 1, gFalse, paperColor); | splashOut = new SplashOutputDev(splashModeMono8, 1, gFalse, paperColor); | |||
#if SPLASH_CMYK | #if SPLASH_CMYK | |||
} else if (cmyk) { | } else if (cmyk) { | |||
paperColor[0] = paperColor[1] = paperColor[2] = paperColor[3] = 0; | paperColor[0] = paperColor[1] = paperColor[2] = paperColor[3] = 0; | |||
splashOut = new SplashOutputDev(splashModeCMYK8, 1, gFalse, paperColor); | splashOut = new SplashOutputDev(splashModeCMYK8, 1, gFalse, paperColor); | |||
#endif // SPLASH_CMYK | #endif // SPLASH_CMYK | |||
} else { | } else { | |||
paperColor[0] = paperColor[1] = paperColor[2] = 0xff; | paperColor[0] = paperColor[1] = paperColor[2] = 0xff; | |||
splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, paperColor); | splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, paperColor); | |||
} | } | |||
splashOut->startDoc(doc->getXRef()); | splashOut->startDoc(doc->getXRef()); | |||
for (pg = firstPage; pg <= lastPage; ++pg) { | for (pg = firstPage; pg <= lastPage; ++pg) { | |||
if (printStatusInfo) { | ||||
fflush(stderr); | ||||
printf("[processing page %d]\n", pg); | ||||
fflush(stdout); | ||||
} | ||||
doc->displayPage(splashOut, pg, resolution, resolution, rotate, | doc->displayPage(splashOut, pg, resolution, resolution, rotate, | |||
gFalse, gTrue, gFalse); | gFalse, gTrue, gFalse); | |||
if (!strcmp(ppmRoot, "-")) { | if (toStdout) { | |||
#ifdef _WIN32 | #ifdef _WIN32 | |||
_setmode(_fileno(stdout), _O_BINARY); | _setmode(_fileno(stdout), _O_BINARY); | |||
#endif | #endif | |||
splashOut->getBitmap()->writePNMFile(stdout); | splashOut->getBitmap()->writePNMFile(stdout); | |||
} else { | } else { | |||
ppmFile = GString::format("{0:s}-{1:06d}.{2:s}", ppmRoot, pg, ext); | ppmFile = GString::format("{0:s}-{1:06d}.{2:s}", ppmRoot, pg, ext); | |||
splashOut->getBitmap()->writePNMFile(ppmFile->getCString()); | splashOut->getBitmap()->writePNMFile(ppmFile->getCString()); | |||
delete ppmFile; | delete ppmFile; | |||
} | } | |||
} | } | |||
End of changes. 9 change blocks. | ||||
2 lines changed or deleted | 22 lines changed or added |