X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;ds=sidebyside;f=pdf2swf%2FSWFOutputDev.cc;h=81a62117f43ab8917600fd340b1fbd2d405b6bae;hb=74d13887e9c68f8e4aa2cda5ba7b0c764df0bf86;hp=8e8c1f7a0dba822a72e9a886882570bbe6264d3f;hpb=4bfcb7ae5fe91167cfce574142c7acd100745459;p=swftools.git diff --git a/pdf2swf/SWFOutputDev.cc b/pdf2swf/SWFOutputDev.cc index 8e8c1f7..81a6211 100644 --- a/pdf2swf/SWFOutputDev.cc +++ b/pdf2swf/SWFOutputDev.cc @@ -86,34 +86,6 @@ static int zoom = 72; /* xpdf: 86 */ static void printInfoString(Dict *infoDict, char *key, char *fmt); static void printInfoDate(Dict *infoDict, char *key, char *fmt); -static double fontsizes[] = -{ - 0.833,0.833,0.889,0.889, - 0.788,0.722,0.833,0.778, - 0.600,0.600,0.600,0.600, - 0.576,0.576,0.576,0.576, - 0.733 //? -}; -static char*fontnames[]={ -"Helvetica", -"Helvetica-Bold", -"Helvetica-BoldOblique", -"Helvetica-Oblique", -"Times-Roman", -"Times-Bold", -"Times-BoldItalic", -"Times-Italic", -"Courier", -"Courier-Bold", -"Courier-BoldOblique", -"Courier-Oblique", -"Symbol", -"Symbol", -"Symbol", -"Symbol", -"ZapfDingBats" -}; - struct mapping { char*pdffont; char*filename; @@ -134,9 +106,6 @@ struct mapping { {"Symbol", "s050000l"}, {"ZapfDingbats", "d050000l"}}; -class GfxState; -class GfxImageColorMap; - class SWFOutputDev: public OutputDev { struct swfoutput output; int outputstarted; @@ -157,6 +126,9 @@ public: // Does this device use drawChar() or drawString()? virtual GBool useDrawChar(); + // Can this device draw gradients? + virtual GBool useGradients(); + virtual GBool interpretType3Chars() {return gTrue;} //----- initialization and control @@ -238,10 +210,42 @@ public: int pbminfo; // did we write "File contains jpegs" yet? int linkinfo; // did we write "File contains links" yet? int ttfinfo; // did we write "File contains TrueType Fonts" yet? + int gradientinfo; // did we write "File contains Gradients yet? int type3active; // are we between beginType3()/endType3()? 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]; + char* substitutesource[256]; + int substitutepos; +}; + +SWFOutputDev::SWFOutputDev() +{ + jpeginfo = 0; + ttfinfo = 0; + linkinfo = 0; + pbminfo = 0; + type3active = 0; + clippos = 0; + clipping[clippos] = 0; + outputstarted = 0; + xref = 0; + picpos = 0; + pic_id = 0; + substitutepos = 0; + type3Warning = 0; +// printf("SWFOutputDev::SWFOutputDev() \n"); }; static char*getFontID(GfxFont*font) @@ -266,8 +270,8 @@ static char*getFontName(GfxFont*font) return fontname; } -char mybuf[1024]; -char* gfxstate2str(GfxState *state) +static char mybuf[1024]; +static char* gfxstate2str(GfxState *state) { char*bufpos = mybuf; GfxRGB rgb; @@ -373,16 +377,14 @@ char* gfxstate2str(GfxState *state) return mybuf; } - - -void dumpFontInfo(char*loglevel, GfxFont*font); -int lastdumps[1024]; -int lastdumppos = 0; +static void dumpFontInfo(char*loglevel, GfxFont*font); +static int lastdumps[1024]; +static int lastdumppos = 0; /* nr = 0 unknown nr = 1 substituting nr = 2 type 3 */ -void showFontError(GfxFont*font, int nr) +static void showFontError(GfxFont*font, int nr) { Ref*r=font->getID(); int t; @@ -402,7 +404,7 @@ void showFontError(GfxFont*font, int nr) dumpFontInfo("", font); } -void dumpFontInfo(char*loglevel, GfxFont*font) +static void dumpFontInfo(char*loglevel, GfxFont*font) { char* name = getFontID(font); Ref* r=font->getID(); @@ -464,20 +466,6 @@ void dumpFontInfo(char*loglevel, GfxFont*font) //void SWFOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, GBool inlineImg) {printf("void SWFOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, GBool inlineImg) \n");} //void SWFOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, GBool inlineImg) {printf("void SWFOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, GBool inlineImg) \n");} -SWFOutputDev::SWFOutputDev() -{ - jpeginfo = 0; - ttfinfo = 0; - linkinfo = 0; - pbminfo = 0; - type3active = 0; - clippos = 0; - clipping[clippos] = 0; - outputstarted = 0; - xref = 0; -// printf("SWFOutputDev::SWFOutputDev() \n"); -}; - SWF_OUTLINE* gfxPath_to_SWF_OUTLINE(GfxState*state, GfxPath*path) { int num = path->getNumSubpaths(); @@ -648,6 +636,15 @@ GBool SWFOutputDev::useDrawChar() { return gTrue; } +GBool SWFOutputDev::useGradients() +{ + if(!gradientinfo) + { + msg(" File contains gradients"); + gradientinfo = 1; + } + return gTrue; +} void SWFOutputDev::beginString(GfxState *state, GString *s) { @@ -680,9 +677,9 @@ void SWFOutputDev::drawChar(GfxState *state, double x, double y, state->transform(x, y, &x1, &y1); Unicode u=0; - if(_u) + if(_u && uLen) u = *_u; - + /* find out the character name */ char*name=0; if(font->isCIDFont() && u) { @@ -934,8 +931,6 @@ void SWFOutputDev::restoreState(GfxState *state) { clippos--; } -char type3Warning=0; - char* SWFOutputDev::searchFont(char*name) { int i; @@ -1118,11 +1113,6 @@ char*SWFOutputDev::writeEmbeddedFontToFile(XRef*ref, GfxFont*font) return strdup(tmpFileName); } - -char* substitutetarget[256]; -char* substitutesource[256]; -int substitutepos = 0; - char* searchForSuitableFont(GfxFont*gfxFont) { char*name = getFontName(gfxFont); @@ -1356,14 +1346,6 @@ void SWFOutputDev::updateFont(GfxState *state) unlinkfont(fileName); } -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) @@ -1733,66 +1715,70 @@ static void printInfoDate(Dict *infoDict, char *key, char *fmt) { void pdfswf_init(char*filename, char*userPassword) { - GString *fileName = new GString(filename); - GString *userPW; - Object info; - - // read config file - globalParams = new GlobalParams(""); - - // open PDF file - if (userPassword && userPassword[0]) { - userPW = new GString(userPassword); - } else { - userPW = NULL; - } - doc = new PDFDoc(fileName, userPW); - if (userPW) { - delete userPW; - } - if (!doc->isOk()) { - exit(1); - } + GString *fileName = new GString(filename); + GString *userPW; + Object info; - // print doc info - doc->getDocInfo(&info); - 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"); - printInfoString(info.getDict(), "Author", "Author: %s\n"); - printInfoString(info.getDict(), "Creator", "Creator: %s\n"); - 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"); + // read config file + globalParams = new GlobalParams(""); + + // open PDF file + if (userPassword && userPassword[0]) { + userPW = new GString(userPassword); } else { - printf("no\n"); + userPW = NULL; } - } - info.free(); - - numpages = doc->getNumPages(); - if (doc->isEncrypted()) { - if(!doc->okToCopy()) { - printf("PDF disallows copying. Bailing out.\n"); - exit(1); //bail out - } - if(!doc->okToChange() || !doc->okToAddNotes()) - swfoutput_setprotected(); - } + doc = new PDFDoc(fileName, userPW); + if (userPW) { + delete userPW; + } + if (!doc->isOk()) { + exit(1); + } + + // print doc info + doc->getDocInfo(&info); + 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"); + printInfoString(info.getDict(), "Author", "Author: %s\n"); + printInfoString(info.getDict(), "Creator", "Creator: %s\n"); + 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(); + + numpages = doc->getNumPages(); + int protect = 0; + if (doc->isEncrypted()) { + if(!doc->okToCopy()) { + printf("PDF disallows copying. Terminating.\n"); + exit(1); //bail out + } + if(!doc->okToChange() || !doc->okToAddNotes()) + protect = 1; + } + + if(protect) + swfoutput_setparameter("protect", "1"); - output = new SWFOutputDev(); - output->startDoc(doc->getXRef()); + output = new SWFOutputDev(); + output->startDoc(doc->getXRef()); } void pdfswf_setparameter(char*name, char*value) @@ -1851,7 +1837,6 @@ int pdfswf_numpages() { return doc->getNumPages(); } -int closed=0; void pdfswf_close() { msg(" pdfswf.cc: pdfswf_close()");