X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=pdf%2Fxpdf%2Fpdfimages.cc;h=319e141c4df4ea389b33bfa66f343c5b8955a321;hb=8e5042edbe098c8a8b760a36a8bc35dfca4e6041;hp=1825a26a6f5c936d8095c48a786ba1fff81c69c9;hpb=d9f9a6449f377b4c933b75d57541b19c6d088994;p=evince.git diff --git a/pdf/xpdf/pdfimages.cc b/pdf/xpdf/pdfimages.cc index 1825a26a..319e141c 100644 --- a/pdf/xpdf/pdfimages.cc +++ b/pdf/xpdf/pdfimages.cc @@ -2,10 +2,11 @@ // // pdfimages.cc // -// Copyright 1998 Derek B. Noonburg +// Copyright 1998-2003 Glyph & Cog, LLC // //======================================================================== +#include #include #include #include @@ -13,6 +14,7 @@ #include "parseargs.h" #include "GString.h" #include "gmem.h" +#include "GlobalParams.h" #include "Object.h" #include "Stream.h" #include "Array.h" @@ -22,14 +24,17 @@ #include "Page.h" #include "PDFDoc.h" #include "ImageOutputDev.h" -#include "Params.h" #include "Error.h" -#include "config.h" +#include "xpdfconfig.h" static int firstPage = 1; static int lastPage = 0; static GBool dumpJPEG = gFalse; -GBool printCommands = gFalse; +static char ownerPassword[33] = "\001"; +static char userPassword[33] = "\001"; +static GBool quiet = gFalse; +static char cfgFileName[256] = ""; +static GBool printVersion = gFalse; static GBool printHelp = gFalse; static ArgDesc argDesc[] = { @@ -39,10 +44,24 @@ static ArgDesc argDesc[] = { "last page to convert"}, {"-j", argFlag, &dumpJPEG, 0, "write JPEG images as JPEG files"}, + {"-opw", argString, ownerPassword, sizeof(ownerPassword), + "owner password (for encrypted files)"}, + {"-upw", argString, userPassword, sizeof(userPassword), + "user password (for encrypted files)"}, + {"-q", argFlag, &quiet, 0, + "don't print any messages or errors"}, + {"-cfg", argString, cfgFileName, sizeof(cfgFileName), + "configuration file to use in place of .xpdfrc"}, + {"-v", argFlag, &printVersion, 0, + "print copyright and version info"}, {"-h", argFlag, &printHelp, 0, "print usage information"}, {"-help", argFlag, &printHelp, 0, "print usage information"}, + {"--help", argFlag, &printHelp, 0, + "print usage information"}, + {"-?", argFlag, &printHelp, 0, + "print usage information"}, {NULL} }; @@ -50,31 +69,61 @@ int main(int argc, char *argv[]) { PDFDoc *doc; GString *fileName; char *imgRoot; + GString *ownerPW, *userPW; ImageOutputDev *imgOut; GBool ok; + int exitCode; + + exitCode = 99; // parse args ok = parseArgs(argDesc, &argc, argv); - if (!ok || argc != 3 || printHelp) { + if (!ok || argc != 3 || printVersion || printHelp) { fprintf(stderr, "pdfimages version %s\n", xpdfVersion); fprintf(stderr, "%s\n", xpdfCopyright); - printUsage("pdfimages", " ", argDesc); - exit(1); + if (!printVersion) { + printUsage("pdfimages", " ", argDesc); + } + goto err0; } fileName = new GString(argv[1]); imgRoot = argv[2]; - // init error file - errorInit(); - // read config file - initParams(xpdfConfigFile); + globalParams = new GlobalParams(cfgFileName); + if (quiet) { + globalParams->setErrQuiet(quiet); + } // open PDF file - xref = NULL; - doc = new PDFDoc(fileName); - if (!doc->isOk()) - exit(1); + if (ownerPassword[0] != '\001') { + ownerPW = new GString(ownerPassword); + } else { + ownerPW = NULL; + } + if (userPassword[0] != '\001') { + userPW = new GString(userPassword); + } else { + userPW = NULL; + } + doc = new PDFDoc(fileName, ownerPW, userPW); + if (userPW) { + delete userPW; + } + if (ownerPW) { + delete ownerPW; + } + if (!doc->isOk()) { + exitCode = 1; + goto err1; + } + + // check for copy permission + if (!doc->okToCopy()) { + error(-1, "Copying of images from this document is not allowed."); + exitCode = 3; + goto err1; + } // get page range if (firstPage < 1) @@ -84,17 +133,22 @@ int main(int argc, char *argv[]) { // write image files imgOut = new ImageOutputDev(imgRoot, dumpJPEG); - if (imgOut->isOk()) - doc->displayPages(imgOut, firstPage, lastPage, 72, 0); + if (imgOut->isOk()) { + doc->displayPages(imgOut, firstPage, lastPage, 72, 72, 0, gTrue, gFalse); + } delete imgOut; + exitCode = 0; + // clean up + err1: delete doc; - freeParams(); + delete globalParams; + err0: // check for memory leaks - Object::memCheck(errFile); - gMemReport(errFile); + Object::memCheck(stderr); + gMemReport(stderr); - return 0; + return exitCode; }