void k2file_get_overlay_bitmap(WILLUSBITMAP *bmp,double *dpi,char *filename,char *pagelist) { int i,c,c2,src_type,np; char mupdffilename[MAXFILENAMELEN]; static K2PDFOPT_SETTINGS _k2settings; K2PDFOPT_SETTINGS *k2settings; WILLUSBITMAP *tmp,_tmp; (*dpi)=100.; src_type = get_source_type(filename); if (src_type!=SRC_TYPE_PDF && src_type!=SRC_TYPE_DJVU) return; strncpy(mupdffilename,filename,MAXFILENAMELEN-1); mupdffilename[MAXFILENAMELEN-1]='\0'; k2settings=&_k2settings; k2pdfopt_settings_init(k2settings); k2settings->document_scale_factor=1.0; k2settings->usegs=-1; np=file_numpages(filename,mupdffilename,src_type,&k2settings->usegs); for (c=0,i=1;i<=np;i++) if (pagelist_includes_page(pagelist,i,np)) c++; #ifdef HAVE_K2GUI if (k2gui_active()) { k2gui_overlay_set_num_pages(c); k2gui_overlay_set_pages_completed(0,NULL); } #endif tmp=&_tmp; bmp_init(tmp); for (c=c2=0,i=1;i<=np;i++) { int status; if (!pagelist_includes_page(pagelist,i,np)) continue; status=bmp_get_one_document_page(tmp,k2settings,src_type,mupdffilename,i,100.,8,NULL); c2++; #ifdef HAVE_K2GUI if (k2gui_active()) k2gui_overlay_set_pages_completed(c2,NULL); #endif if (status) { #ifdef HAVE_K2GUI if (k2gui_active()) k2gui_overlay_error(filename,i,status); #endif continue; } c++; if (c==1) bmp_copy(bmp,tmp); else bmp8_merge(bmp,tmp,c); } bmp_free(tmp); }
int main(int argc,char *argv[]) { static K2PDFOPT_SETTINGS _k2settings, *k2settings; static MASTERINFO _masterinfo, *masterinfo; WILLUSBITMAP _srcgrey, *srcgrey; WILLUSBITMAP _src, *src; BMPREGION region; int status; if (argc<2) { printf("usage: kview <infile.bmp>\n"); return(0); } src=&_src; bmp_init(src); srcgrey=&_srcgrey; bmp_init(srcgrey); if ((status=bmp_read(src,argv[1],NULL))<0) { printf("Error %d reading bitmap file %s.\n",status,argv[1]); return(10); } printf("Bitmap %s is %d x %d x %d\n",argv[1],src->width,src->height,src->bpp); /* Initialize settings */ k2settings=&_k2settings; k2pdfopt_settings_init(k2settings); k2settings->use_crop_boxes=0; k2settings->src_rot=0; k2settings->erase_vertical_lines=0; k2settings->src_autostraighten=0; k2pdfopt_settings_sanity_check(k2settings); /* Init master output structure */ masterinfo=&_masterinfo; masterinfo_init(masterinfo,k2settings); /* Init for new source doc */ k2pdfopt_settings_new_source_document_init(k2settings); /* Init new source bitmap */ masterinfo_new_source_page_init(masterinfo,k2settings,src,srcgrey,NULL,®ion,0.,NULL,NULL,1,NULL); /* Process single source page */ bmpregion_source_page_add(®ion,k2settings,masterinfo,1, (int)(0.25 * k2settings->src_dpi + .5)); bmp_free(srcgrey); bmp_free(src); /* ** Get output pages */ { WILLUSBITMAP *bmp,_bmp; int pn,rows,size_reduction; double bmpdpi; bmp=&_bmp; bmp_init(bmp); pn=0; while ((rows=masterinfo_get_next_output_page(masterinfo,k2settings,1,bmp, &bmpdpi,&size_reduction,NULL))>0) { char filename[256]; pn++; sprintf(filename,"outpage%02d.bmp",pn); bmp_write(bmp,filename,stdout,0); } bmp_free(bmp); } masterinfo_free(masterinfo,k2settings); return(0); }
static void k2pdfopt_settings_init_from_koptcontext(K2PDFOPT_SETTINGS *k2settings, KOPTContext *kctx) { /* Generic settings init */ k2pdfopt_settings_init(k2settings); k2settings->src_rot=0; k2settings->user_src_dpi=300; k2settings->dst_dpi=167; k2settings->dst_userwidth=600; k2settings->dst_userheight=800; k2settings->dst_width = k2settings->dst_userwidth; k2settings->dst_height = k2settings->dst_userheight; k2settings->dst_color=0; k2settings->dst_mar=0.06; k2settings->dst_martop=-1.0; k2settings->dst_marbot=-1.0; k2settings->dst_marleft=-1.0; k2settings->dst_marright=-1.0; k2settings->use_crop_boxes=0; k2settings->defect_size_pts=1.0; /* Apply context */ k2settings->dst_userwidth = kctx->dev_width; k2settings->dst_userheight = kctx->dev_height; k2settings->vertical_line_spacing = kctx->line_spacing; k2settings->word_spacing = kctx->word_spacing; k2settings->text_wrap = kctx->wrap; k2settings->src_autostraighten = kctx->straighten; k2settings->preserve_indentation = kctx->indent; k2settings->max_columns = kctx->columns; k2settings->src_rot = kctx->rotate; k2settings->src_dpi = (int)300*kctx->quality; k2settings->defect_size_pts = kctx->defect_size; k2settings->dst_gamma = kctx->contrast; if (kctx->trim == 0) { k2settings->mar_left = 0; k2settings->mar_top = 0; k2settings->mar_right = 0; k2settings->mar_bot = 0; } else { k2settings->mar_left = -1; k2settings->mar_top = -1; k2settings->mar_right = -1; k2settings->mar_bot = -1; } // margin k2settings->dst_mar = kctx->margin; k2settings->dst_martop = -1.0; k2settings->dst_marbot = -1.0; k2settings->dst_marleft = -1.0; k2settings->dst_marright = -1.0; // justification if (kctx->justification < 0) { k2settings->dst_justify = -1; k2settings->dst_fulljustify = -1; } else if (kctx->justification <= 2) { k2settings->dst_justify = kctx->justification; k2settings->dst_fulljustify = 0; } else { k2settings->dst_justify = -1; k2settings->dst_fulljustify = 1; } }
int main(int argc,char *argv[]) { int i,filecount; static K2PDFOPT_SETTINGS _k2settings; K2PDFOPT_SETTINGS *k2settings; static STRBUF _cmdline,_env,_usermenu; STRBUF *cmdline,*env,*usermenu; k2settings=&_k2settings; cmdline=&_cmdline; env=&_env; usermenu=&_usermenu; strbuf_init(cmdline); strbuf_init(env); strbuf_init(usermenu); strbuf_cpy(env,getenv("K2PDFOPT")); for (i=1;i<argc;i++) strbuf_cat_with_quotes(cmdline,argv[i]); k2sys_init(); k2pdfopt_settings_init(k2settings); /* Only set ansi and user interface */ filecount=parse_cmd_args(k2settings,env,cmdline,usermenu,2,0); if (k2settings->show_usage) { k2sys_header(); if (k2settings->query_user==0 #if (defined(WIN32) || defined(WIN64)) || !win_has_own_window() #endif ) k2usage_show_all(stdout); else { if (!k2pdfopt_usage()) { k2sys_close(k2settings); strbuf_free(usermenu); strbuf_free(env); strbuf_free(cmdline); return(0); } } if (k2settings->query_user!=0) k2sys_enter_to_exit(k2settings); k2sys_close(k2settings); strbuf_free(usermenu); strbuf_free(env); strbuf_free(cmdline); return(0); } if (k2settings->query_user<0) #if (defined(WIN32) || defined(WIN64)) { if (win_has_own_window()) k2settings->query_user=1; else k2settings->query_user=(filecount==0); } #else k2settings->query_user=1; #endif #if (!defined(WIN32) && !defined(WIN64)) if (k2settings->query_user) { int tty_rows; tty_rows = get_ttyrows(); for (i=0;i<tty_rows-16;i++) aprintf("\n"); } #endif k2sys_header(); /* ** Set all options from command-line arguments */ parse_cmd_args(k2settings,env,cmdline,usermenu,1,0); /* ** Get user input */ if (k2pdfopt_menu(k2settings,filecount,env,cmdline,usermenu)==-1) { strbuf_free(usermenu); strbuf_free(env); strbuf_free(cmdline); k2sys_close(k2settings); return(0); } /* ** Re-init and then re-parse after all user menu entries applied. */ k2pdfopt_settings_init(k2settings); parse_cmd_args(k2settings,env,cmdline,usermenu,1,0); /* ** Sanity check / adjust user inputs */ k2pdfopt_settings_sanity_check(k2settings); /* ** Process files */ parse_cmd_args(k2settings,env,cmdline,usermenu,0,1); /* ** All done. */ strbuf_free(usermenu); strbuf_free(env); strbuf_free(cmdline); k2sys_enter_to_exit(k2settings); k2sys_close(k2settings); return(0); }
void k2pdfopt_settings_init_from_koptcontext(K2PDFOPT_SETTINGS *k2settings, KOPTContext *kctx) { /* Generic settings init */ k2pdfopt_settings_init(k2settings); k2settings->verbose = 0; k2settings->debug = 0; k2settings->src_rot = 0; k2settings->dst_dpi = 167; k2settings->dst_userwidth = 600; k2settings->dst_userheight = 800; k2settings->dst_width = k2settings->dst_userwidth; k2settings->dst_height = k2settings->dst_userheight; k2settings->dst_color = 0; k2settings->use_crop_boxes = 0; k2settings->defect_size_pts = 1.0; /* Apply context */ k2settings->dst_dpi = kctx->dev_dpi; k2settings->render_dpi = kctx->dev_dpi; k2settings->dst_userwidth = kctx->dev_width; k2settings->dst_userheight = kctx->dev_height; k2settings->dst_width = k2settings->dst_userwidth; k2settings->dst_height = k2settings->dst_userheight; k2settings->vertical_line_spacing = kctx->line_spacing; k2settings->text_wrap = kctx->wrap; k2settings->src_whitethresh = kctx->white; k2settings->src_autostraighten = kctx->straighten; k2settings->preserve_indentation = kctx->indent; k2settings->max_columns = kctx->columns; k2settings->src_dpi = kctx->dev_dpi*kctx->quality; k2settings->user_src_dpi = kctx->dev_dpi*kctx->quality; k2settings->defect_size_pts = kctx->defect_size; k2settings->dst_gamma = kctx->contrast; if (kctx->writing_direction == 0) k2settings->src_left_to_right = 1; else if (kctx->writing_direction == 1) k2settings->src_left_to_right = 0; else if (kctx->writing_direction == 2) { k2settings->src_left_to_right = 1; k2settings->src_rot = 90; } else if (kctx->writing_direction == 3) { k2settings->src_left_to_right = 0; k2settings->src_rot = 270; } k2settings->word_spacing = kctx->word_spacing; if (kctx->trim == 0) { k2settings->srccropmargins.box[0] = 0; k2settings->srccropmargins.box[1] = 0; k2settings->srccropmargins.box[2] = 0; k2settings->srccropmargins.box[3] = 0; } else { k2settings->srccropmargins.box[0] = -1; k2settings->srccropmargins.box[1] = -1; k2settings->srccropmargins.box[2] = -1; k2settings->srccropmargins.box[3] = -1; } // margin k2settings->dstmargins.box[0] = kctx->margin; k2settings->dstmargins.box[1] = kctx->margin; k2settings->dstmargins.box[2] = kctx->margin; k2settings->dstmargins.box[3] = kctx->margin; // justification if (kctx->justification < 0) { k2settings->dst_justify = -1; k2settings->dst_fulljustify = -1; } else if (kctx->justification <= 2) { k2settings->dst_justify = kctx->justification; k2settings->dst_fulljustify = 0; } else { k2settings->dst_justify = -1; k2settings->dst_fulljustify = 1; } // eliminate hyphens for non-CJK characters if (kctx->cjkchar) k2settings->hyphen_detect = 0; else k2settings->hyphen_detect = 1; }