X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.cc;h=881c75a75e8a7067c25f75f093375d703332eb79;hb=62ca2479fa44d1d6c7c8b840f7368fd438fd537b;hp=af891cbf21b07b1ce2e9c5da211b0e333d668d7c;hpb=22c5712d36cfd1fad6e8da801a3494b5f01b2015;p=swftools.git diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index af891cb..881c75a 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -1442,10 +1442,13 @@ void GFXOutputDev::drawChar(GfxState *state, double x, double y, gfxmatrix_t m = this->current_font_matrix; this->transformXY(state, x-originX, y-originY, &m.tx, &m.ty); //m.tx += originX; m.ty += originY; - - msg(" drawChar(%f,%f,c='%c' (%d), u=%d <%d>) CID=%d render=%d glyphid=%d font=%08x",m.tx,m.ty,(charid&127)>=32?charid:'?', charid, u, uLen, font->isCIDFont(), render, glyphid, current_gfxfont); - if((render == RENDER_FILL && !config_drawonlyshapes) || render == RENDER_INVISIBLE) { + msg(" drawChar(%f,%f,c='%c' (%d), u=%d <%d>) CID=%d render=%d glyphid=%d font=%08x",m.tx,m.ty,(charid&127)>=32?charid:'?', charid, u, uLen, font->isCIDFont(), render, glyphid, current_gfxfont); + + if((render == RENDER_FILL && !config_drawonlyshapes) || + (render == RENDER_FILLSTROKE && state->getTransformedLineWidth()<1.0) || + (render == RENDER_INVISIBLE)) { + int space = this->current_fontinfo->space_char; if(config_extrafontdata && space>=0 && m.m00 && !m.m01) { /* space char detection */ @@ -1454,10 +1457,11 @@ void GFXOutputDev::drawChar(GfxState *state, double x, double y, !last_char_was_space) { double expected_x = last_char_x + current_gfxfont->glyphs[last_char].advance*m.m00; int space = this->current_fontinfo->space_char; - if(m.tx - expected_x >= m.m00*64) { - msg(" There's a %f (%f) pixel gap between char %d and char %d, I'm inserting a space here", + float width = this->current_fontinfo->average_advance; + if(m.tx - expected_x >= m.m00*width*4/10) { + msg(" There's a %f pixel gap between char %d and char %d (expected no more than %f), I'm inserting a space here", m.tx-expected_x, - (m.tx-expected_x)/m.m00, + width*m.m00*4/10, last_char, glyphid); gfxmatrix_t m2 = m; m2.tx = expected_x + (m.tx - expected_x - current_gfxfont->glyphs[space].advance*m.m00)/2; @@ -1478,6 +1482,7 @@ void GFXOutputDev::drawChar(GfxState *state, double x, double y, msg(" Some texts will be rendered as shape"); gfxglobals->textmodeinfo = 1; } + gfxline_t*glyph = current_gfxfont->glyphs[glyphid].line; gfxline_t*tglyph = gfxline_clone(glyph); gfxline_transform(tglyph, &m); @@ -1561,10 +1566,11 @@ GBool GFXOutputDev::beginType3Char(GfxState *state, double x, double y, double d gfxmatrix_t m = this->current_font_matrix; this->transformXY(state, 0, 0, &m.tx, &m.ty); - m.m00*=INTERNAL_FONT_SIZE; + + /*m.m00*=INTERNAL_FONT_SIZE; m.m01*=INTERNAL_FONT_SIZE; m.m10*=INTERNAL_FONT_SIZE; - m.m11*=INTERNAL_FONT_SIZE; + m.m11*=INTERNAL_FONT_SIZE;*/ if(!current_fontinfo || (unsigned)charid >= current_fontinfo->num_glyphs || !current_fontinfo->glyphs[charid]) { msg(" Invalid charid %d for font", charid); @@ -1658,12 +1664,6 @@ void GFXOutputDev::startPage(int pageNum, GfxState *state, double crop_x1, doubl states[statepos].dashStart = 0; this->last_char_gfxfont = 0; - - if(this->config_linkdatafile) { - FILE*fi = fopen(config_linkdatafile, "ab+"); - fprintf(fi, "[page %d]\n", pageNum); - fclose(fi); - } } @@ -2045,6 +2045,8 @@ void GFXOutputDev::updateFont(GfxState *state) current_gfxfont = this->current_fontinfo->getGfxFont(); device->addfont(device, current_gfxfont); free(id); + + device->addfont(device, current_gfxfont); updateFontMatrix(state); }