00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <aconf.h>
00010 #include <stdio.h>
00011 #include <stdlib.h>
00012 #include <stddef.h>
00013 #include <string.h>
00014 #include "parseargs.h"
00015 #include "GString.h"
00016 #include "gmem.h"
00017 #include "GlobalParams.h"
00018 #include "Object.h"
00019 #include "Stream.h"
00020 #include "Array.h"
00021 #include "Dict.h"
00022 #include "XRef.h"
00023 #include "Catalog.h"
00024 #include "Page.h"
00025 #include "PDFDoc.h"
00026 #include "PBMOutputDev.h"
00027 #include "Error.h"
00028 #include "config.h"
00029
00030 static int firstPage = 1;
00031 static int lastPage = 0;
00032 static int resolution = 150;
00033 static char ownerPassword[33] = "";
00034 static char userPassword[33] = "";
00035 static GBool quiet = gFalse;
00036 static char cfgFileName[256] = "";
00037 static GBool printVersion = gFalse;
00038 static GBool printHelp = gFalse;
00039
00040 static ArgDesc argDesc[] = {
00041 {"-f", argInt, &firstPage, 0,
00042 "first page to print"},
00043 {"-l", argInt, &lastPage, 0,
00044 "last page to print"},
00045 {"-r", argInt, &resolution, 0,
00046 "resolution, in DPI (default is 150)"},
00047 {"-opw", argString, ownerPassword, sizeof(ownerPassword),
00048 "owner password (for encrypted files)"},
00049 {"-upw", argString, userPassword, sizeof(userPassword),
00050 "user password (for encrypted files)"},
00051 {"-q", argFlag, &quiet, 0,
00052 "don't print any messages or errors"},
00053 {"-cfg", argString, cfgFileName, sizeof(cfgFileName),
00054 "configuration file to use in place of .xpdfrc"},
00055 {"-v", argFlag, &printVersion, 0,
00056 "print copyright and version info"},
00057 {"-h", argFlag, &printHelp, 0,
00058 "print usage information"},
00059 {"-help", argFlag, &printHelp, 0,
00060 "print usage information"},
00061 {"--help", argFlag, &printHelp, 0,
00062 "print usage information"},
00063 {"-?", argFlag, &printHelp, 0,
00064 "print usage information"},
00065 {NULL}
00066 };
00067
00068 int main(int argc, char *argv[]) {
00069 PDFDoc *doc;
00070 GString *fileName;
00071 char *pbmRoot;
00072 GString *ownerPW, *userPW;
00073 PBMOutputDev *pbmOut;
00074 GBool ok;
00075 int exitCode;
00076
00077 exitCode = 99;
00078
00079
00080 ok = parseArgs(argDesc, &argc, argv);
00081 if (!ok || argc != 3 || printVersion || printHelp) {
00082 fprintf(stderr, "pdftopbm version %s\n", xpdfVersion);
00083 fprintf(stderr, "%s\n", xpdfCopyright);
00084 if (!printVersion) {
00085 printUsage("pdftopbm", "<PDF-file> <PBM-root>", argDesc);
00086 }
00087 goto err0;
00088 }
00089 fileName = new GString(argv[1]);
00090 pbmRoot = argv[2];
00091
00092
00093 globalParams = new GlobalParams(cfgFileName);
00094 if (quiet) {
00095 globalParams->setErrQuiet(quiet);
00096 }
00097
00098
00099 if (ownerPassword[0]) {
00100 ownerPW = new GString(ownerPassword);
00101 } else {
00102 ownerPW = NULL;
00103 }
00104 if (userPassword[0]) {
00105 userPW = new GString(userPassword);
00106 } else {
00107 userPW = NULL;
00108 }
00109 doc = new PDFDoc(fileName, ownerPW, userPW);
00110 if (userPW) {
00111 delete userPW;
00112 }
00113 if (ownerPW) {
00114 delete ownerPW;
00115 }
00116 if (!doc->isOk()) {
00117 exitCode = 1;
00118 goto err1;
00119 }
00120
00121
00122 if (firstPage < 1)
00123 firstPage = 1;
00124 if (lastPage < 1 || lastPage > doc->getNumPages())
00125 lastPage = doc->getNumPages();
00126
00127
00128 pbmOut = PBMOutputDev::makePBMOutputDev(NULL, pbmRoot);
00129 pbmOut->startDoc(doc->getXRef());
00130 doc->displayPages(pbmOut, firstPage, lastPage, resolution, 0, gFalse);
00131 PBMOutputDev::killPBMOutputDev(pbmOut);
00132
00133 exitCode = 0;
00134
00135
00136 err1:
00137 delete doc;
00138 delete globalParams;
00139 err0:
00140
00141
00142 Object::memCheck(stderr);
00143 gMemReport(stderr);
00144
00145 return exitCode;
00146 }