X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2FSWFOutputDev.cc;h=c7b9a66d0d63867d16a4e07785b12a68493d0c3a;hb=21e018742051f8a032fa50117ba5beb0668c25f0;hp=41eda262852cb5448e45e0d7bf4238e6becb3138;hpb=c109dbef8cc11dd5de7292ba21c0628d1dc31857;p=swftools.git diff --git a/pdf2swf/SWFOutputDev.cc b/pdf2swf/SWFOutputDev.cc index 41eda26..c7b9a66 100644 --- a/pdf2swf/SWFOutputDev.cc +++ b/pdf2swf/SWFOutputDev.cc @@ -23,6 +23,7 @@ #include #include //xpdf header files +#include "gfile.h" #include "GString.h" #include "gmem.h" #include "Object.h" @@ -342,11 +343,11 @@ void dumpFontInfo(char*loglevel, GfxFont*font) char*name; gstr = font->getName(); Ref r=font->getID(); - logf("%s=========== %s (ID:%d,%d) ==========\n", loglevel, gstr?gstr->getCString():"(unknown font)", r.num,r.gen); + logf("%s=========== %s (ID:%d,%d) ==========\n", loglevel, gstr?FIXNULL(gstr->getCString()):"(unknown font)", r.num,r.gen); gstr = font->getTag(); if(gstr) - logf("%sTag: %s\n", loglevel, gstr->getCString()); + logf("%sTag: %s\n", loglevel, FIXNULL(gstr->getCString())); if(font->is16Bit()) logf("%sis 16 bit\n", loglevel); GfxFontType type=font->getType(); @@ -375,11 +376,11 @@ void dumpFontInfo(char*loglevel, GfxFont*font) GBool embedded = font->getEmbeddedFontID(&embRef); name = font->getEmbeddedFontName(); if(embedded) - logf("%sEmbedded name: %s id: %d\n",loglevel, name, embRef.num); + logf("%sEmbedded name: %s id: %d\n",loglevel, FIXNULL(name), embRef.num); gstr = font->getExtFontFile(); if(gstr) - logf("%sExternal Font file: %s\n", loglevel, gstr->getCString()); + logf("%sExternal Font file: %s\n", loglevel, FIXNULL(gstr->getCString())); // Get font descriptor flags. if(font->isFixedWidth()) logf("%sis fixed width\n", loglevel); @@ -408,7 +409,7 @@ T1_OUTLINE* gfxPath_to_T1_OUTLINE(GfxState*state, GfxPath*path) { int num = path->getNumSubpaths(); int s,t; - bezierpathsegment*start,*last; + bezierpathsegment*start,*last=0; bezierpathsegment*outline = start = new bezierpathsegment(); int cpos = 0; double lastx=0,lasty=0; @@ -547,7 +548,7 @@ void SWFOutputDev::beginString(GfxState *state, GString *s) state->getFontTransMat(&m11, &m12, &m21, &m22); m11 *= state->getHorizScaling(); m21 *= state->getHorizScaling(); - swfoutput_setfontmatrix(&output, m11, -m12, m21, -m22); + swfoutput_setfontmatrix(&output, m11, -m21, m12, -m22); } int charcounter = 0; @@ -601,6 +602,7 @@ void SWFOutputDev::startPage(int pageNum, GfxState *state) void SWFOutputDev::drawLink(Link *link, Catalog *catalog) { + logf(" drawlink\n"); double x1, y1, x2, y2, w; GfxRGB rgb; swfcoord points[5]; @@ -630,6 +632,7 @@ void SWFOutputDev::drawLink(Link *link, Catalog *catalog) char*s = "-?-"; char*type = "-?-"; char*url = 0; + char*named = 0; int page = -1; switch(action->getKind()) { @@ -665,6 +668,7 @@ void SWFOutputDev::drawLink(Link *link, Catalog *catalog) GString*name = l->getName(); if(name) { s = name->lowerCase()->getCString(); + named = name->getCString(); if(strstr(s, "next") || strstr(s, "forward")) { page = currentpage + 1; @@ -731,7 +735,11 @@ void SWFOutputDev::drawLink(Link *link, Catalog *catalog) { swfoutput_linktourl(&output, url, points); } - logf(" \"%s\" link to \"%s\" (%d)\n", type, s, page); + else if(named) + { + swfoutput_namedlink(&output, named, points); + } + logf(" \"%s\" link to \"%s\" (%d)\n", type, FIXNULL(s), page); } } @@ -760,8 +768,6 @@ char type3Warning=0; int SWFOutputDev::searchT1Font(char*name) { int i; - - int id=-1; int mapid=-1; char*filename=0; for(i=0;i Loading extra font %s from %s\n", FIXNULL(fontname), + FIXNULL(T1_GetFontFileName(i))); + } + if(fontname && !strcmp(name, fontname)) { + logf(" Extra font %s is being used.\n", fontname); + return i; + } + fontname = T1_GetFontFileName(i); + if(strrchr(fontname,'/')) + fontname = strrchr(fontname,'/')+1; + + if(strstr(fontname, name)) { + logf(" Extra font %s is being used.\n", fontname); + return i; + } } } - return id; + return -1; } void SWFOutputDev::updateLineWidth(GfxState *state) @@ -860,14 +890,14 @@ char*SWFOutputDev::writeEmbeddedFontToFile(GfxFont*font) ttfinfo = 1; } char name2[80]; - int r1 = lrand48(); - int r2 = lrand48(); - sprintf(name2,"%04x%04x",r1,r2); + char*tmp; + tmp = strdup(mktmpname((char*)name2)); + sprintf(name2, "%s", tmp); char*a[] = {"./ttf2pt1","-pttf","-b", tmpFileName, name2}; logf(" Invoking ttf2pt1..."); ttf2pt1_main(5,a); unlink(tmpFileName); - sprintf(name2,"%04x%04x.pfb",r1,r2); + sprintf(name2,"%s.pfb",tmp); tmpFileName = strdup(name2); } @@ -976,7 +1006,7 @@ char* SWFOutputDev::substituteFont(GfxFont*gfxFont, char* oldname) if(oldname) { substitutesource[substitutepos] = oldname; substitutetarget[substitutepos] = fontname; - logf(" substituting %s -> %s", oldname, fontname); + logf(" substituting %s -> %s", FIXNULL(oldname), FIXNULL(fontname)); substitutepos ++; } return fontname; @@ -1093,7 +1123,7 @@ void SWFOutputDev::updateFont(GfxState *state) return; } - logf(" Creating new SWF font: t1id: %d, filename: %s name:%s", this->t1id, fileName, fontname); + logf(" Creating new SWF font: t1id: %d, filename: %s name:%s", this->t1id, FIXNULL(fileName), FIXNULL(fontname)); swfoutput_setfont(&output, fontname, this->t1id, fileName); if(fileName) unlinkfont(fileName); @@ -1138,7 +1168,7 @@ void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, if (str->getKind() == strDCT && (colorMap->getNumPixelComps() == 3 || !mask) ) { - sprintf(fileName, "/tmp/tmp%08x.jpg",lrand48()); + sprintf(fileName, "%s.jpg",mktmpname(0)); logf(" Found jpeg. Temporary storage is %s", fileName); if(!jpeginfo) { @@ -1195,7 +1225,7 @@ void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, if(mask) { imgStr = new ImageStream(str, width, 1, 1); imgStr->reset(); - return; + //return; int yes=0,i,j; unsigned char buf[8]; int xid = 0; @@ -1342,6 +1372,7 @@ void SWFOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, GBool inlineImg) { + logf(" drawImageMask"); drawGeneralImage(state,ref,str,width,height,0,invert,inlineImg,1); } @@ -1349,6 +1380,7 @@ void SWFOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, GBool inlineImg) { + logf(" drawImage"); drawGeneralImage(state,ref,str,width,height,colorMap,0,inlineImg,0); } @@ -1492,6 +1524,11 @@ void pdfswf_storeallcharacters() storeallcharacters = 1; } +void pdfswf_enablezlib() +{ + enablezlib = 1; +} + void pdfswf_jpegquality(int val) { if(val<0) val=0; @@ -1527,7 +1564,7 @@ void pdfswf_performconversion() for(t=0;tdisplayPage((OutputDev*)output, currentpage, /*zoom*/100, /*rotate*/0, /*doLinks*/(int)1); + doc->displayPage((OutputDev*)output, currentpage, /*dpi*/72, /*rotate*/0, /*doLinks*/(int)1); } }