X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2FSWFOutputDev.cc;h=c2aa5cb58b1796efc940088b1b67531030d4b197;hb=b758bdb10da8e20798da872c5db99eccc399bfd6;hp=c1d9548a09025118208c08053936f0d3a0e125ca;hpb=a9a1aa645b2237007cda1e2eaa3025177a4e0fe1;p=swftools.git diff --git a/pdf2swf/SWFOutputDev.cc b/pdf2swf/SWFOutputDev.cc index c1d9548..c2aa5cb 100644 --- a/pdf2swf/SWFOutputDev.cc +++ b/pdf2swf/SWFOutputDev.cc @@ -355,13 +355,13 @@ void showFontError(GfxFont*font, int nr) if(lastdumppos The following font caused problems:"); + logf(" The following font caused problems:"); else if(nr == 1) - logf(" The following font caused problems (substituting):"); + logf(" The following font caused problems (substituting):"); else if(nr == 2) - logf(" This document contains Type 3 Fonts: (some text may be incorrectly displayed)"); + logf(" This document contains Type 3 Fonts: (some text may be incorrectly displayed)"); - dumpFontInfo("", font); + dumpFontInfo("", font); } void dumpFontInfo(char*loglevel, GfxFont*font) @@ -422,6 +422,8 @@ void dumpFontInfo(char*loglevel, GfxFont*font) SWFOutputDev::SWFOutputDev() { + jpeginfo = 0; + pbminfo = 0; clippos = 0; clipping[clippos] = 0; outputstarted = 0; @@ -588,7 +590,10 @@ void SWFOutputDev::drawChar(GfxState *state, double x, double y, double dx, doub y1 = y; state->transform(x, y, &x1, &y1); - swfoutput_drawchar(&output, x1, y1, enc->getCharName(c)); + if(enc->getCharName(c)) + swfoutput_drawchar(&output, x1, y1, enc->getCharName(c)); + else + logf(" couldn't get name for character %02x from Encoding", c); } } @@ -608,8 +613,6 @@ void SWFOutputDev::startPage(int pageNum, GfxState *state) double x1,y1,x2,y2; logf(" startPage %d\n", pageNum); logf(" processing page %d", pageNum); - jpeginfo = 0; - pbminfo = 0; state->transform(state->getX1(),state->getY1(),&x1,&y1); state->transform(state->getX2(),state->getY2(),&x2,&y2); @@ -738,7 +741,7 @@ int SWFOutputDev::setT1Font(char*name, FontEncoding*encoding) void SWFOutputDev::updateLineWidth(GfxState *state) { - double width = state->getLineWidth(); + double width = state->getTransformedLineWidth(); swfoutput_setlinewidth(&output, width); } @@ -944,6 +947,12 @@ void SWFOutputDev::updateFont(GfxState *state) unlink(fileName); } +int pic_xids[1024]; +int pic_yids[1024]; +int pic_ids[1024]; +int picpos = 0; +int pic_id = 0; + void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap*colorMap, GBool invert, GBool inlineImg, int mask) @@ -952,6 +961,12 @@ void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, int c; char fileName[128]; double x1,y1,x2,y2,x3,y3,x4,y4; + ImageStream *imgStr; + Guchar pixBuf[4]; + GfxRGB rgb; + if(!width || !height) + return; + state->transform(0, 1, &x1, &y1); state->transform(0, 0, &x2, &y2); state->transform(1, 0, &x3, &y3); @@ -964,7 +979,7 @@ void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, logf(" Found jpeg. Temporary storage is %s", fileName); if(!jpeginfo) { - logf(" Page contains jpeg pictures"); + logf(" file contains jpeg pictures"); jpeginfo = 1; } if (!(fi = fopen(fileName, "wb"))) { @@ -973,17 +988,153 @@ void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, } str = ((DCTStream *)str)->getRawStream(); str->reset(); + int xid = 0; + int yid = 0; + int count = 0; while ((c = str->getChar()) != EOF) + { fputc(c, fi); + xid += count*c; + yid += (~count)*c; + count++; + } fclose(fi); - swfoutput_drawimagefile(&output, fileName, width, height, x1,y1,x2,y2,x3,y3,x4,y4); + + int t,found = -1; + for(t=0;t Page contains pbm pictures"); - pbminfo = 1; - } + + if(!pbminfo) { + logf(" file contains pbm pictures %s",mask?"(masked)":""); + if(mask) + logf(" ignoring %d by %d masked picture\n", width, height); + pbminfo = 1; + } + + if(mask) { + str->reset(); + int yes=0; + while ((c = str->getChar()) != EOF) + { + if((c<32 || c>'z') && yes && (c!=13) && (c!=10)) { + printf("no ascii: %02x\n", c); + yes = 1; + } + } + } else { + int x,y; + int width2 = (width+3)&(~3); + imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), + colorMap->getBits()); + imgStr->reset(); + + if(colorMap->getNumPixelComps()!=1) + { + 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; + } + } + int t,found = -1; + for(t=0;tgetRGB(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; + } + for (y = 0; y < height; ++y) { + for (x = 0; x < width; ++x) { + imgStr->getPixel(pixBuf); + pic[width2*y+x] = pixBuf[0]; + xid += x*pixBuf[0]*7; + yid += y*pixBuf[0]*3; + } + } + int found = -1; + for(t=0;t