From 611704121990bbd33bde02a07a5e500bd8d1d129 Mon Sep 17 00:00:00 2001 From: kramm Date: Mon, 22 Oct 2001 15:47:19 +0000 Subject: [PATCH] * added functions for setting options * merged the two image functions into one --- pdf2swf/SWFOutputDev.cc | 115 +++++++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 48 deletions(-) diff --git a/pdf2swf/SWFOutputDev.cc b/pdf2swf/SWFOutputDev.cc index 262550c..840b04e 100644 --- a/pdf2swf/SWFOutputDev.cc +++ b/pdf2swf/SWFOutputDev.cc @@ -217,11 +217,16 @@ public: GBool inlineImg); private: + void drawGeneralImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap*colorMap, GBool invert, + GBool inlineImg, int mask); int clipping[32]; int clippos; int setT1Font(char*name,FontEncoding*enc); int t1id; + int jpeginfo; // did we write "Page contains jpegs" yet? + int pbminfo; // did we write "Page contains jpegs" yet? }; char mybuf[1024]; @@ -488,7 +493,7 @@ T1_OUTLINE* gfxPath_to_T1_OUTLINE(GfxState*state, GfxPath*path) void SWFOutputDev::stroke(GfxState *state) { - logf(" %s stroke\n",gfxstate2str(state)); + logf(" stroke\n"); GfxPath * path = state->getPath(); struct swfmatrix m; m.m11 = 1; m.m21 = 0; m.m22 = 1; @@ -499,7 +504,7 @@ void SWFOutputDev::stroke(GfxState *state) } void SWFOutputDev::fill(GfxState *state) { - logf(" %s fill\n",gfxstate2str(state)); + logf(" fill\n"); GfxPath * path = state->getPath(); struct swfmatrix m; m.m11 = 1; m.m21 = 0; m.m22 = 1; @@ -510,7 +515,7 @@ void SWFOutputDev::fill(GfxState *state) } void SWFOutputDev::eoFill(GfxState *state) { - logf(" %s eofill\n",gfxstate2str(state)); + logf(" eofill\n"); GfxPath * path = state->getPath(); struct swfmatrix m; m.m11 = 1; m.m21 = 0; m.m22 = 1; @@ -521,7 +526,7 @@ void SWFOutputDev::eoFill(GfxState *state) } void SWFOutputDev::clip(GfxState *state) { - logf(" %s clip\n",gfxstate2str(state)); + logf(" clip\n"); GfxPath * path = state->getPath(); struct swfmatrix m; m.m11 = 1; m.m21 = 0; m.m22 = 1; @@ -532,7 +537,7 @@ void SWFOutputDev::clip(GfxState *state) } void SWFOutputDev::eoClip(GfxState *state) { - logf(" %s eoclip\n",gfxstate2str(state)); + logf(" eoclip\n"); GfxPath * path = state->getPath(); struct swfmatrix m; m.m11 = 1; m.m21 = 0; m.m22 = 1; @@ -561,7 +566,7 @@ GBool SWFOutputDev::useDrawChar() void SWFOutputDev::beginString(GfxState *state, GString *s) { double m11,m21,m12,m22; - logf(" %s beginstring \"%s\"\n", gfxstate2str(state), s->getCString()); + logf(" beginstring \"%s\"\n", s->getCString()); state->getFontTransMat(&m11, &m12, &m21, &m22); m11 *= state->getHorizScaling(); m21 *= state->getHorizScaling(); @@ -571,7 +576,7 @@ void SWFOutputDev::beginString(GfxState *state, GString *s) int charcounter = 0; void SWFOutputDev::drawChar(GfxState *state, double x, double y, double dx, double dy, Guchar c) { - logf(" %s drawChar(%f,%f,%f,%f,'%c')\n",gfxstate2str(state), x,y,dx,dy,c); + logf(" drawChar(%f,%f,%f,%f,'%c')\n",x,y,dx,dy,c); // check for invisible text -- this is used by Acrobat Capture if ((state->getRender() & 3) != 3) { @@ -588,20 +593,22 @@ void SWFOutputDev::drawChar(GfxState *state, double x, double y, double dx, doub void SWFOutputDev::drawChar16(GfxState *state, double x, double y, double dx, double dy, int c) { - printf(" %s drawChar16(%f,%f,%f,%f,%08x)\n",gfxstate2str(state), x,y,dx,dy,c); + printf(" drawChar16(%f,%f,%f,%f,%08x)\n",x,y,dx,dy,c); exit(1); } void SWFOutputDev::endString(GfxState *state) { - logf(" %s endstring\n", gfxstate2str(state)); + logf(" endstring\n"); } void SWFOutputDev::startPage(int pageNum, GfxState *state) { double x1,y1,x2,y2; - logf(" %s, startPage %d\n", gfxstate2str(state), pageNum); + 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); @@ -681,14 +688,14 @@ void SWFOutputDev::drawLink(Link *link, Catalog *catalog) } void SWFOutputDev::saveState(GfxState *state) { - logf(" %s saveState\n", gfxstate2str(state)); + logf(" saveState\n"); updateAll(state); clippos ++; clipping[clippos] = 0; }; void SWFOutputDev::restoreState(GfxState *state) { - logf(" %s restoreState\n", gfxstate2str(state)); + logf(" restoreState\n"); updateAll(state); if(clipping[clippos]) swfoutput_endclip(&output); @@ -936,9 +943,10 @@ void SWFOutputDev::updateFont(GfxState *state) unlink(fileName); } -void SWFOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg) { +void SWFOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap*colorMap, GBool invert, + GBool inlineImg, int mask) +{ FILE *fi; int c; char fileName[128]; @@ -948,9 +956,16 @@ void SWFOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, state->transform(1, 0, &x3, &y3); state->transform(1, 1, &x4, &y4); - if (str->getKind() == strDCT) { + if (str->getKind() == strDCT && + (colorMap->getNumPixelComps() == 3 || !mask) ) + { sprintf(fileName, "/tmp/tmp%08x.jpg",lrand48()); - logf(" Found picture. Temporary storage is %s", fileName); + logf(" Found jpeg. Temporary storage is %s", fileName); + if(!jpeginfo) + { + logf(" Page contains jpeg pictures"); + jpeginfo = 1; + } if (!(fi = fopen(fileName, "wb"))) { logf(" Couldn't open temporary image file '%s'", fileName); return; @@ -963,40 +978,26 @@ void SWFOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, swfoutput_drawimagefile(&output, fileName, width, height, x1,y1,x2,y2,x3,y3,x4,y4); unlink(fileName); } else { - logf(" File contains pbm pictures."); + if(!pbminfo) + { + logf(" Page contains pbm pictures"); + pbminfo = 1; + } } } +void SWFOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool inlineImg) +{ + drawGeneralImage(state,ref,str,width,height,0,invert,inlineImg,1); +} + void SWFOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, - GfxImageColorMap *colorMap, GBool inlineImg) { - FILE *fi; - int c; - char fileName[128]; - double x1,y1,x2,y2,x3,y3,x4,y4; - state->transform(0, 1, &x1, &y1); - state->transform(0, 0, &x2, &y2); - state->transform(1, 0, &x3, &y3); - state->transform(1, 1, &x4, &y4); - - if (str->getKind() == strDCT && - colorMap->getNumPixelComps() == 3) { - sprintf(fileName, "/tmp/tmp%08x.jpg", lrand48()); - logf(" Found picture. Temporary storage is %s", fileName); - if (!(fi = fopen(fileName, "wb"))) { - error(-1, "Couldn't open temporary image file '%s'", fileName); - return; - } - str = ((DCTStream *)str)->getRawStream(); - str->reset(); - while ((c = str->getChar()) != EOF) - fputc(c, fi); - fclose(fi); - swfoutput_drawimagefile(&output, fileName, width, height, x1,y1,x2,y2,x3,y3,x4,y4); - unlink(fileName); - } else { - logf(" File contains pbm pictures."); - } + GfxImageColorMap *colorMap, GBool inlineImg) +{ + drawGeneralImage(state,ref,str,width,height,colorMap,0,inlineImg,0); } PDFDoc*doc = 0; @@ -1077,6 +1078,23 @@ void pdfswf_init(char*filename, char*userPassword) output = new SWFOutputDev(); } +void pdfswf_drawonlyshapes() +{ + drawonlyshapes = 1; +} + +void pdfswf_ignoredraworder() +{ + ignoredraworder = 1; +} + +void pdfswf_jpegquality(int val) +{ + if(val<0) val=0; + if(val>100) val=100; + jpegquality = val; +} + void pdfswf_setoutputfilename(char*_filename) { swffilename = _filename; @@ -1092,11 +1110,12 @@ int pdfswf_numpages() return doc->getNumPages(); } +int closed=0; void pdfswf_close() { - delete doc; + logf(" pdfswf.cc: pdfswf_close()"); delete output; - + delete doc; freeParams(); // check for memory leaks Object::memCheck(stderr); -- 1.7.10.4