X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2FSWFOutputDev.cc;h=d70e3e5a2ac802f64a63fae2cedd0904f988fe5a;hb=835abe3d222b59f397ad6da56b6f40c04594d3e8;hp=c4d4be4dfe5109f6a11f9f33e0c109ef5c2629ce;hpb=889a37bd64170bee7fa7a75e47d18ab2ca058976;p=swftools.git diff --git a/pdf2swf/SWFOutputDev.cc b/pdf2swf/SWFOutputDev.cc index c4d4be4..d70e3e5 100644 --- a/pdf2swf/SWFOutputDev.cc +++ b/pdf2swf/SWFOutputDev.cc @@ -88,6 +88,7 @@ static int pagepos = 0; /* config */ static double caplinewidth = 3.0; static int zoom = 72; /* xpdf: 86 */ +static int forceType0Fonts = 0; static void printInfoString(Dict *infoDict, char *key, char *fmt); static void printInfoDate(Dict *infoDict, char *key, char *fmt); @@ -233,13 +234,6 @@ public: GfxState *laststate; - int pic_xids[1024]; - int pic_yids[1024]; - int pic_ids[1024]; - int pic_width[1024]; - int pic_height[1024]; - int picpos; - int pic_id; char type3Warning; char* substitutetarget[256]; @@ -323,8 +317,6 @@ SWFOutputDev::SWFOutputDev() clipping[clippos] = 0; outputstarted = 0; xref = 0; - picpos = 0; - pic_id = 0; substitutepos = 0; type3Warning = 0; user_movex = 0; @@ -355,7 +347,7 @@ void SWFOutputDev::setClip(int x1,int y1,int x2,int y2) } void SWFOutputDev::getDimensions(int*x1,int*y1,int*x2,int*y2) { - return swfoutput_getdimensions(&output, x1,y2,x2,y2); + return swfoutput_getdimensions(&output, x1,y1,x2,y2); } static char*getFontID(GfxFont*font) @@ -1260,9 +1252,11 @@ char*SWFOutputDev::writeEmbeddedFontToFile(XRef*ref, GfxFont*font) } #ifdef XPDF_101 Type1CFontFile *cvt = new Type1CFontFile(fontBuf, fontLen); + if(!cvt) return 0; cvt->convertToType1(f); #else FoFiType1C *cvt = FoFiType1C::make(fontBuf, fontLen); + if(!cvt) return 0; cvt->convertToType1(NULL, gTrue, FoFiWrite, f); #endif //cvt->convertToCIDType0("test", f); @@ -1448,6 +1442,10 @@ char* SWFOutputDev::substituteFont(GfxFont*gfxFont, char* oldname) fontname = "Times-Roman"; } filename = searchFont(fontname); + if(!filename) { + msg(" Couldn't find font %s- did you install the default fonts?"); + return 0; + } if(substitutepos>=sizeof(substitutesource)/sizeof(char*)) { msg(" Too many fonts in file."); @@ -1547,7 +1545,7 @@ void SWFOutputDev::updateFont(GfxState *state) if(embedded && (gfxFont->getType() == fontType1 || gfxFont->getType() == fontType1C || - //gfxFont->getType() == fontCIDType0C || + (gfxFont->getType() == fontCIDType0C && forceType0Fonts) || gfxFont->getType() == fontTrueType || gfxFont->getType() == fontCIDType2 )) @@ -1688,22 +1686,21 @@ void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, } if(mask) { - int yes=0,i,j; + int i,j; unsigned char buf[8]; - int xid = 0; - int yid = 0; int x,y; unsigned char*pic = new unsigned char[width*height]; RGBA pal[256]; GfxRGB rgb; state->getFillRGB(&rgb); + memset(pal,255,sizeof(pal)); - pal[0].r = (int)(rgb.r*255); pal[0].g = (int)(rgb.g*255); - pal[0].b = (int)(rgb.b*255); pal[0].a = 255; - pal[1].r = 0; pal[1].g = 0; pal[1].b = 0; pal[1].a = 0; + pal[0].r = (int)(rgb.r*255); pal[1].r = 0; + pal[0].g = (int)(rgb.g*255); pal[1].g = 0; + pal[0].b = (int)(rgb.b*255); pal[1].b = 0; + pal[0].a = 255; pal[1].a = 0; + int numpalette = 2; - xid += pal[1].r*3 + pal[1].g*11 + pal[1].b*17; - yid += pal[1].r*7 + pal[1].g*5 + pal[1].b*23; int realwidth = (int)sqrt(SQR(x2-x3) + SQR(y2-y3)); int realheight = (int)sqrt(SQR(x1-x2) + SQR(y1-y2)); for (y = 0; y < height; ++y) @@ -1713,72 +1710,52 @@ void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, if(invert) buf[0]=1-buf[0]; pic[width*y+x] = buf[0]; - xid+=x*buf[0]+1; - yid+=y*buf[0]*3+1; } /* the size of the drawn image is added to the identifier as the same image may require different bitmaps if displayed at different sizes (due to antialiasing): */ - if(type3active) { - xid += realwidth; - yid += realheight; - } int t,found = -1; - for(t=0;tgetNumPixelComps()!=1 || str->getKind()==strDCT) - { + if(colorMap->getNumPixelComps()!=1 || str->getKind()==strDCT) { RGBA*pic=new RGBA[width*height]; - int xid = 0; - int yid = 0; for (y = 0; y < height; ++y) { for (x = 0; x < width; ++x) { - int r,g,b,a; imgStr->getPixel(pixBuf); colorMap->getRGB(pixBuf, &rgb); - pic[width*y+x].r = r = (U8)(rgb.r * 255 + 0.5); - pic[width*y+x].g = g = (U8)(rgb.g * 255 + 0.5); - pic[width*y+x].b = b = (U8)(rgb.b * 255 + 0.5); - pic[width*y+x].a = a = 255;//(U8)(rgb.a * 255 + 0.5); - xid += x*r+x*b*3+x*g*7+x*a*11; - yid += y*r*3+y*b*17+y*g*19+y*a*11; + pic[width*y+x].r = (U8)(rgb.r * 255 + 0.5); + pic[width*y+x].g = (U8)(rgb.g * 255 + 0.5); + pic[width*y+x].b = (U8)(rgb.b * 255 + 0.5); + pic[width*y+x].a = 255;//(U8)(rgb.a * 255 + 0.5); } } - int t,found = -1; - for(t=0;tgetKind()==strDCT) - pic_ids[picpos] = swfoutput_drawimagejpeg(&output, pic, width, height, - x1,y1,x2,y2,x3,y3,x4,y4); - else - pic_ids[picpos] = swfoutput_drawimagelossless(&output, pic, width, height, - x1,y1,x2,y2,x3,y3,x4,y4); - pic_xids[picpos] = xid; - pic_yids[picpos] = yid; - pic_width[picpos] = width; - pic_height[picpos] = height; - if(picpos<1024) - picpos++; - } else { - swfoutput_drawimageagain(&output, pic_ids[found], width, height, - x1,y1,x2,y2,x3,y3,x4,y4); - } + if(str->getKind()==strDCT) + swfoutput_drawimagejpeg(&output, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4); + else + swfoutput_drawimagelossless(&output, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4); delete pic; delete imgStr; return; - } - else - { - U8*pic = new U8[width*height]; + } else { + RGBA*pic=new RGBA[width*height]; RGBA pal[256]; int t; - int xid=0,yid=0; - for(t=0;t<256;t++) - { - int r,g,b,a; + for(t=0;t<256;t++) { pixBuf[0] = t; colorMap->getRGB(pixBuf, &rgb); - pal[t].r = r = (U8)(rgb.r * 255 + 0.5); - pal[t].g = g = (U8)(rgb.g * 255 + 0.5); - pal[t].b = b = (U8)(rgb.b * 255 + 0.5); - pal[t].a = a = 255;//(U8)(rgb.b * 255 + 0.5); - xid += t*r+t*b*3+t*g*7+t*a*11; - xid += (~t)*r+t*b*3+t*g*7+t*a*11; + pal[t].r = (U8)(rgb.r * 255 + 0.5); + pal[t].g = (U8)(rgb.g * 255 + 0.5); + pal[t].b = (U8)(rgb.b * 255 + 0.5); + pal[t].a = 255;//(U8)(rgb.b * 255 + 0.5); } for (y = 0; y < height; ++y) { for (x = 0; x < width; ++x) { imgStr->getPixel(pixBuf); - pic[width*y+x] = pixBuf[0]; - xid += x*pixBuf[0]*7; - yid += y*pixBuf[0]*3; + pic[width*y+x] = pal[pixBuf[0]]; } } - int found = -1; - for(t=0;t setting parameter %s to \"%s\"", name, value); if(!strcmp(name, "caplinewidth")) { caplinewidth = atof(value); } else if(!strcmp(name, "zoom")) { + char buf[80]; zoom = atoi(value); + sprintf(buf, "%f", (double)jpeg_dpi/(double)zoom); + swfoutput_setparameter("jpegsubpixels", buf); + sprintf(buf, "%f", (double)ppm_dpi/(double)zoom); + swfoutput_setparameter("ppmsubpixels", buf); + } else if(!strcmp(name, "jpegdpi")) { + char buf[80]; + jpeg_dpi = atoi(value); + sprintf(buf, "%f", (double)jpeg_dpi/(double)zoom); + swfoutput_setparameter("jpegsubpixels", buf); + } else if(!strcmp(name, "ppmdpi")) { + char buf[80]; + ppm_dpi = atoi(value); + sprintf(buf, "%f", (double)ppm_dpi/(double)zoom); + swfoutput_setparameter("ppmsubpixels", buf); + } else if(!strcmp(name, "forceType0Fonts")) { + forceType0Fonts = atoi(value); } else if(!strcmp(name, "fontdir")) { pdfswf_addfontdir(value); } else if(!strcmp(name, "languagedir")) { @@ -2237,7 +2179,7 @@ int swf_output_save(swf_output_t*swf, char*filename) return ret; } -void* swf_output_get(swf_output_t*swf, char*filename) +void* swf_output_get(swf_output_t*swf) { swf_output_internal_t*i= (swf_output_internal_t*)swf->internal; void* ret = i->outputDev->getSWF();