summaryrefslogtreecommitdiffstats
path: root/filters/kword/pdf/xpdf/xpdf/pdffonts.cc
diff options
context:
space:
mode:
Diffstat (limited to 'filters/kword/pdf/xpdf/xpdf/pdffonts.cc')
-rw-r--r--filters/kword/pdf/xpdf/xpdf/pdffonts.cc281
1 files changed, 0 insertions, 281 deletions
diff --git a/filters/kword/pdf/xpdf/xpdf/pdffonts.cc b/filters/kword/pdf/xpdf/xpdf/pdffonts.cc
deleted file mode 100644
index fcb739a20..000000000
--- a/filters/kword/pdf/xpdf/xpdf/pdffonts.cc
+++ /dev/null
@@ -1,281 +0,0 @@
-//========================================================================
-//
-// pdffonts.cc
-//
-// Copyright 2001-2002 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <aconf.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#include <math.h>
-#include "parseargs.h"
-#include "GString.h"
-#include "gmem.h"
-#include "GlobalParams.h"
-#include "Error.h"
-#include "Object.h"
-#include "Dict.h"
-#include "GfxFont.h"
-#include "Annot.h"
-#include "PDFDoc.h"
-#include "config.h"
-
-static char *fontTypeNames[] = {
- "unknown",
- "Type 1",
- "Type 1C",
- "Type 3",
- "TrueType",
- "CID Type 0",
- "CID Type 0C",
- "CID TrueType"
-};
-
-static void scanFonts(Dict *resDict, PDFDoc *doc);
-static void scanFont(GfxFont *font, PDFDoc *doc);
-
-static int firstPage = 1;
-static int lastPage = 0;
-static char ownerPassword[33] = "";
-static char userPassword[33] = "";
-static char cfgFileName[256] = "";
-static GBool printVersion = gFalse;
-static GBool printHelp = gFalse;
-
-static ArgDesc argDesc[] = {
- {"-f", argInt, &firstPage, 0,
- "first page to examine"},
- {"-l", argInt, &lastPage, 0,
- "last page to examine"},
- {"-opw", argString, ownerPassword, sizeof(ownerPassword),
- "owner password (for encrypted files)"},
- {"-upw", argString, userPassword, sizeof(userPassword),
- "user password (for encrypted files)"},
- {"-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}
-};
-
-static Ref *fonts;
-static int fontsLen;
-static int fontsSize;
-
-int main(int argc, char *argv[]) {
- PDFDoc *doc;
- GString *fileName;
- GString *ownerPW, *userPW;
- GBool ok;
- Page *page;
- Dict *resDict;
- Annots *annots;
- Object obj1, obj2;
- int pg, i;
- int exitCode;
-
- exitCode = 99;
-
- // parse args
- ok = parseArgs(argDesc, &argc, argv);
- if (!ok || argc != 2 || printVersion || printHelp) {
- fprintf(stderr, "pdfinfo version %s\n", xpdfVersion);
- fprintf(stderr, "%s\n", xpdfCopyright);
- if (!printVersion) {
- printUsage("pdfinfo", "<PDF-file>", argDesc);
- }
- goto err0;
- }
- fileName = new GString(argv[1]);
-
- // read config file
- globalParams = new GlobalParams(cfgFileName);
-
- // open PDF file
- if (ownerPassword[0]) {
- ownerPW = new GString(ownerPassword);
- } else {
- ownerPW = NULL;
- }
- if (userPassword[0]) {
- 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;
- }
-
- // get page range
- if (firstPage < 1) {
- firstPage = 1;
- }
- if (lastPage < 1 || lastPage > doc->getNumPages()) {
- lastPage = doc->getNumPages();
- }
-
- // scan the fonts
- printf("name type emb sub uni object ID\n");
- printf("------------------------------------ ------------ --- --- --- ---------\n");
- fonts = NULL;
- fontsLen = fontsSize = 0;
- for (pg = firstPage; pg <= lastPage; ++pg) {
- page = doc->getCatalog()->getPage(pg);
- if ((resDict = page->getResourceDict())) {
- scanFonts(resDict, doc);
- }
- annots = new Annots(doc->getXRef(), page->getAnnots(&obj1));
- obj1.free();
- for (i = 0; i < annots->getNumAnnots(); ++i) {
- if (annots->getAnnot(i)->getAppearance(&obj1)->isStream()) {
- obj1.streamGetDict()->lookup("Resources", &obj2);
- if (obj2.isDict()) {
- scanFonts(obj2.getDict(), doc);
- }
- obj2.free();
- }
- obj1.free();
- }
- delete annots;
- }
-
- exitCode = 0;
-
- // clean up
- gfree(fonts);
- err1:
- delete doc;
- delete globalParams;
- err0:
-
- // check for memory leaks
- Object::memCheck(stderr);
- gMemReport(stderr);
-
- return exitCode;
-}
-
-static void scanFonts(Dict *resDict, PDFDoc *doc) {
- GfxFontDict *gfxFontDict;
- GfxFont *font;
- Object fontDict, xObjDict, xObj, resObj;
- int i;
-
- // scan the fonts in this resource dictionary
- resDict->lookup("Font", &fontDict);
- if (fontDict.isDict()) {
- gfxFontDict = new GfxFontDict(doc->getXRef(), fontDict.getDict());
- for (i = 0; i < gfxFontDict->getNumFonts(); ++i) {
- font = gfxFontDict->getFont(i);
- scanFont(font, doc);
- }
- delete gfxFontDict;
- }
- fontDict.free();
-
- // recursively scan any resource dictionaries in objects in this
- // resource dictionary
- resDict->lookup("XObject", &xObjDict);
- if (xObjDict.isDict()) {
- for (i = 0; i < xObjDict.dictGetLength(); ++i) {
- xObjDict.dictGetVal(i, &xObj);
- if (xObj.isStream()) {
- xObj.streamGetDict()->lookup("Resources", &resObj);
- if (resObj.isDict()) {
- scanFonts(resObj.getDict(), doc);
- }
- resObj.free();
- }
- xObj.free();
- }
- }
- xObjDict.free();
-}
-
-static void scanFont(GfxFont *font, PDFDoc *doc) {
- Ref fontRef, embRef;
- Object fontObj, nameObj, toUnicodeObj;
- GString *name;
- GBool subset, hasToUnicode;
- int i;
-
- fontRef = *font->getID();
-
- // check for an already-seen font
- for (i = 0; i < fontsLen; ++i) {
- if (fontRef.num == fonts[i].num && fontRef.gen == fonts[i].gen) {
- return;
- }
- }
-
- // get the original font name -- the GfxFont class munges substitute
- // Base-14 font names into proper form, so this code grabs the
- // original name from the font dictionary; also look for a ToUnicode
- // map
- name = NULL;
- hasToUnicode = gFalse;
- if (doc->getXRef()->fetch(fontRef.num, fontRef.gen, &fontObj)->isDict()) {
- if (fontObj.dictLookup("BaseFont", &nameObj)->isName()) {
- name = new GString(nameObj.getName());
- }
- nameObj.free();
- hasToUnicode = fontObj.dictLookup("ToUnicode", &toUnicodeObj)->isStream();
- toUnicodeObj.free();
- }
- fontObj.free();
-
- // check for a font subset name: capital letters followed by a '+'
- // sign
- subset = gFalse;
- if (name) {
- for (i = 0; i < name->getLength(); ++i) {
- if (name->getChar(i) < 'A' || name->getChar(i) > 'Z') {
- break;
- }
- }
- subset = i > 0 && i < name->getLength() && name->getChar(i) == '+';
- }
-
- // print the font info
- printf("%-36s %-12s %-3s %-3s %-3s",
- name ? name->getCString() : "[none]",
- fontTypeNames[font->getType()],
- font->getEmbeddedFontID(&embRef) ? "yes" : "no",
- subset ? "yes" : "no",
- hasToUnicode ? "yes" : "no");
- if (fontRef.gen == 999999) {
- printf(" [none]\n");
- } else {
- printf(" %6d %2d\n", fontRef.num, fontRef.gen);
- }
- if (name) {
- delete name;
- }
-
- // add this font to the list
- if (fontsLen == fontsSize) {
- fontsSize += 32;
- fonts = (Ref *)grealloc(fonts, fontsSize * sizeof(Ref));
- }
- fonts[fontsLen++] = *font->getID();
-}