]> www.fi.muni.cz Git - evince.git/blob - pdf/xpdf/pdftotext.cc
Initial work I did on GNOME/PDF viewer -miguel
[evince.git] / pdf / xpdf / pdftotext.cc
1 //========================================================================
2 //
3 // pdftotext.cc
4 //
5 // Copyright 1997 Derek B. Noonburg
6 //
7 //========================================================================
8
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <stddef.h>
12 #include <string.h>
13 #include "parseargs.h"
14 #include "GString.h"
15 #include "gmem.h"
16 #include "Object.h"
17 #include "Stream.h"
18 #include "Array.h"
19 #include "Dict.h"
20 #include "XRef.h"
21 #include "Catalog.h"
22 #include "Page.h"
23 #include "PDFDoc.h"
24 #include "TextOutputDev.h"
25 #include "Params.h"
26 #include "Error.h"
27 #include "config.h"
28
29 static int firstPage = 1;
30 static int lastPage = 0;
31 static GBool useASCII7 = gFalse;
32 GBool printCommands = gFalse;
33 static GBool printHelp = gFalse;
34
35 static ArgDesc argDesc[] = {
36   {"-f",      argInt,      &firstPage,     0,
37    "first page to convert"},
38   {"-l",      argInt,      &lastPage,      0,
39    "last page to convert"},
40   {"-ascii7", argFlag,     &useASCII7,     0,
41    "convert to 7-bit ASCII (default is 8-bit ISO Latin-1)"},
42   {"-h",      argFlag,     &printHelp,     0,
43    "print usage information"},
44   {"-help",   argFlag,     &printHelp,     0,
45    "print usage information"},
46   {NULL}
47 };
48
49 int main(int argc, char *argv[]) {
50   PDFDoc *doc;
51   GString *fileName;
52   GString *textFileName;
53   TextOutputDev *textOut;
54   GBool ok;
55   char *p;
56
57   // parse args
58   ok = parseArgs(argDesc, &argc, argv);
59   if (!ok || argc < 2 || argc > 3 || printHelp) {
60     fprintf(stderr, "pdftotext version %s\n", xpdfVersion);
61     fprintf(stderr, "%s\n", xpdfCopyright);
62     printUsage("pdftotext", "<PDF-file> [<text-file>]", argDesc);
63     exit(1);
64   }
65   fileName = new GString(argv[1]);
66
67   // init error file
68   errorInit();
69
70   // read config file
71   initParams(xpdfConfigFile);
72
73   // open PDF file
74   xref = NULL;
75   doc = new PDFDoc(fileName);
76   if (!doc->isOk())
77     exit(1);
78
79   // construct text file name
80   if (argc == 3) {
81     textFileName = new GString(argv[2]);
82   } else {
83     p = fileName->getCString() + fileName->getLength() - 4;
84     if (!strcmp(p, ".pdf") || !strcmp(p, ".PDF"))
85       textFileName = new GString(fileName->getCString(),
86                                  fileName->getLength() - 4);
87     else
88       textFileName = fileName->copy();
89     textFileName->append(".txt");
90   }
91
92   // get page range
93   if (firstPage < 1)
94     firstPage = 1;
95   if (lastPage < 1 || lastPage > doc->getNumPages())
96     lastPage = doc->getNumPages();
97
98   // write text file
99   textOut = new TextOutputDev(textFileName->getCString(), useASCII7);
100   if (textOut->isOk())
101     doc->displayPages(textOut, firstPage, lastPage, 72, 0);
102   delete textOut;
103
104   // clean up
105   delete textFileName;
106   delete doc;
107   freeParams();
108
109   // check for memory leaks
110   Object::memCheck(errFile);
111   gMemReport(errFile);
112
113   return 0;
114 }