From: kramm Date: Fri, 22 Oct 2004 15:07:43 +0000 (+0000) Subject: moved addfontdir from pdf2swf.cc to SWFOutputDev.cc. X-Git-Tag: release-0-6-3~276 X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=commitdiff_plain;h=4921239e27afd7a74bbcd183648761608be223c1 moved addfontdir from pdf2swf.cc to SWFOutputDev.cc. --- diff --git a/pdf2swf/SWFOutputDev.cc b/pdf2swf/SWFOutputDev.cc index 23cb0c3..59ba4c5 100644 --- a/pdf2swf/SWFOutputDev.cc +++ b/pdf2swf/SWFOutputDev.cc @@ -23,6 +23,12 @@ #include #include #include "../config.h" +#ifdef HAVE_DIRENT_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif #ifdef HAVE_FONTCONFIG_H #include #endif @@ -104,8 +110,8 @@ struct mapping { {"ZapfDingbats", "d050000l"}}; class SWFOutputDev: public OutputDev { - struct swfoutput output; int outputstarted; + struct swfoutput output; public: // Constructor. @@ -117,7 +123,9 @@ public: void setMove(int x,int y); void setClip(int x1,int y1,int x2,int y2); - void save(char*filename); + int save(char*filename); + + void getDimensions(int*x1,int*y1,int*x2,int*y2); //----- get info about output device @@ -341,6 +349,13 @@ void SWFOutputDev::setClip(int x1,int y1,int x2,int y2) this->user_clipx2 = x2; this->user_clipy2 = y2; } +void SWFOutputDev::getDimensions(int*x1,int*y1,int*x2,int*y2) +{ + if(x1) *x1 = output.swf.movieSize.xmin/20; + if(y1) *y1 = output.swf.movieSize.ymin/20; + if(x2) *x2 = output.swf.movieSize.xmax/20; + if(y2) *y2 = output.swf.movieSize.ymax/20; +} static char*getFontID(GfxFont*font) { @@ -685,7 +700,7 @@ void SWFOutputDev::stroke(GfxState *state) m.m12 = 0; m.m13 = 0; m.m23 = 0; SWF_OUTLINE*outline = gfxPath_to_SWF_OUTLINE(state, path); - if(screenloglevel >= LOGLEVEL_TRACE) { + if(getLogLevel() >= LOGLEVEL_TRACE) { msg(" stroke\n"); dump_outline(outline); } @@ -721,7 +736,7 @@ void SWFOutputDev::fill(GfxState *state) m.m12 = 0; m.m13 = 0; m.m23 = 0; SWF_OUTLINE*outline = gfxPath_to_SWF_OUTLINE(state, path); - if(screenloglevel >= LOGLEVEL_TRACE) { + if(getLogLevel() >= LOGLEVEL_TRACE) { msg(" fill\n"); dump_outline(outline); } @@ -738,7 +753,7 @@ void SWFOutputDev::eoFill(GfxState *state) m.m12 = 0; m.m13 = 0; m.m23 = 0; SWF_OUTLINE*outline = gfxPath_to_SWF_OUTLINE(state, path); - if(screenloglevel >= LOGLEVEL_TRACE) { + if(getLogLevel() >= LOGLEVEL_TRACE) { msg(" eofill\n"); dump_outline(outline); } @@ -756,7 +771,7 @@ void SWFOutputDev::clip(GfxState *state) m.m13 = 0; m.m23 = 0; SWF_OUTLINE*outline = gfxPath_to_SWF_OUTLINE(state, path); - if(screenloglevel >= LOGLEVEL_TRACE) { + if(getLogLevel() >= LOGLEVEL_TRACE) { msg(" clip\n"); dump_outline(outline); } @@ -773,7 +788,7 @@ void SWFOutputDev::eoClip(GfxState *state) m.m12 = 0; m.m13 = 0; m.m23 = 0; SWF_OUTLINE*outline = gfxPath_to_SWF_OUTLINE(state, path); - if(screenloglevel >= LOGLEVEL_TRACE) { + if(getLogLevel() >= LOGLEVEL_TRACE) { msg(" eoclip\n"); dump_outline(outline); } @@ -782,9 +797,9 @@ void SWFOutputDev::eoClip(GfxState *state) clipping[clippos] ++; free_outline(outline); } -void SWFOutputDev::save(char*filename) +int SWFOutputDev::save(char*filename) { - swfoutput_save(&output, filename); + return swfoutput_save(&output, filename); } SWFOutputDev::~SWFOutputDev() @@ -1894,10 +1909,13 @@ static void printInfoDate(Dict *infoDict, char *key, char *fmt) { void pdfswf_setparameter(char*name, char*value) { + msg(" setting parameter %s to \"%s\"", name, value); if(!strcmp(name, "caplinewidth")) { caplinewidth = atof(value); } else if(!strcmp(name, "zoom")) { zoom = atoi(value); + } else if(!strcmp(name, "fontdir")) { + pdfswf_addfontdir(value); } else { swfoutput_setparameter(name, value); } @@ -1914,6 +1932,53 @@ void pdfswf_addfont(char*filename) } } +void pdfswf_addfontdir(char*dirname) +{ +#ifdef HAVE_DIRENT_H + DIR*dir = opendir(dirname); + if(!dir) { + msg(" Couldn't open directory %s\n", dirname); + return; + } + struct dirent*ent; + while(1) { + ent = readdir (dir); + if (!ent) + break; + int l; + char*name = ent->d_name; + char type = 0; + if(!name) continue; + l=strlen(name); + if(l<4) + continue; + if(!strncasecmp(&name[l-4], ".pfa", 4)) + type=1; + if(!strncasecmp(&name[l-4], ".pfb", 4)) + type=3; + if(!strncasecmp(&name[l-4], ".ttf", 4)) + type=2; + if(type) + { + char*fontname = (char*)malloc(strlen(dirname)+strlen(name)+2); + strcpy(fontname, dirname); +#ifdef WIN32 + strcat(fontname, "\\"); +#else + strcat(fontname, "/"); +#endif + strcat(fontname, name); + msg(" Adding %s to fonts", fontname); + pdfswf_addfont(fontname); + } + } + closedir(dir); +#else + msg(" No dirent.h- unable to add font dir %s"); +#endif +} + + typedef struct _pdf_doc_internal { int protect; @@ -1959,7 +2024,7 @@ pdf_doc_t* pdf_init(char*filename, char*userPassword) // print doc info i->doc->getDocInfo(&info); if (info.isDict() && - (screenloglevel>=LOGLEVEL_NOTICE)) { + (getScreenLogLevel()>=LOGLEVEL_NOTICE)) { printInfoString(info.getDict(), "Title", "Title: %s\n"); printInfoString(info.getDict(), "Subject", "Subject: %s\n"); printInfoString(info.getDict(), "Keywords", "Keywords: %s\n"); @@ -1987,8 +2052,8 @@ pdf_doc_t* pdf_init(char*filename, char*userPassword) i->protect = 0; if (i->doc->isEncrypted()) { if(!i->doc->okToCopy()) { - printf("PDF disallows copying. Terminating.\n"); - exit(1); //bail out + printf("PDF disallows copying.\n"); + return 0; } if(!i->doc->okToChange() || !i->doc->okToAddNotes()) i->protect = 1; @@ -2078,10 +2143,12 @@ void swf_output_setparameter(swf_output_t*swf_output, char*name, char*value) pdfswf_setparameter(name, value); } -void swf_output_save(swf_output_t*swf, char*filename) +int swf_output_save(swf_output_t*swf, char*filename) { swf_output_internal_t*i= (swf_output_internal_t*)swf->internal; - i->outputDev->save(filename); + int ret = i->outputDev->save(filename); + i->outputDev->getDimensions(&swf->x1, &swf->y1, &swf->x2, &swf->y2); + return ret; } void swf_output_destroy(swf_output_t*output) @@ -2092,10 +2159,10 @@ void swf_output_destroy(swf_output_t*output) free(output); } -void pdf_page_render2(pdf_page_t*page, swf_output_t*output) +void pdf_page_render2(pdf_page_t*page, swf_output_t*swf) { pdf_doc_internal_t*pi = (pdf_doc_internal_t*)page->parent->internal; - swf_output_internal_t*si = (swf_output_internal_t*)output->internal; + swf_output_internal_t*si = (swf_output_internal_t*)swf->internal; if(pi->protect) { swfoutput_setparameter("protect", "1"); @@ -2106,6 +2173,7 @@ void pdf_page_render2(pdf_page_t*page, swf_output_t*output) #else pi->doc->displayPage((OutputDev*)si->outputDev, page->nr, zoom, zoom, /*rotate*/0, true, /*doLinks*/(int)1); #endif + si->outputDev->getDimensions(&swf->x1, &swf->y1, &swf->x2, &swf->y2); } void pdf_page_rendersection(pdf_page_t*page, swf_output_t*output, int x, int y, int x1, int y1, int x2, int y2) diff --git a/pdf2swf/SWFOutputDev.h b/pdf2swf/SWFOutputDev.h index e90857c..74b9a55 100644 --- a/pdf2swf/SWFOutputDev.h +++ b/pdf2swf/SWFOutputDev.h @@ -27,6 +27,7 @@ extern "C" { void pdfswf_setparameter(char*name, char*value); void pdfswf_addfont(char*filename); +void pdfswf_addfontdir(char*dir); void pdfswf_preparepage(int page); typedef struct _pdf_doc