pdftopng.cc (xpdf-4.03) | : | pdftopng.cc (xpdf-4.04) | ||
---|---|---|---|---|
skipping to change at line 28 | skipping to change at line 28 | |||
#include "gmempp.h" | #include "gmempp.h" | |||
#include "parseargs.h" | #include "parseargs.h" | |||
#include "GString.h" | #include "GString.h" | |||
#include "gfile.h" | #include "gfile.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; | |||
static GBool pngAlpha = gFalse; | static GBool pngAlpha = gFalse; | |||
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 74 | skipping to change at line 76 | |||
"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 105 | skipping to change at line 109 | |||
static void finishPNG(png_structp *png, png_infop *pngInfo); | static void finishPNG(png_structp *png, png_infop *pngInfo); | |||
int main(int argc, char *argv[]) { | int main(int argc, char *argv[]) { | |||
PDFDoc *doc; | PDFDoc *doc; | |||
char *fileName; | char *fileName; | |||
char *pngRoot; | char *pngRoot; | |||
GString *pngFile; | GString *pngFile; | |||
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; | int pg; | |||
png_structp png; | png_structp png; | |||
png_infop pngInfo; | png_infop pngInfo; | |||
FILE *f; | FILE *f; | |||
exitCode = 99; | exitCode = 99; | |||
// parse args | // parse args | |||
fixCommandLine(&argc, &argv); | fixCommandLine(&argc, &argv); | |||
skipping to change at line 137 | skipping to change at line 141 | |||
fprintf(stderr, "%s\n", xpdfCopyright); | fprintf(stderr, "%s\n", xpdfCopyright); | |||
if (!printVersion) { | if (!printVersion) { | |||
printUsage("pdftopng", "<PDF-file> <PNG-root>", argDesc); | printUsage("pdftopng", "<PDF-file> <PNG-root>", argDesc); | |||
} | } | |||
goto err0; | goto err0; | |||
} | } | |||
fileName = argv[1]; | fileName = argv[1]; | |||
pngRoot = argv[2]; | pngRoot = 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 187 | skipping to change at line 198 | |||
exitCode = 1; | exitCode = 1; | |||
goto err1; | goto err1; | |||
} | } | |||
// get page range | // get page range | |||
if (firstPage < 1) | if (firstPage < 1) | |||
firstPage = 1; | firstPage = 1; | |||
if (lastPage < 1 || lastPage > doc->getNumPages()) | if (lastPage < 1 || lastPage > doc->getNumPages()) | |||
lastPage = doc->getNumPages(); | lastPage = doc->getNumPages(); | |||
// check for stdout; set up to print per-page status info | ||||
toStdout = !strcmp(pngRoot, "-"); | ||||
printStatusInfo = !toStdout && globalParams->getPrintStatusInfo(); | ||||
// write PNG files | // write PNG 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); | |||
} 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); | |||
} | } | |||
if (pngAlpha) { | if (pngAlpha) { | |||
splashOut->setNoComposite(gTrue); | splashOut->setNoComposite(gTrue); | |||
} | } | |||
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 (mono) { | if (mono) { | |||
if (!strcmp(pngRoot, "-")) { | if (toStdout) { | |||
f = stdout; | f = stdout; | |||
#ifdef _WIN32 | #ifdef _WIN32 | |||
_setmode(_fileno(f), _O_BINARY); | _setmode(_fileno(f), _O_BINARY); | |||
#endif | #endif | |||
} else { | } else { | |||
pngFile = GString::format("{0:s}-{1:06d}.png", pngRoot, pg); | pngFile = GString::format("{0:s}-{1:06d}.png", pngRoot, pg); | |||
if (!(f = openFile(pngFile->getCString(), "wb"))) { | if (!(f = openFile(pngFile->getCString(), "wb"))) { | |||
exit(2); | exit(2); | |||
} | } | |||
delete pngFile; | delete pngFile; | |||
} | } | |||
setupPNG(&png, &pngInfo, f, | setupPNG(&png, &pngInfo, f, | |||
1, PNG_COLOR_TYPE_GRAY, resolution, splashOut->getBitmap()); | 1, PNG_COLOR_TYPE_GRAY, resolution, splashOut->getBitmap()); | |||
writePNGData(png, splashOut->getBitmap()); | writePNGData(png, splashOut->getBitmap()); | |||
finishPNG(&png, &pngInfo); | finishPNG(&png, &pngInfo); | |||
fclose(f); | fclose(f); | |||
} else if (gray) { | } else if (gray) { | |||
if (!strcmp(pngRoot, "-")) { | if (toStdout) { | |||
f = stdout; | f = stdout; | |||
#ifdef _WIN32 | #ifdef _WIN32 | |||
_setmode(_fileno(f), _O_BINARY); | _setmode(_fileno(f), _O_BINARY); | |||
#endif | #endif | |||
} else { | } else { | |||
pngFile = GString::format("{0:s}-{1:06d}.png", pngRoot, pg); | pngFile = GString::format("{0:s}-{1:06d}.png", pngRoot, pg); | |||
if (!(f = openFile(pngFile->getCString(), "wb"))) { | if (!(f = openFile(pngFile->getCString(), "wb"))) { | |||
exit(2); | exit(2); | |||
} | } | |||
delete pngFile; | delete pngFile; | |||
} | } | |||
setupPNG(&png, &pngInfo, f, | setupPNG(&png, &pngInfo, f, | |||
8, pngAlpha ? PNG_COLOR_TYPE_GRAY_ALPHA : PNG_COLOR_TYPE_GRAY, | 8, pngAlpha ? PNG_COLOR_TYPE_GRAY_ALPHA : PNG_COLOR_TYPE_GRAY, | |||
resolution, splashOut->getBitmap()); | resolution, splashOut->getBitmap()); | |||
writePNGData(png, splashOut->getBitmap()); | writePNGData(png, splashOut->getBitmap()); | |||
finishPNG(&png, &pngInfo); | finishPNG(&png, &pngInfo); | |||
fclose(f); | fclose(f); | |||
} else { // RGB | } else { // RGB | |||
if (!strcmp(pngRoot, "-")) { | if (toStdout) { | |||
f = stdout; | f = stdout; | |||
#ifdef _WIN32 | #ifdef _WIN32 | |||
_setmode(_fileno(f), _O_BINARY); | _setmode(_fileno(f), _O_BINARY); | |||
#endif | #endif | |||
} else { | } else { | |||
pngFile = GString::format("{0:s}-{1:06d}.png", pngRoot, pg); | pngFile = GString::format("{0:s}-{1:06d}.png", pngRoot, pg); | |||
if (!(f = openFile(pngFile->getCString(), "wb"))) { | if (!(f = openFile(pngFile->getCString(), "wb"))) { | |||
exit(2); | exit(2); | |||
} | } | |||
delete pngFile; | delete pngFile; | |||
End of changes. 11 change blocks. | ||||
4 lines changed or deleted | 24 lines changed or added |