X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2FSWFOutputDev.cc;h=1af448c4b96e3e9ecde3d008856192a4382ec8e2;hb=a5919d0134bcf5cbd0efee83baf175f002766864;hp=885733acc83726743c3cd6c0d3b841dd185c7810;hpb=af362434b81e89338d136e152aa4207edbc9f376;p=swftools.git diff --git a/pdf2swf/SWFOutputDev.cc b/pdf2swf/SWFOutputDev.cc index 885733a..1af448c 100644 --- a/pdf2swf/SWFOutputDev.cc +++ b/pdf2swf/SWFOutputDev.cc @@ -48,6 +48,10 @@ extern "C" { #include "ttf2pt1.h" } +#define logf logarithmf // logf is also used by ../lib/log.h +#include +#undef logf + static PDFDoc*doc = 0; static char* swffilename = 0; int numpages; @@ -574,6 +578,7 @@ void SWFOutputDev::beginString(GfxState *state, GString *s) } int charcounter = 0; +int ciderror = 0; void SWFOutputDev::drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, @@ -586,7 +591,9 @@ void SWFOutputDev::drawChar(GfxState *state, double x, double y, GfxFont*font = state->getFont(); Gfx8BitFont*font8; if(font->isCIDFont()) { - logf(" CID Font"); + if(!ciderror) + logf(" Not drawing CID Font characters!"); + ciderror++; return; } if(font->getType() == fontType3) { @@ -622,7 +629,7 @@ GBool SWFOutputDev::beginType3Char(GfxState *state, type3active = 1; /* the character itself is going to be passed using drawImageMask() */ - return gFalse; + return gFalse; /* gTrue= is_in_cache? */ } void SWFOutputDev::endType3Char(GfxState *state) @@ -818,6 +825,11 @@ int SWFOutputDev::searchT1Font(char*name) int i; int mapid=-1; char*filename=0; + + char*name2 = 0; + if(name) name2 = strchr(name,'+'); + if(name2) name2++; + 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; + + if(fontname) { + if((!strcmp(name, fontname)) || + (name2 && !strcmp(name2, 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)) { + if(strstr(fontname, name) || (name2 && strstr(fontname,name2))) { logf(" Extra font %s is being used.\n", fontname); return i; } @@ -1218,9 +1235,61 @@ void SWFOutputDev::updateFont(GfxState *state) int pic_xids[1024]; int pic_yids[1024]; int pic_ids[1024]; +int pic_width[1024]; +int pic_height[1024]; int picpos = 0; int pic_id = 0; +#define SQR(x) ((x)*(x)) + +unsigned char* antialize(unsigned char*data, int width, int height, int newwidth, int newheight, int palettesize) +{ + if((newwidth<2 || newheight<2) || + (width<=newwidth || height<=newheight)) + return 0; + unsigned char*newdata; + int x,y; + newdata= (unsigned char*)malloc(newwidth*newheight); + int t; + double fx = (double)(width)/newwidth; + double fy = (double)(height)/newheight; + double px = 0; + int blocksize = (int)(8192/(fx*fy)); + int r = 8192*256/palettesize; + for(x=0;xgetFillRGB(&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; + 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) for (x = 0; x < width; ++x) { imgStr->getPixel(buf); - // if(invert) buf[0]=255-buf[0]? + if(invert) + buf[0]=1-buf[0]; pic[width*y+x] = buf[0]; xid+=x*buf[0]+1; - yid+=y*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;tgetDocInfo(&info); - if (info.isDict()) { + if (info.isDict() && + (screenloglevel>=LOGLEVEL_NOTICE)) { printInfoString(info.getDict(), "Title", "Title: %s\n"); printInfoString(info.getDict(), "Subject", "Subject: %s\n"); printInfoString(info.getDict(), "Keywords", "Keywords: %s\n"); @@ -1520,24 +1642,23 @@ void pdfswf_init(char*filename, char*userPassword) printInfoString(info.getDict(), "Producer", "Producer: %s\n"); printInfoDate(info.getDict(), "CreationDate", "CreationDate: %s\n"); printInfoDate(info.getDict(), "ModDate", "ModDate: %s\n"); + printf("Pages: %d\n", doc->getNumPages()); + printf("Linearized: %s\n", doc->isLinearized() ? "yes" : "no"); + printf("Encrypted: "); + if (doc->isEncrypted()) { + printf("yes (print:%s copy:%s change:%s addNotes:%s)\n", + doc->okToPrint() ? "yes" : "no", + doc->okToCopy() ? "yes" : "no", + doc->okToChange() ? "yes" : "no", + doc->okToAddNotes() ? "yes" : "no"); + } else { + printf("no\n"); + } } info.free(); - // print page count - printf("Pages: %d\n", doc->getNumPages()); numpages = doc->getNumPages(); - - // print linearization info - printf("Linearized: %s\n", doc->isLinearized() ? "yes" : "no"); - - // print encryption info - printf("Encrypted: "); if (doc->isEncrypted()) { - printf("yes (print:%s copy:%s change:%s addNotes:%s)\n", - doc->okToPrint() ? "yes" : "no", - doc->okToCopy() ? "yes" : "no", - doc->okToChange() ? "yes" : "no", - doc->okToAddNotes() ? "yes" : "no"); /*ERROR: This pdf is encrypted, and disallows copying. Due to the DMCA, paragraph 1201, (2) A-C, circumventing a technological measure that efficively controls access to @@ -1550,12 +1671,8 @@ void pdfswf_init(char*filename, char*userPassword) } if(!doc->okToChange() || !doc->okToAddNotes()) swfoutput_setprotected(); - } - else { - printf("no\n"); } - output = new SWFOutputDev(); output->startDoc(doc->getXRef()); } @@ -1629,6 +1746,11 @@ int pdfswf_numpages() return doc->getNumPages(); } +void pdfswf_insertstop() +{ + insertstoptag = 1; +} + int closed=0; void pdfswf_close() { @@ -1641,3 +1763,4 @@ void pdfswf_close() gMemReport(stderr); } +