X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fswfoutput.cc;h=509a6e19a64dcb8eaa000f3e245d2befe80722ae;hb=9f87d4fc88247a11fa58cfbdaaaf52d3fdfb10e4;hp=9781c71a557864d953b32fdaeb1c80253af2961c;hpb=aee9de2c6eb23628e54b6896f5b441d9b39317c1;p=swftools.git diff --git a/pdf2swf/swfoutput.cc b/pdf2swf/swfoutput.cc index 9781c71..509a6e1 100644 --- a/pdf2swf/swfoutput.cc +++ b/pdf2swf/swfoutput.cc @@ -817,8 +817,12 @@ static void putcharacters(TAG*tag) if(lastx != chardata[t].x || lasty != chardata[t].y) { - newx=chardata[t].x; - newy=chardata[t].y; + newx = chardata[t].x; + newy = chardata[t].y; + if(newx == 0) + newx = SET_TO_ZERO; + if(newy == 0) + newy = SET_TO_ZERO; } if(!colorcompare(&color, &chardata[t].color)) { @@ -895,6 +899,11 @@ static void drawchar(struct swfoutput*obj, SWFFont*font, char*character, int cha if(usefonts && ! drawonlyshapes) { int charid = font->getSWFCharID(character, charnr); + if(charid<0) { + msg(" Didn't find %s in current charset (%s)", + FIXNULL(character),FIXNULL(font->getName())); + return; + } if(shapeid>=0) endshape(); if(textid<0) @@ -982,7 +991,8 @@ SWFFont::SWFFont(char*name, int id, char*filename) this->fontid = strdup(name); this->t1id = id; - char**a= T1_GetAllCharNames(id); + char**charnamebase= T1_GetAllCharNames(id); + char**a= charnamebase; int t, outlinepos=0; char*map[256]; @@ -1024,7 +1034,7 @@ SWFFont::SWFFont(char*name, int id, char*filename) t=0; while(*a) { - map[t] = *a; + map[t] = strdup(*a); a++; t++; if(t==256 || !*a) { @@ -1039,6 +1049,12 @@ SWFFont::SWFFont(char*name, int id, char*filename) int ret = T1_ReencodeFont(id, map); if(ret) fprintf(stderr,"Can't reencode font: (%s) ret:%d\n",filename, ret); + /* Deleting the font invalidates the charname array, + so we have to ask for it again now. + We continue at the position we were, hoping the font + didn't shrink in the meantime or something. + */ + a = T1_GetAllCharNames(id) + (a - charnamebase); } // parsecharacters @@ -1051,6 +1067,9 @@ SWFFont::SWFFont(char*name, int id, char*filename) this->charname[outlinepos] = strdup(name); outlinepos++; } + + for(s=0;sstandardtable[charnr], -1); } msg(" Didn't find character '%s' in font '%s'", FIXNULL(name), this->name); - return 0; + return -1; } int SWFFont::getWidth(char*name)