X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.cc;h=2c4149915a99af6de82bb3ffad203c4cdba204b7;hb=6c3ab5574d31504d24710c2756899d49275c1a37;hp=c9c4c79140682fdc72cdb171cc5bc074dd9cf05f;hpb=e847c0de2791e9243a228ab144d9bac8f39a04db;p=swftools.git diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index c9c4c79..2c41499 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -22,7 +22,9 @@ #include #include #include +#ifdef HAVE_UNISTD_H #include +#endif #include "../../config.h" #include "../os.h" #ifdef HAVE_DIRENT_H @@ -57,7 +59,7 @@ #include "GHash.h" #include "GFXOutputDev.h" -//swftools header files +// swftools header files #include "../log.h" #include "../gfxdevice.h" #include "../gfxtools.h" @@ -68,7 +70,7 @@ #include "../devices/render.h" #include "../art/libart.h" -#include "../devices/artsutils.c" +#include "../devices/artsutils.h" #include "../png.h" #include "fonts.h" @@ -368,6 +370,7 @@ GFXOutputDev::GFXOutputDev(InfoOutputDev*info, PDFDoc*doc) this->config_remapunicode=0; this->config_transparent=0; this->config_extrafontdata = 0; + this->config_fontquality = 10; this->gfxfontlist = gfxfontlist_create(); @@ -384,12 +387,17 @@ void GFXOutputDev::setParameter(const char*key, const char*value) this->config_transparent = atoi(value); } else if(!strcmp(key,"extrafontdata")) { this->config_extrafontdata = atoi(value); + } else if(!strcmp(key,"fontquality")) { + this->config_fontquality = atof(value); + if(this->config_fontquality<=1) + this->config_fontquality=1; } else if(!strcmp(key,"help")) { printf("\nPDF layer options:\n"); printf("breakonwarning=0/1 Abort conversion if graphic objects are found which\n"); printf(" are not 100%% supported\n"); printf("transparent=0/1 Make PDF transparent (alpha background)\n"); printf("extrafontdata=0/1 Store Type3 characters and capture characters\n"); + printf("fontquality=1..100 Curve approximation quality of the fonts\n"); } } @@ -695,7 +703,7 @@ void GFXOutputDev::strokeGfxline(GfxState *state, gfxline_t*line, int flags) msg(" %d dashes", dashnum); msg(" | phase: %f", dashphase); for(t=0;t | d%-3d: %f", t, ldash[t]); } dash[dashnum] = -1; @@ -703,7 +711,7 @@ void GFXOutputDev::strokeGfxline(GfxState *state, gfxline_t*line, int flags) dump_outline(line); } - line2 = gfxtool_dash_line(line, dash, dashphase); + line2 = gfxtool_dash_line(line, dash, (float)dashphase); line = line2; free(dash); msg(" After dashing:"); @@ -1091,12 +1099,11 @@ void GFXOutputDev::startPage(int pageNum, GfxState *state, double crop_x1, doubl this->currentpage = pageNum; double x1,y1,x2,y2; int rot = doc->getPageRotate(1); - gfxcolor_t white; + gfxcolor_t white = {255,255,255,255}; + gfxcolor_t black = {255,0,0,0}; laststate = state; gfxline_t clippath[5]; - white.r = white.g = white.b = white.a = 255; - /* state->transform(state->getX1(),state->getY1(),&x1,&y1); state->transform(state->getX2(),state->getY2(),&x2,&y2); Use CropBox, not MediaBox, as page size @@ -1144,7 +1151,7 @@ void GFXOutputDev::startPage(int pageNum, GfxState *state, double crop_x1, doubl void GFXOutputDev::processLink(Link *link, Catalog *catalog) { - double x1, y1, x2, y2, w; + double x1, y1, x2, y2; gfxline_t points[5]; int x, y; @@ -1419,7 +1426,7 @@ void GFXOutputDev::updateStrokeColor(GfxState *state) } -gfxfont_t* createGfxFont(GfxFont*xpdffont, FontInfo*src) +gfxfont_t* createGfxFont(GfxFont*xpdffont, FontInfo*src, double config_fontquality) { gfxfont_t*font = (gfxfont_t*)malloc(sizeof(gfxfont_t)); memset(font, 0, sizeof(gfxfont_t)); @@ -1428,7 +1435,8 @@ gfxfont_t* createGfxFont(GfxFont*xpdffont, FontInfo*src) memset(font->glyphs, 0, sizeof(gfxglyph_t)*src->num_glyphs); font->id = strdup(getFontID(xpdffont)); int t; - double quality = (INTERNAL_FONT_SIZE * 0.05) / src->max_size; + + double quality = (INTERNAL_FONT_SIZE * 200 / config_fontquality) / src->max_size; double scale = 1; //printf("%d glyphs\n", font->num_glyphs); font->num_glyphs = 0; @@ -1512,6 +1520,7 @@ void GFXOutputDev::updateFont(GfxState *state) this->current_fontinfo = this->info->getFont(id); if(!this->current_fontinfo) { msg(" Internal Error: no fontinfo for font %s\n", id); + return; } if(!this->current_fontinfo->seen) { dumpFontInfo("", gfxFont); @@ -1519,7 +1528,7 @@ void GFXOutputDev::updateFont(GfxState *state) gfxfont_t*font = gfxfontlist_findfont(this->gfxfontlist,id); if(!font) { - font = createGfxFont(gfxFont, current_fontinfo); + font = createGfxFont(gfxFont, current_fontinfo, this->config_fontquality); font->id = strdup(id); this->gfxfontlist = gfxfontlist_addfont(this->gfxfontlist, font); device->addfont(device, font); @@ -1540,7 +1549,6 @@ unsigned char* antialize(unsigned char*data, int width, int height, int newwidth 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; @@ -1613,9 +1621,6 @@ static void drawimage(gfxdevice_t*dev, gfxcolor_t* data, int sizex,int sizey, p5.y = (int)(p5.y*20)/20.0; } - float m00,m10,tx; - float m01,m11,ty; - gfxmatrix_t m; m.m00 = (p4.x-p1.x)/sizex; m.m10 = (p2.x-p1.x)/sizey; m.m01 = (p4.y-p1.y)/sizex; m.m11 = (p2.y-p1.y)/sizey; @@ -1740,7 +1745,6 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, } if(mask) { - int i,j; unsigned char buf[8]; int x,y; unsigned char*pic = new unsigned char[width*height]; @@ -1769,7 +1773,7 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, /* 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): */ - int t,found = -1; + int found = -1; if(type3active) { unsigned char*pic2 = 0; numpalette = 16; @@ -1789,7 +1793,7 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, /* make a black/white palette */ - float r = 255/(numpalette-1); + float r = 255./(float)(numpalette-1); int t; for(t=0;t Adding %s to language pack directories", dir); - int l; FILE*fi = 0; char* config_file = (char*)malloc(strlen(dir) + 1 + sizeof("add-to-xpdfrc") + 1); strcpy(config_file, dir); @@ -2069,7 +2072,7 @@ void addGlobalFontDir(const char*dirname) } closedir(dir); #else - msg(" No dirent.h- unable to add font dir %s", dir); + msg(" No dirent.h- unable to add font dir %s", dirname); #endif }