From 1f75b5311e88f8a6d71146cf2e709f1f5666dfc8 Mon Sep 17 00:00:00 2001 From: kramm Date: Sun, 21 Oct 2007 19:56:43 +0000 Subject: [PATCH] small bugfixes --- lib/pdf/GFXOutputDev.cc | 5 +++-- lib/pdf/InfoOutputDev.cc | 48 +++++++++++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index 0a7e4bd..24a8f05 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -960,7 +960,7 @@ void GFXOutputDev::drawChar(GfxState *state, double x, double y, } Unicode u = uLen?(_u[0]):0; - msg(" drawChar(%f,%f,c='%c' (%d), u=%d <%d>) CID=%d render=%d\n",x,y,(charid&127)>=32?charid:'?', charid, u, uLen, font->isCIDFont(), render); + msg(" drawChar(%f,%f,c='%c' (%d), u=%d <%d>) CID=%d render=%d glyphid=%d\n",x,y,(charid&127)>=32?charid:'?', charid, u, uLen, font->isCIDFont(), render, glyphid); gfxmatrix_t m = this->current_font_matrix; state->transform(x, y, &m.tx, &m.ty); @@ -1447,7 +1447,7 @@ gfxfont_t* createGfxFont(GfxFont*xpdffont, FontInfo*src) font->glyphs = (gfxglyph_t*)malloc(sizeof(gfxglyph_t)*src->num_glyphs); memset(font->glyphs, 0, sizeof(gfxglyph_t)*src->num_glyphs); - font->id = strdup(getFontName(xpdffont)); + font->id = strdup(getFontID(xpdffont)); int t; double quality = (INTERNAL_FONT_SIZE * 0.05) / src->max_size; double scale = 1; @@ -1507,6 +1507,7 @@ gfxfont_t* createGfxFont(GfxFont*xpdffont, FontInfo*src) } } + msg(" %d glyphs.", t, font->num_glyphs); return font; } diff --git a/lib/pdf/InfoOutputDev.cc b/lib/pdf/InfoOutputDev.cc index 1d22a8b..f081075 100644 --- a/lib/pdf/InfoOutputDev.cc +++ b/lib/pdf/InfoOutputDev.cc @@ -1,6 +1,7 @@ #include "SplashTypes.h" #include "SplashOutputDev.h" #include "SplashPath.h" +#include "SplashFontFile.h" #include "InfoOutputDev.h" #include "GfxState.h" #include "../log.h" @@ -11,6 +12,8 @@ InfoOutputDev::InfoOutputDev(XRef*xref) num_links = 0; num_images = 0; num_fonts = 0; + currentfont = 0; + currentglyph = 0; id2font = new GHash(1); SplashColor white = {255,255,255}; splash = new SplashOutputDev(splashModeRGB8,320,0,white,0,0); @@ -44,6 +47,7 @@ FontInfo::FontInfo() this->seen = 0; this->num_glyphs = 0; this->glyphs = 0; + this->splash_font = 0; } FontInfo::~FontInfo() { @@ -79,6 +83,9 @@ void InfoOutputDev::startPage(int pageNum, GfxState *state, double crop_x1, doub this->y2 = (int)y2; msg(" Generating info structure for page %d", pageNum); } +void InfoOutputDev::endPage() +{ +} void InfoOutputDev::drawLink(Link *link, Catalog *catalog) { num_links++; @@ -114,41 +121,35 @@ char*getFontID(GfxFont*font) void InfoOutputDev::updateFont(GfxState *state) { GfxFont*font = state->getFont(); - if(!font) + if(!font) { + currentfont = 0; return; + } if(font->getType() == fontType3) { + currentfont = 0; return; } char*id = getFontID(font); - FontInfo*info = (FontInfo*)id2font->lookup(id); - if(info) { - /* font already known */ - free(id); - currentfont = info; - return; - } + if(currentfont) + currentfont->splash_font = 0; - info = new FontInfo; - info->font = font; - info->max_size = 0; + currentfont = (FontInfo*)id2font->lookup(id); + if(!currentfont) { + currentfont = new FontInfo; + currentfont->font = font; + currentfont->max_size = 0; + GString* idStr = new GString(id); + id2font->add(idStr, (void*)currentfont); + num_fonts++; + } state->setCTM(1.0,0,0,1.0,0,0); splash->updateCTM(state, 0,0,0,0,0,0); state->setTextMat(1.0,0,0,-1.0,0,0); state->setFont(font, 1024.0); splash->doUpdateFont(state); - info->splash_font = splash->getCurrentFont(); - - if(!info->splash_font) { - delete info; - return; - } - - GString* idStr = new GString(id); - id2font->add(idStr, (void*)info); - num_fonts++; - currentfont = info; + currentfont->splash_font = splash->getCurrentFont(); free(id); } FontInfo* InfoOutputDev::getFont(char*id) @@ -168,6 +169,9 @@ void InfoOutputDev::drawChar(GfxState *state, double x, double y, double lenx = sqrt(m11*m11 + m12*m12); double leny = sqrt(m21*m21 + m22*m22); double len = lenx>leny?lenx:leny; + if(!currentfont || !currentfont->splash_font) { + return; //error + } if(currentfont && currentfont->max_size < len) { currentfont->max_size = len; } -- 1.7.10.4