home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 110 / EnigmaAmiga110CD.iso / indispensabili / utility / apdf / xpdf-0.80 / xpdf / pdftotext.cc < prev    next >
C/C++ Source or Header  |  1999-04-27  |  3KB  |  115 lines

  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. }
  115.