Beispiel #1
0
int bmp_get_one_document_page(WILLUSBITMAP *src,K2PDFOPT_SETTINGS *k2settings,
                              int src_type,char *filename,
                              int pageno,double dpi,int bpp,FILE *out)

    {
    if (src_type==SRC_TYPE_PDF)
        {
        int status;
#ifdef HAVE_MUPDF_LIB
        static char *mupdferr_trygs=TTEXT_WARN "\a\n ** ERROR reading from " TTEXT_BOLD2 "%s" TTEXT_WARN "using MuPDF.  Trying Ghostscript...\n\n" TTEXT_NORMAL;

        status=0;
        if (k2settings->usegs<=0)
            {
#if (WILLUSDEBUGX & 0x80000000)
printf("\a\a\n\n\n\n\n\n\n\n\n   ****** FAKING MUPDF--IGNORING SOURCE DOCUMENT!!  *****\n\n\n\n\n\n\n");
status=bmp_read(src,"out.png",NULL);
if (status==0 && bpp!=24)
bmp_convert_to_grayscale(src);
return(status);
#else
            status=bmpmupdf_pdffile_to_bmp(src,filename,pageno,dpi*k2settings->document_scale_factor,bpp);
            if (!status || k2settings->usegs<0)
                return(status);
#endif
            }
        /* Switch to Postscript since MuPDF failed */
        if (k2settings->usegs==0)
            {
            k2printf(mupdferr_trygs,filename);
            k2settings->usegs=1;
            }
#endif
#ifdef HAVE_GHOSTSCRIPT_LIB
        if (willusgs_init(stdout) < 0)
            {
            k2sys_enter_to_exit(k2settings);
            exit(20);
            }
#endif
        bmp_set_pdf_pageno(pageno);
        bmp_set_pdf_dpi(dpi);
        /*
        k2printf("Converting " TTEXT_BOLD2 "%s" TTEXT_NORMAL 
            " page %2d to %d dpi bitmap ... ",filename,i,dpi);
        fflush(stdout);
        */
        status=bmp_read(src,filename,NULL);
        if (!status && bpp==8)
            bmp_convert_to_greyscale(src);
        return(status);
        }
    else
#ifdef HAVE_DJVU_LIB
    if (src_type==SRC_TYPE_DJVU)
        return(bmpdjvu_djvufile_to_bmp(src,filename,pageno,dpi*k2settings->document_scale_factor,bpp,out));
    else
#endif
    return(-1);
    }
static void gs_postprocess(char *filename)

    {
    char tempname[MAXFILENAMELEN];
    int status;
    double size;

    if ((status=willusgs_init(stdout))<0)
        {
        static int warn=0;
        if (warn==0)
            {
            k2printf("\a");
            warn=1;
            }
        k2printf("\n" TTEXT_WARN "** Error %d initializing Ghostscript.  Post-process step aborted. **"
                 TTEXT_NORMAL "\n\n",status);
        return;
        }
    wfile_abstmpnam(tempname);
    k2printf("Post processing " TTEXT_MAGENTA "%s" TTEXT_NORMAL " with Ghostscript...\n",
              filename);
    status=willusgs_ps_to_pdf(tempname,filename,-1,-1,NULL);
    if (status<0)
        {
        static int warn=0;
        if (warn==0)
            {
            k2printf("\a");
            warn=1;
            }
        k2printf("\n" TTEXT_WARN "** Error %d running Ghostscript.  Post-process step aborted. **"
                 TTEXT_NORMAL "\n\n",status);
        remove(tempname);
        return;
        }
    status=wfile_copy_file(filename,tempname,0);
    if (status==0)
        {
        static int warn=0;
        if (warn==0)
            {
            k2printf("\a");
            warn=1;
            }
        k2printf("\n" TTEXT_WARN "** Error copying temp file %s to %s.  Post-process error. **"
                 TTEXT_NORMAL "\n\n",tempname,filename);
        return;
        }
    remove(tempname);
    size=wfile_size(filename);
    k2printf(TTEXT_BOLD "    ... %d bytes" TTEXT_NORMAL " written to " TTEXT_MAGENTA "%s" TTEXT_NORMAL " (%.1f MB).\n",(int)size,filename,size/1024./1024.);
    }