annot.cc
来自「source code: Covert TXT to PDF」· CC 代码 · 共 140 行
CC
140 行
//========================================================================//// Annot.cc//// Copyright 2000-2002 Glyph & Cog, LLC////========================================================================#include <aconf.h>#ifdef USE_GCC_PRAGMAS#pragma implementation#endif#include "gmem.h"#include "Object.h"#include "Gfx.h"#include "Annot.h"//------------------------------------------------------------------------// Annot//------------------------------------------------------------------------Annot::Annot(XRef *xrefA, Dict *dict) { Object apObj, asObj, obj1, obj2; double t; ok = gFalse; xref = xrefA; if (dict->lookup("AP", &apObj)->isDict()) { if (dict->lookup("AS", &asObj)->isName()) { if (apObj.dictLookup("N", &obj1)->isDict()) { if (obj1.dictLookupNF(asObj.getName(), &obj2)->isRef()) { obj2.copy(&appearance); ok = gTrue; } obj2.free(); } obj1.free(); } else { if (apObj.dictLookupNF("N", &obj1)->isRef()) { obj1.copy(&appearance); ok = gTrue; } obj1.free(); } asObj.free(); } apObj.free(); if (dict->lookup("Rect", &obj1)->isArray() && obj1.arrayGetLength() == 4) { //~ should check object types here obj1.arrayGet(0, &obj2); xMin = obj2.getNum(); obj2.free(); obj1.arrayGet(1, &obj2); yMin = obj2.getNum(); obj2.free(); obj1.arrayGet(2, &obj2); xMax = obj2.getNum(); obj2.free(); obj1.arrayGet(3, &obj2); yMax = obj2.getNum(); obj2.free(); if (xMin > xMax) { t = xMin; xMin = xMax; xMax = t; } if (yMin > yMax) { t = yMin; yMin = yMax; yMax = t; } } else { //~ this should return an error xMin = yMin = 0; xMax = yMax = 1; } obj1.free();}Annot::~Annot() { appearance.free();}void Annot::draw(Gfx *gfx) { Object obj; if (appearance.fetch(xref, &obj)->isStream()) { gfx->doAnnot(&obj, xMin, yMin, xMax, yMax); } obj.free();}//------------------------------------------------------------------------// Annots//------------------------------------------------------------------------Annots::Annots(XRef *xref, Object *annotsObj) { Annot *annot; Object obj1, obj2; int size; int i; annots = NULL; size = 0; nAnnots = 0; if (annotsObj->isArray()) { for (i = 0; i < annotsObj->arrayGetLength(); ++i) { if (annotsObj->arrayGet(i, &obj1)->isDict()) { obj1.dictLookup("Subtype", &obj2); if (obj2.isName("Widget") || obj2.isName("Stamp")) { annot = new Annot(xref, obj1.getDict()); if (annot->isOk()) { if (nAnnots >= size) { size += 16; annots = (Annot **)grealloc(annots, size * sizeof(Annot *)); } annots[nAnnots++] = annot; } else { delete annot; } } obj2.free(); } obj1.free(); } }}Annots::~Annots() { int i; for (i = 0; i < nAnnots; ++i) { delete annots[i]; } gfree(annots);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?