X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fswfoutput.cc;h=27fdced65a3f5b43740d259f344cf7e4864a538c;hb=1277b2bbffb29316b61692c46a90e4fec28d3a83;hp=75efd2c57b0dcecd11d6484850a29c6750827334;hpb=1f237fb411319057ae1e4f779e511cea0e206858;p=swftools.git diff --git a/pdf2swf/swfoutput.cc b/pdf2swf/swfoutput.cc index 75efd2c..27fdced 100644 --- a/pdf2swf/swfoutput.cc +++ b/pdf2swf/swfoutput.cc @@ -36,6 +36,7 @@ int drawonlyshapes=0; int jpegquality=85; int storeallcharacters=0; int enablezlib=0; +int insertstoptag=0; static int flag_protected = 0; typedef unsigned char u8; @@ -450,7 +451,7 @@ static void drawchar(struct swfoutput*obj, SWFFont*font, char*character, int cha } else { - T1_OUTLINE*outline = font->getOutline(character); + T1_OUTLINE*outline = font->getOutline(character, charnr); char* charname = character; if(!outline) { @@ -646,7 +647,7 @@ SWFFont::~SWFFont() swflastx=0; swflasty=0; - swf_SetU8(ftag,0x10); //0 fill bits, 0 linestyle bits + swf_SetU8(ftag,0x10); //1 fill bits, 0 linestyle bits SHAPE s; s.bits.fill = 1; s.bits.line = 0; @@ -698,40 +699,51 @@ SWFFont::~SWFFont() free(char2swfcharid); } -T1_OUTLINE*SWFFont::getOutline(char*name) +T1_OUTLINE*SWFFont::getOutline(char*name, int charnr) { int t; for(t=0;tcharnum;t++) { if(!strcmp(this->charname[t],name)) { - if(!used[t]) - { - swfcharid2char[swfcharpos] = t; - char2swfcharid[t] = swfcharpos; - swfcharpos++; - used[t] = 1; - } return outline[t]; } } + + /* if we didn't find the character, maybe + we can find the capitalized version */ + for(t=0;tcharnum;t++) { + if(!strcasecmp(this->charname[t],name)) + return outline[t]; + } + + /* if we didn't find it by name, use the names of the first 256 characters + of the font to try a new name based on charnr */ + if(this->standardtable && charnr>=0 && charnr < this->standardtablesize) { + return getOutline(this->standardtable[charnr], -1); + } + + logf(" Didn't find character '%s' in font '%s'", FIXNULL(name), this->name); return 0; } -int SWFFont::getWidth(char*name) +int SWFFont::getSWFCharID(char*name, int charnr) { int t; for(t=0;tcharnum;t++) { if(!strcmp(this->charname[t],name)) { - return this->width[t]; + if(!used[t]) + { + swfcharid2char[swfcharpos] = t; + char2swfcharid[t] = swfcharpos++; + used[t] = 1; + } + return char2swfcharid[t]; } } - return 0; -} -int SWFFont::getSWFCharID(char*name, int charnr) -{ - int t; + /* if we didn't find the character, maybe + we can find the capitalized version */ for(t=0;tcharnum;t++) { - if(!strcmp(this->charname[t],name)) { + if(!strcasecmp(this->charname[t],name)) { if(!used[t]) { swfcharid2char[swfcharpos] = t; @@ -741,6 +753,9 @@ int SWFFont::getSWFCharID(char*name, int charnr) return char2swfcharid[t]; } } + + /* if we didn't find it by name, use the names of the first 256 (or so) characters + of the font to try a new name based on charnr */ if(this->standardtable && charnr>=0 && charnr < this->standardtablesize) { return getSWFCharID(this->standardtable[charnr], -1); } @@ -748,6 +763,17 @@ int SWFFont::getSWFCharID(char*name, int charnr) return 0; } +int SWFFont::getWidth(char*name) +{ + int t; + for(t=0;tcharnum;t++) { + if(!strcmp(this->charname[t],name)) { + return this->width[t]; + } + } + return 0; +} + char*SWFFont::getName() { return this->name; @@ -969,6 +995,14 @@ static void endpage(struct swfoutput*obj) endtext(); while(clippos) swfoutput_endclip(obj); + + if(insertstoptag) { + ActionTAG*atag=0; + atag = action_Stop(atag); + atag = action_End(atag); + tag = swf_InsertTag(tag,ST_DOACTION); + swf_ActionSet(tag,atag); + } tag = swf_InsertTag(tag,ST_SHOWFRAME); } @@ -1343,23 +1377,28 @@ static void drawimage(struct swfoutput*obj, int bitid, int sizex,int sizey, if(y4>ymax) ymax=y4; if(x4linewidth,&obj->strokergb); //fsid = ShapeAddSolidFillStyle(shape,&obj->fillrgb); - fsid = swf_ShapeAddBitmapFillStyle(shape,&m,bitid,0); + fsid = swf_ShapeAddBitmapFillStyle(shape,&m,bitid,1); swf_SetU16(tag, myshapeid); r.xmin = (int)(xmin*20); r.ymin = (int)(ymin*20); @@ -1472,11 +1511,11 @@ int swfoutput_drawimagelossless(struct swfoutput*obj, RGBA*mem, int sizex,int si return bitid; } -int swfoutput_drawimagelossless256(struct swfoutput*obj, U8*mem, RGBA*pal, int sizex,int sizey, +int swfoutput_drawimagelosslessN(struct swfoutput*obj, U8*mem, RGBA*pal, int sizex,int sizey, double x1,double y1, double x2,double y2, double x3,double y3, - double x4,double y4) + double x4,double y4, int n) { TAG*oldtag; U8*mem2 = 0; @@ -1505,7 +1544,7 @@ int swfoutput_drawimagelossless256(struct swfoutput*obj, U8*mem, RGBA*pal, int s oldtag = tag; tag = swf_InsertTag(tag,ST_DEFINEBITSLOSSLESS2); swf_SetU16(tag, bitid); - if(swf_SetLosslessBitsIndexed(tag,sizex,sizey,mem, pal, 256)<0) { + if(swf_SetLosslessBitsIndexed(tag,sizex,sizey,mem, pal, n)<0) { swf_DeleteTag(tag); tag = oldtag; return -1;