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);
    }
Example #2
0
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,&region,0.,NULL,NULL,1,NULL);

    /* Process single source page */
    bmpregion_source_page_add(&region,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);
}
Example #3
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;
        }
    }
Example #4
0
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);
    }
Example #5
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;
}