diff options
author | Martin Kretzschmar <mkretzschmar@src.gnome.org> | 2002-09-18 20:32:18 (GMT) |
---|---|---|
committer | Martin Kretzschmar <mkretzschmar@src.gnome.org> | 2002-09-18 20:32:18 (GMT) |
commit | 7aac8dc8533347e21311b15186e0af82f1b22fd6 (patch) | |
tree | 02650bb02c8a1d8468c22f50ff151885d233016b /pdf/xpdf/pdftops.cc | |
parent | d99fb4f4acd14fcdbda968abd907547dcc7af40c (diff) |
Synched with Xpdf 0.92
this adds "decryption" support
testing this code after six weeks immediately gives me segfaults (image drawing) :-O
must have fixed that later without knowing :-O
Diffstat (limited to 'pdf/xpdf/pdftops.cc')
-rw-r--r-- | pdf/xpdf/pdftops.cc | 74 |
1 files changed, 54 insertions, 20 deletions
diff --git a/pdf/xpdf/pdftops.cc b/pdf/xpdf/pdftops.cc index d6fd653..e3e495d 100644 --- a/pdf/xpdf/pdftops.cc +++ b/pdf/xpdf/pdftops.cc @@ -30,29 +30,42 @@ static int firstPage = 1; static int lastPage = 0; static GBool noEmbedFonts = gFalse; static GBool doForm = gFalse; -GBool printCommands = gFalse; +static char userPassword[33] = ""; +static GBool printVersion = gFalse; static GBool printHelp = gFalse; static ArgDesc argDesc[] = { - {"-f", argInt, &firstPage, 0, + {"-f", argInt, &firstPage, 0, "first page to print"}, - {"-l", argInt, &lastPage, 0, + {"-l", argInt, &lastPage, 0, "last page to print"}, - {"-paperw", argInt, &paperWidth, 0, + {"-paperw", argInt, &paperWidth, 0, "paper width, in points"}, - {"-paperh", argInt, &paperHeight, 0, + {"-paperh", argInt, &paperHeight, 0, "paper height, in points"}, - {"-level1", argFlag, &psOutLevel1, 0, + {"-level1", argFlag, &psOutLevel1, 0, "generate Level 1 PostScript"}, - {"-noemb", argFlag, &noEmbedFonts, 0, + {"-level1sep", argFlag, &psOutLevel1Sep, 0, + "generate Level 1 separable PostScript"}, + {"-eps", argFlag, &psOutEPS, 0, + "generate Encapsulated PostScript (EPS)"}, +#if OPI_SUPPORT + {"-opi", argFlag, &psOutOPI, 0, + "generate OPI comments"}, +#endif + {"-noemb", argFlag, &noEmbedFonts, 0, "don't embed Type 1 fonts"}, - {"-form", argFlag, &doForm, 0, + {"-form", argFlag, &doForm, 0, "generate a PostScript form"}, - {"-q", argFlag, &errQuiet, 0, + {"-upw", argString, userPassword, sizeof(userPassword), + "user password (for encrypted files)"}, + {"-q", argFlag, &errQuiet, 0, "don't print any messages or errors"}, - {"-h", argFlag, &printHelp, 0, + {"-v", argFlag, &printVersion, 0, + "print copyright and version info"}, + {"-h", argFlag, &printHelp, 0, "print usage information"}, - {"-help", argFlag, &printHelp, 0, + {"-help", argFlag, &printHelp, 0, "print usage information"}, {NULL} }; @@ -61,19 +74,26 @@ int main(int argc, char *argv[]) { PDFDoc *doc; GString *fileName; GString *psFileName; + GString *userPW; PSOutputDev *psOut; GBool ok; char *p; // parse args ok = parseArgs(argDesc, &argc, argv); - if (!ok || argc < 2 || argc > 3 || printHelp) { + if (!ok || argc < 2 || argc > 3 || printVersion || printHelp) { fprintf(stderr, "pdftops version %s\n", xpdfVersion); fprintf(stderr, "%s\n", xpdfCopyright); - printUsage("pdftops", "<PDF-file> [<PS-file>]", argDesc); + if (!printVersion) { + printUsage("pdftops", "<PDF-file> [<PS-file>]", argDesc); + } exit(1); } - if (doForm && psOutLevel1) { + if (psOutLevel1 && psOutLevel1Sep) { + fprintf(stderr, "Error: use -level1 or -level1sep, not both.\n"); + exit(1); + } + if (doForm && (psOutLevel1 || psOutLevel1Sep)) { fprintf(stderr, "Error: forms are only available with Level 2 output.\n"); exit(1); } @@ -87,7 +107,15 @@ int main(int argc, char *argv[]) { // open PDF file xref = NULL; - doc = new PDFDoc(fileName); + if (userPassword[0]) { + userPW = new GString(userPassword); + } else { + userPW = NULL; + } + doc = new PDFDoc(fileName, userPW); + if (userPW) { + delete userPW; + } if (!doc->isOk()) { goto err1; } @@ -95,7 +123,7 @@ int main(int argc, char *argv[]) { // check for print permission if (!doc->okToPrint()) { error(-1, "Printing this document is not allowed."); - goto err2; + goto err1; } // construct PostScript file name @@ -108,7 +136,7 @@ int main(int argc, char *argv[]) { fileName->getLength() - 4); else psFileName = fileName->copy(); - psFileName->append(".ps"); + psFileName->append(psOutEPS ? ".eps" : ".ps"); } // get page range @@ -119,18 +147,24 @@ int main(int argc, char *argv[]) { if (doForm) lastPage = firstPage; + // check for multi-page EPS + if (psOutEPS && firstPage != lastPage) { + error(-1, "EPS files can only contain one page."); + goto err2; + } + // write PostScript file psOut = new PSOutputDev(psFileName->getCString(), doc->getCatalog(), firstPage, lastPage, !noEmbedFonts, doForm); if (psOut->isOk()) - doc->displayPages(psOut, firstPage, lastPage, 72, 0); + doc->displayPages(psOut, firstPage, lastPage, 72, 0, gFalse); delete psOut; // clean up - delete psFileName; err2: - delete doc; + delete psFileName; err1: + delete doc; freeParams(); // check for memory leaks |