コード例 #1
0
ファイル: pdfimage.c プロジェクト: AmirAbrams/haiku
int
main(int argc, char *argv[])
{
    char	*pdffilename = NULL;
    FILE	*imagefile;
    PDF		*p;
    int		image;
    int		opt;
    int		resolution = 0;
    int		page_numbering = 0;
    int		current_page = 1;
    char	optlist[128];

    while ((opt = getopt(argc, argv, "r:o:p:w")) != -1)
	switch (opt) {
	    case 'o':
		pdffilename = optarg;
		break;

	    case 'p':
		page_numbering = 1;
		if (optarg) {
		    current_page = atoi(optarg);
		}
		break;

	    case 'r':
		if (!optarg || (resolution = atoi(optarg)) <= 0) {
		    fprintf(stderr, "Error: non-positive resolution.\n");
		    usage();
		}

	    case '?':
	    default:
		usage();
	}

    if (optind == argc) {
	fprintf(stderr, "Error: no image files given.\n");
	usage();
    }

    if (pdffilename == NULL) {
	fprintf(stderr, "Error: no output file given.\n");
	usage();
    }

    p = PDF_new();

    if (PDF_open_file(p, pdffilename) == -1) {
	fprintf(stderr, "Error: cannot open output file %s.\n", pdffilename);
	exit(1);
    }

    PDF_set_info(p, "Creator", "pdfimage");

    while (optind++ < argc) {
	fprintf(stderr, "Processing image file '%s'...\n", argv[optind-1]);

	image = PDF_load_image(p, "auto", argv[optind-1], 0, "");

	if (image == -1) {
	    fprintf(stderr, "Error: %s (skipped).\n", PDF_get_errmsg(p));
	    continue;
	}

	/* dummy page size, will be adjusted later */
	PDF_begin_page(p, 20, 20);

	/* define outline with filename or page number */
	if (page_numbering) {
	    char buf[32];
	    sprintf(buf, "Page %d", current_page++);
	    PDF_add_bookmark(p, buf, 0, 0);
	} else {
	    PDF_add_bookmark(p, argv[optind-1], 0, 0);
	}

	if (resolution != 0)
	    sprintf(optlist, "dpi %d", resolution);
	else
	    sprintf(optlist, "adjustpage");

	PDF_fit_image(p, image, 0.0, 0.0, optlist);

	PDF_end_page(p);
    }

    PDF_close(p);
    PDF_delete(p);
    exit(0);
}
コード例 #2
0
ファイル: pdf.c プロジェクト: MaChao5/pdfviewer-win32
void pdf_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform)
{
    internal_t*i = (internal_t*)dev->internal;

    int t,size=img->width*img->height;
    int has_alpha=0;
    for(t=0;t<size;t++) {
	if(img->data[t].a!=255) {
	    has_alpha=1;
	    break;
	}
    }

    double w = sqrt(matrix->m00*matrix->m00+matrix->m01*matrix->m01);
    double h = sqrt(matrix->m10*matrix->m10+matrix->m11*matrix->m11);
    double l1 = w*img->width;
    double l2 = h*img->height;

    double dpi_x = 72.0 / w;
    double dpi_y = 72.0 / h;
    double dpi = dpi_x>dpi_y?dpi_x:dpi_y;
    gfximage_t*rescaled_image = 0;
    if(i->config_maxdpi && dpi > i->config_maxdpi) {
	int newwidth = img->width*i->config_maxdpi/dpi;
	int newheight = img->height*i->config_maxdpi/dpi;
	rescaled_image = gfximage_rescale(img, newwidth, newheight);
	msg("<notice> Downscaling %dx%d image (dpi %f, %.0fx%.0f on page) to %dx%d (dpi %d)", 
		img->width, img->height, dpi, l1, l2, newwidth, newheight, i->config_maxdpi);
	img = rescaled_image;
    }
    if(i->config_mindpi && dpi < i->config_mindpi && img->width>1 && img->height>1) {
	msg("<error> Found image of size %dx%d with dpi %f, minimum allowed dpi is %d", 
		img->width, img->height, dpi, i->config_mindpi);
	exit(1);
    }

    char tempfile[128];
    mktempname(tempfile, "jpg");

    gfximage_save_jpeg(img, tempfile, 96);

    int imgid=-1;
    if(has_alpha) {
	char tempfile2[128];
	mktempname(tempfile2, "jpg");
	int t;
	int size = img->width*img->height;
	unsigned char*alpha = malloc(size);
	for(t=0;t<size;t++) {
	    alpha[t] = img->data[t].a;
	}
	jpeg_save_gray(alpha, img->width, img->height, 97, tempfile2);
	free(alpha);
	int maskid = PDF_load_image(i->p, "jpeg", tempfile2, 0, "mask");
	unlink(tempfile2);
	char masked[80];
	if(maskid<0) {
	    msg("<error> Couldn't process mask jpeg of size %dx%d: error code %d", img->width, img->height, maskid);
	    return;
	}
	sprintf(masked, "masked %d", maskid);
	imgid = PDF_load_image(i->p, "jpeg", tempfile, 0, masked);
    } else {
	imgid = PDF_load_image(i->p, "jpeg", tempfile, 0, "");
    }

    if(imgid<0) {
	msg("<error> Couldn't process jpeg of size %dx%d: error code %d, file %s", img->width, img->height, imgid, tempfile);
	return;
    }
    unlink(tempfile);
    
    char options[80];
    set_matrix(i, matrix->m00, matrix->m01, matrix->m10, matrix->m11);
    /* an image's (0,0) is at the lower left corner */
    double x=matrix->tx + i->config_xpad + matrix->m10*img->height;
    double y=matrix->ty + i->config_ypad + matrix->m11*img->height;
    double tx,ty;
    transform_back(i, x, y, &tx, &ty);
    PDF_place_image(i->p, imgid, tx, ty, 1.0);
    PDF_close_image(i->p, imgid);

    if(rescaled_image)
	gfximage_free(rescaled_image);
}
コード例 #3
0
ファイル: image.c プロジェクト: AmirAbrams/haiku
int
main(void)
{
    PDF *p;
    int image;
    char *imagefile = "nesrin.jpg";

    /* This is where font/image/PDF input files live. Adjust as necessary. */
    char *searchpath = "../data";

    /* create a new PDFlib object */
    if ((p = PDF_new()) == (PDF *) 0)
    {
        printf("Couldn't create PDFlib object (out of memory)!\n");
        return(2);
    }

    PDF_TRY(p){
	/* open new PDF file */
	if (PDF_open_file(p, "image.pdf") == -1) {
	    printf("Error: %s\n", PDF_get_errmsg(p));
	    return(2);
	}

	PDF_set_parameter(p, "SearchPath", searchpath);

	/* This line is required to avoid problems on Japanese systems */
	PDF_set_parameter(p, "hypertextencoding", "host");

	PDF_set_info(p, "Creator", "image.c");
	PDF_set_info(p, "Author", "Thomas Merz");
	PDF_set_info(p, "Title", "image sample (C)");

	image = PDF_load_image(p, "auto", imagefile, 0, "");

	if (image == -1) {
	    printf("Error: %s\n", PDF_get_errmsg(p));
	    return(3);
	}

	/* dummy page size, will be adjusted by PDF_fit_image() */
	PDF_begin_page(p, 10, 10);
	PDF_fit_image(p, image, (float) 0.0, (float) 0.0, "adjustpage");
	PDF_close_image(p, image);
	PDF_end_page(p);			/* close page		*/

	PDF_close(p);				/* close PDF document	*/
    }

    PDF_CATCH(p) {
        printf("PDFlib exception occurred in image sample:\n");
        printf("[%d] %s: %s\n",
	    PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
        PDF_delete(p);
        return(2);
    }

    PDF_delete(p);				/* delete the PDFlib object */

    return 0;
}
コード例 #4
0
ファイル: document.c プロジェクト: Amaury/Carta-Genius
/*
** cg_load_image()
** Load one specified image.
*/
yerr_t cg_load_image(cg_t *carta, cg_image_t *image, ybool_t is_mask)
{
  char *type;
  ystr_t optlist = NULL;
  yerr_t res = YENOERR;

  if (!image)
    return (YENOERR);
  /* check image type */
  if (!strcasecmp(image->file + strlen(image->file) - strlen(".jpg"), ".jpg") ||
      !strcasecmp(image->file + strlen(image->file) - strlen(".jpeg"), ".jpeg"))
    type = "jpeg";
  else if (!strcasecmp(image->file + strlen(image->file) - strlen(".gif"), ".gif"))
    type = "gif";
  else if (!strcasecmp(image->file + strlen(image->file) - strlen(".png"), ".png"))
    type = "png";
  else
    {
      YLOG_ADD(YLOG_WARN, "Unknown image type (%s).", image->file);
      return (YEUNDEF);
    }
  if (is_mask)
    {
      if (strcmp(type, "png"))
	{
	  YLOG_ADD(YLOG_WARN, "Image masks must be PNG (%s).", image->file);
	  return (YEINVAL);
	}
      if ((image->i = PDF_load_image(carta->p, type, image->file, 0, "mask")) == -1)
	{
	  YLOG_ADD(YLOG_WARN, "Unable to open image mask '%s'.", image->file);
	  return (YEUNDEF);
	}
    }
  else
    {
      optlist = ys_new("");
      if (image->mask &&
	  (image->m = PDF_load_image(carta->p, "png",
				     image->mask, 0, "mask")) != -1)
	ys_printf(&optlist, "masked %d", image->m);
      else if (image->mask_id)
	{
	  int i;
	  cg_image_t *img_mask = NULL;
	  for (i = 0; i < yv_len(carta->masks); ++i)
	    {
	      img_mask = carta->masks[i];
	      if (!strcasecmp(image->mask_id, img_mask->id) &&
		  img_mask->i != -1)
		break ;
	      img_mask = NULL;
	    }
	  if (!img_mask)
	    YLOG_ADD(YLOG_WARN, "Unable to find image mask '%s'.", image->mask_id);
	  else
	    ys_printf(&optlist, "masked %d", img_mask->i);
	}
      else
	image->m = -1;
      if ((image->i = PDF_load_image(carta->p, type, image->file, 0, optlist)) == -1)
	{
	  YLOG_ADD(YLOG_WARN, "Unable to open image '%s'.", image->file);
	  res = YEUNDEF;
	}
      ys_del(&optlist);
    }
  return (res);
}
コード例 #5
0
ファイル: starter_pdfx.c プロジェクト: Distrotech/PDFlib-Lite
int
main(void)
{
    /* This is where the data files are. Adjust as necessary.*/
    const char * searchpath = "../data";

    PDF *p;
    const char * imagefile = "nesrin.jpg";
    char optlist[1024];

    int font, image, spot, icc;

    /* create a new PDFlib object */
    if ((p = PDF_new()) == (PDF *) 0) {
        printf("Couldn't create PDFlib object (out of memory)!\n");
        return(2);
    }

    PDF_TRY(p) {
        /* This means we must check return values of load_font() etc. */
        PDF_set_parameter(p, "errorpolicy", "return");

        PDF_set_parameter(p, "SearchPath", searchpath);

        if (PDF_begin_document(p, "starter_pdfx.pdf", 0, "pdfx=PDF/X-3:2002")
                == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        PDF_set_info(p, "Creator", "PDFlib starter sample");
        PDF_set_info(p, "Title", "starter_pdfx");

        /*
         * You can use one of the Standard output intents (e.g. for SWOP
         * printing) which do not require an ICC profile:

        PDF_load_iccprofile(p, "CGATS TR 001", 0, "usage=outputintent");

         * However, if you use ICC or Lab color you must load an ICC
         * profile as output intent:
         */

        if (PDF_load_iccprofile(p, "ISOcoated.icc", 0,
                "usage=outputintent") == -1)
        {
            printf("Error: %s\n", PDF_get_errmsg(p));
            printf("Please install the ICC profile package from "
                   "www.pdflib.com to run the PDF/X starter sample.\n");
            PDF_delete(p);
            return(2);
        }

        PDF_begin_page_ext(p, 595, 842, "");

        /* Font embedding is required for PDF/X */
        font = PDF_load_font(p, "LuciduxSans-Oblique", 0,
                "winansi", "embedding");

        if (font == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        PDF_setfont(p, font, 24);

        spot = PDF_makespotcolor(p, "PANTONE 123 C", 0);
        PDF_setcolor(p, "fill", "spot", spot, 1.0, 0.0, 0.0);
        PDF_fit_textline(p, "PDF/X-3:2002 starter", 0, 50, 700, "");

        /* The RGB image below needs an ICC profile; we use sRGB. */
        icc = PDF_load_iccprofile(p, "sRGB", 0, "");
        sprintf(optlist, "iccprofile=%d", icc);
        image = PDF_load_image(p, "auto", imagefile, 0, optlist);

        if (image == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        PDF_fit_image(p, image, (float) 0.0, (float) 0.0, "scale=0.5");

        PDF_end_page_ext(p, "");

        PDF_end_document(p, "");
    }

    PDF_CATCH(p) {
        printf("PDFlib exception occurred:\n");
        printf("[%d] %s: %s\n",
            PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
        PDF_delete(p);
        return(2);
    }

    PDF_delete(p);

    return 0;
}
コード例 #6
0
int
main(void)
{

    /* This is where the data files are. Adjust as necessary. */
    const char* searchpath = "../data";
    const char* outfile = "starter_layer.pdf";

    PDF * p;
    const char* rgb = "nesrin.jpg";
    const char* gray = "nesrin_gray.jpg";

#define BUFLEN 1024
    char buf[BUFLEN];
    int font, imageRGB, imageGray, layerRGB, layerGray, layerEN, layerDE;

    /* create a new PDFlib object */
    if ((p = PDF_new()) == (PDF *) 0) {
        printf("Couldn't create PDFlib object (out of memory)!\n");
        return(2);
    }

    PDF_TRY(p) {
        PDF_set_parameter(p, "SearchPath", searchpath);

        /* This means we must check return values of load_font() etc. */
        PDF_set_parameter(p, "errorpolicy", "return");


        /* Open the document with the "Layers" navigation tab visible */
        if (PDF_begin_document(p, outfile, 0, "openmode=layers") == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        PDF_set_info(p, "Creator", "PDFlib starter sample");
        PDF_set_info(p, "Title", "starter_layer");

        /* Load the font */
        font = PDF_load_font(p, "Helvetica", 0, "winansi", "");

        if (font == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        /* Load the Grayscale image */
        imageGray = PDF_load_image(p, "auto", gray, 0, "");
        if (imageGray == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        /* Load the RGB image */
        imageRGB = PDF_load_image(p, "auto", rgb, 0, "");
        if (imageRGB == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        /*
         * Define all layers which will be used, and their relationships.
         * This should be done before the first page if the layers are
         * used on more than one page.
         */

        /* Define the layer "RGB" */
        layerRGB = PDF_define_layer(p, "RGB", 0, "");

        /* Define the layer "Grayscale" which is hidden when opening the
         * document or printing it. */
        layerGray = PDF_define_layer(p, "Grayscale", 0,
                    "initialviewstate=false initialprintstate=false");

        /* At most one of the "Grayscale" and "RGB" layers should be visible */
        sprintf(buf, "group={%d %d}", layerGray, layerRGB);
        PDF_set_layer_dependency(p, "Radiobtn", buf);

        /* Define the layer "English" */
        layerEN = PDF_define_layer(p, "English", 0, "");

        /* Define the layer "German" which is hidden when opening the document
         * or printing it. */
        layerDE = PDF_define_layer(p, "German", 0,
                    "initialviewstate=false initialprintstate=false");

        /* At most one of the "English" and "German" layers should be visible */
        sprintf(buf, "group={%d %d}", layerEN, layerDE);
        PDF_set_layer_dependency(p, "Radiobtn", buf);

        /* Start page */
        PDF_begin_page_ext(p, 0, 0, "width=a4.width height=a4.height");

	/* Place the RGB image on the layer "RGB" */
        PDF_begin_layer(p, layerRGB);
        PDF_fit_image(p, imageRGB, 100, 400,
                    "boxsize={400 300} fitmethod=meet");

	/* Place the Grayscale image on the layer "Grayscale" */
        PDF_begin_layer(p, layerGray);
        PDF_fit_image(p, imageGray, 100, 400,
                    "boxsize={400 300} fitmethod=meet");

	/* Place an English image caption on the layer "English" */
        PDF_begin_layer(p, layerEN);
        sprintf(buf, "font=%d fontsize=20", font);
        PDF_fit_textline(p, "This is the Nesrin image.", 0, 100, 370, buf);

	/* Place a German image caption on the layer "German".  */
        PDF_begin_layer(p, layerDE);
        sprintf(buf, "font=%d fontsize=20", font);
        PDF_fit_textline(p, "Das ist das Nesrin-Bild.", 0, 100, 370, buf);

        PDF_end_layer(p);

        PDF_end_page_ext(p, "");

        PDF_end_document(p, "");

    }

    PDF_CATCH(p) {
        printf("PDFlib exception occurred:\n");
        printf("[%d] %s: %s\n",
            PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
        PDF_delete(p);
        return(2);
    }

    PDF_delete(p);
    return 0;
}
コード例 #7
0
BOOL CTWainHelper::SaveAsPdf(const char* pFileName, std::vector< HANDLE > m_pic_handles)
{
	PDF *p;
    int image;
    const char *imagefile = "/pvf/pic.jpg";
	
    /* This is where font/image/PDF input files live. Adjust as necessary. */
    const char *searchpath = "./";
	
    /* create a new PDFlib object */
    if ((p = PDF_new()) == (PDF *) 0)
    {
        printf("Couldn't create PDFlib object (out of memory)!\n");
        return FALSE;
    }
	
    PDF_TRY(p){
		/* This means we must check return values of load_font() etc. */
		PDF_set_parameter(p, "errorpolicy", "return");
		
		/* This line is required to avoid problems on Japanese systems */
		PDF_set_parameter(p, "hypertextencoding", "host");

		if (PDF_begin_document(p, pFileName, 0, "") == -1) {
			printf("Error: %s\n", PDF_get_errmsg(p));
			return FALSE;
		}
		
		PDF_set_parameter(p, "SearchPath", searchpath);
		
		PDF_set_info(p, "Creator", "TWainApp");
		PDF_set_info(p, "Author", "Snail");
		PDF_set_info(p, "Title", "image sample (C)");

		std::vector< HANDLE >::iterator it;
		for(it = m_pic_handles.begin(); it != m_pic_handles.end(); it++)
		{
			//将Handle转换为CxImage对象
			HANDLE imageHandle = (HANDLE)(*it);
			CxImage cxImage;
			cxImage.CreateFromHANDLE(imageHandle);
			//cxImage.Save("C:\\bmp.bmp", CXIMAGE_FORMAT_BMP);
			cxImage.Save(".\\temp\\temp.jpg", CXIMAGE_FORMAT_JPG);

			char* imagedata = NULL;
			DWORD size = 0;

			CFile file(".\\temp\\temp.jpg", CFile::modeRead);
			size = file.GetLength();
			imagedata = new char[size];
			memset(imagedata, 0, size);
			file.Read(imagedata, size);
			file.Close();

			PDF_create_pvf(p, imagefile, 0, (const char*)imagedata, size, "");

			image = PDF_load_image(p, "auto", imagefile, 0, "");

			if (image == -1) {
				char logInfo[LOGSIZE];
				sprintf(logInfo, "Error: 加载PVF图像数据失败!错误号:%d, %s:%d\r\n", PDF_get_errmsg(p), __FILE__, __LINE__);
				CTWainHelper::LogMessage(logInfo);

				if(imagedata)
					delete imagedata;
				
				continue;
			}

			/* dummy page size, will be adjusted by PDF_fit_image() */
			PDF_begin_page_ext(p, 10, 10, "");
			PDF_fit_image(p, image, 0.0, 0.0, "adjustpage dpi {300 300}");
			PDF_end_page_ext(p, "");

			/* Delete the virtual file to free the allocated memory */
			PDF_delete_pvf(p, imagefile, 0);

			if(imagedata)
				delete imagedata;
		}

		PDF_end_document(p, "");    

		::DeleteFile(".\\temp\\temp.jpg");
	}	
    PDF_CATCH(p) {

		char logInfo[LOGSIZE];
		sprintf(logInfo, "EXCEPTION: PDFlib接口调用过程发生异常!错误信息:[%d] %s: %s, %s:%d\r\n", 
			PDF_get_errmsg(p), PDF_get_apiname(p), PDF_get_errmsg(p), __FILE__, __LINE__);
		CTWainHelper::LogMessage(logInfo);

        PDF_delete(p);
        return FALSE;
    }
	
    PDF_delete(p);
	return TRUE;
}
コード例 #8
0
ファイル: pdfimage.c プロジェクト: Distrotech/PDFlib-Lite
int
main(int argc, char *argv[])
{
    char	*pdffilename = NULL;
    char	*imagetype = "auto";
    char	*useroptions = "";
    PDF		*p;
    int		image;
#ifndef PDFLIB_LITE
    int		tagged, opt;
    int		item=0;
    char 	*pdfalevel = NULL, *intent = "sRGB";
#endif /* PDFLIB_LITE */
    int		resolution = 0;
    int		page_numbering = 0;
    double	graylevel = -1.0;
    int		frame;
    int		current_page = 1;
#define BUFLEN	1024
    char	optlist[BUFLEN];
    char	buf[BUFLEN];

#ifndef PDFLIB_LITE
    while ((opt = getopt(argc, argv, "a:g:I:i:o:p:r:t:")) != -1)
#else
    while ((opt = getopt(argc, argv, "g:i:o:p:r:t:")) != -1)
#endif /* PDFLIB_LITE */
	switch (opt) {
#ifndef PDFLIB_LITE
	    case 'a':
		if (strcmp(optarg, "none"))
		    pdfalevel = optarg;
		break;
#endif /* PDFLIB_LITE */

	    case 'g':
		if (optarg) {
		    graylevel = atof(optarg);
		    if (graylevel < 0.0 || graylevel > 1.0)
		    {
			fprintf(stderr, "Error: Bad gray level %.2g for -g.\n",
				graylevel);
			usage();
		    }
		}
		break;

#ifndef PDFLIB_LITE
	    case 'I':
		if (!strcmp(optarg, "none"))
		    intent = NULL;
		else
		    intent = optarg;
		break;
#endif /* PDFLIB_LITE */

	    case 'i':
		useroptions = optarg;
		if (strlen(useroptions) > BUFLEN-20)
		{
		    fprintf(stderr, "Error: image option list too long.\n");
		    usage();
		}
		break;

	    case 'o':
		pdffilename = optarg;
		break;

	    case 'p':
		page_numbering = 1;
		if (optarg) {
		    current_page = atoi(optarg);
		}
		break;

	    case 'r':
		if (!optarg || (resolution = atoi(optarg)) <= 0) {
		    fprintf(stderr, "Error: non-positive resolution.\n");
		    usage();
		}
		break;

	    case 't':
		imagetype = optarg;
		break;

	    case '?':
	    default:
		usage();
	}

    if (optind == argc) {
	fprintf(stderr, "Error: no image files given.\n");
	usage();
    }

    if (pdffilename == NULL) {
	fprintf(stderr, "Error: no output file given.\n");
	usage();
    }

    if ((p = PDF_new()) == (PDF *) 0)
    {
        fprintf(stderr, "Couldn't create PDFlib object (out of memory)!\n");
	exit(99);
    }

    PDF_TRY(p)
    {
	optlist[0] = 0;

#ifndef PDFLIB_LITE
	tagged = pdfalevel && !strcmp(pdfalevel, "PDF/A-1a:2005");

	if (pdfalevel)
	{
            /* disabled (see bug #1577)
	    if (tagged)
		sprintf(optlist, "pdfa=%s lang=en", pdfalevel);
	    else
            */
		sprintf(optlist, "pdfa=%s", pdfalevel);
	}
#endif /* PDFLIB_LITE */

	if (PDF_begin_document(p, pdffilename, 0, optlist) == -1) {
	    fprintf(stderr, "Error: cannot open output file %s.\n",
		pdffilename);
	    exit(1);
	}

#ifndef PDFLIB_LITE
	if (pdfalevel && intent)
	{
	    if (strcmp("sRGB", intent))
	    {
		sprintf(optlist, "Intent=%s", intent);
		PDF_set_parameter(p, "ICCProfile", optlist);
	    }
	    fprintf(stderr, "Using '%s' as PDF/A output intent.\n", intent);
	    PDF_load_iccprofile(p, intent, 0, "usage=outputintent");
	}

	if (tagged)
	    item = PDF_begin_item(p, "Document",
	    	"Alt={Images converted with pdfimage by PDFlib GmbH}");
#endif /* PDFLIB_LITE */

	PDF_set_info(p, "Creator", "pdfimage");
	PDF_set_parameter(p, "warning", "false");

	while (optind++ < argc)
	{
#ifndef PDFLIB_LITE
	    int item2=0;
#endif /* PDFLIB_LITE */
	    int parent=0;

	    fprintf(stderr, "Processing image file '%s'...", argv[optind-1]);

	    /* process all frames in a multi-page image file */
	    for (frame=1; /* */; frame++)
	    {
		sprintf(optlist, "%s page %d", useroptions, frame);
		image = PDF_load_image(p, imagetype, argv[optind-1],0, optlist);

		if (image == -1) {
		    if (frame == 1)
			fprintf(stderr, "\n%s (skipped).\n", PDF_get_errmsg(p));
		    break;
		}

		/* dummy page size, will be adjusted later */
		PDF_begin_page_ext(p, 20, 20, "");

		if (graylevel >= 0.0)
		{
		    if (pdfalevel)
		    {
			PDF_setcolor(p, "fill",
				"lab", graylevel, 0.0, 0.0, 0.0);
		    }
		    else
		    {
			PDF_setcolor(p, "fill",
				"gray", graylevel, 0.0, 0.0, 0.0);
		    }
		    PDF_rect(p, 0, 0, 10000, 10000);
		    PDF_fill(p);
		}

		/* define outline with filename or page number */
		if (page_numbering)
		{
		    sprintf(buf, "Page %d", current_page++);
		    PDF_create_bookmark(p, buf, 0, "");
		}
		else {
		    if (frame == 1)
		    {
			parent = PDF_create_bookmark(p, argv[optind-1], 0,
						"open");
		    }
		    else
		    {
			sprintf(buf, "page %d", frame);
			sprintf(optlist, "parent=%d", parent);
			PDF_create_bookmark(p, buf, 0, optlist);
		    }
		}

#ifndef PDFLIB_LITE
		if (tagged)
		{
		    /* The file name is the best /Alt value we can provide */
		    sprintf(optlist, "Alt={%s}", argv[optind-1]);
		    item2 = PDF_begin_item(p, "Figure", optlist);
		}
#endif /* PDFLIB_LITE */

		if (resolution != 0)
		    sprintf(optlist, "dpi %d adjustpage", resolution);
		else
		    sprintf(optlist, "adjustpage");

		PDF_fit_image(p, image, 0.0, 0.0, optlist);

#ifndef PDFLIB_LITE
		if (tagged)
		    PDF_end_item(p, item2);
#endif /* PDFLIB_LITE */

		PDF_end_page_ext(p, "");
	    }

	    if (frame > 2)
		fprintf(stderr, "(%d frames)", frame-1);

	    fprintf(stderr, "\n");
	}

#ifndef PDFLIB_LITE
	if (tagged)
	    PDF_end_item(p, item);
#endif /* PDFLIB_LITE */

	PDF_end_document(p, "");
    }

    PDF_CATCH(p)
    {
        printf("\npdfimage: error while creating PDF output (%s(): %s)\n",
		PDF_get_apiname(p), PDF_get_errmsg(p));
        PDF_delete(p);
        exit(99);
    }

    PDF_delete(p);

    exit(0);
}
コード例 #9
0
int
main(void)
{
    /* This is where the data files are. Adjust as necessary. */
    const char *searchpath = "../data";
    const char *outfile = "starter_block.pdf";
    const char *infile = "block_template.pdf";
    const char *imagefile = "new.jpg";

    PDF *p;
    int i, j, inpage, indoc, image;
    char optlist[1024], buf[1024];

    /* Names of the person-related blocks contained on the imported page */
    const char *addressblocks[] = {
        "name", "street", "city"
    };

    /* number of address blocks */
    const int nblocks = sizeof(addressblocks) / sizeof(addressblocks[0]);

    /* Data related to various persons used for personalization */
    const char *persons[][3] = {
        {"Mr Maurizio Moroni", "Strada Provinciale 124", "Reggio Emilia"},
        {"Ms Dominique Perrier", "25, rue Lauriston", "Paris"},
        {"Mr Liu Wong", "55 Grizzly Peak Rd.", "Butte"}
    };

    /* number of persons */
    const int npersons = sizeof(persons) / sizeof(persons[0]);

    /* Static text simulates database-driven variable contents */
    const char *intro = "Dear";
    const char *goodbye = "Yours sincerely,\nVictor Kraxi";
    const char *announcement =
        "Our <fillcolor=red>BEST PRICE OFFER<fillcolor=black> includes today:"
        "\n\n"
        "Long Distance Glider\nWith this paper rocket you can send all your "
        "messages even when sitting in a hall or in the cinema pretty near "
        "the back.\n\n"
        "Giant Wing\nAn unbelievable sailplane! It is amazingly robust and "
        "can even do aerobatics. But it is best suited to gliding.\n\n"
        "Cone Head Rocket\nThis paper arrow can be thrown with big swing. "
        "We launched it from the roof of a hotel. It stayed in the air a "
        "long time and covered a considerable distance.\n\n"
        "Super Dart\nThe super dart can fly giant loops with a radius of 4 "
        "or 5 meters and cover very long distances. Its heavy cone point is "
        "slightly bowed upwards to get the lift required for loops.\n\n"
        "Visit us on our Web site at www.kraxi.com!";

    /* create a new PDFlib object */
    if ((p = PDF_new()) == (PDF *) 0) {
        printf("Couldn't create PDFlib object (out of memory)!\n");
        return(2);
    }

    PDF_TRY(p) {
        PDF_set_parameter(p, "SearchPath", searchpath);

        /* This means we must check return values of load_font() etc. */
        PDF_set_parameter(p, "errorpolicy", "return");

        if (PDF_begin_document(p, outfile, 0,
                "destination={type=fitwindow} pagelayout=singlepage") == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        PDF_set_info(p, "Creator", "PDFlib starter sample");
        PDF_set_info(p, "Title", "starter_block");

        /* Open the Block template which contains PDFlib Blocks */
        indoc = PDF_open_pdi_document(p, infile, 0, "");
        if (indoc == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        /* Open the first page and clone the page size */
        inpage = PDF_open_pdi_page(p, indoc, 1, "cloneboxes");
        if (inpage == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        image = PDF_load_image(p, "auto", imagefile, 0, "");

        if (image == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            return(3);
        }

        /* Based on the imported page generate several pages with the blocks
         * being filled with data related to different persons
         */
        for (i = 0; i < npersons; i++)
        {
            /* Start the output page with a dummy size */
            PDF_begin_page_ext(p, 10, 10, "");

            /* Place the imported page on the output page, and clone all
             * page boxes which are present in the input page; this will
             * override the dummy size used in begin_page_ext().
             */
            PDF_fit_pdi_page(p, inpage, 0, 0, "cloneboxes");

            /* Option list for text blocks */
            strcpy(optlist, "encoding=winansi embedding");

            /* Loop over all person-related blocks. Fill the j-th block with the
             * corresponding entry of the persons array.
             */
            for (j = 0; j < nblocks; j++) {
                if (PDF_fill_textblock(p, inpage, addressblocks[j],
                        persons[i][j], 0, optlist) == -1)
                    printf("Warning: %s\n", PDF_get_errmsg(p));
            }

            /* Fill the "intro" block */
            sprintf(buf, "%s %s,", intro, persons[i][0]);
            if (PDF_fill_textblock(p, inpage, "intro", buf, 0, optlist) == -1)
                printf("Warning: %s\n", PDF_get_errmsg(p));

            /* Fill the "announcement" block */
            if (PDF_fill_textblock(p, inpage, "announcement", announcement, 0,
                    optlist) == -1)
                printf("Warning: %s\n", PDF_get_errmsg(p));

            /* Fill the "goodbye" block */
            if (PDF_fill_textblock(p, inpage, "goodbye", goodbye, 0,
                    optlist) == -1)
                printf("Warning: %s\n", PDF_get_errmsg(p));

            /* Fill the image block */
            strcpy(optlist, "");       /* Option list */
            if (PDF_fill_imageblock(p, inpage, "icon", image, optlist) == -1)
                printf("Warning: %s\n", PDF_get_errmsg(p));

            PDF_end_page_ext(p, "");
        }

        PDF_close_pdi_page(p, inpage);
        PDF_close_pdi_document(p, indoc);
        PDF_close_image(p, image);

        PDF_end_document(p, "");
    }

    PDF_CATCH(p) {
        printf("PDFlib exception occurred:\n");
        printf("[%d] %s: %s\n",
            PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
        PDF_delete(p);
        return(2);
    }

    PDF_delete(p);

    return 0;
}
コード例 #10
0
int
main(void)
{

    /* This is where the data files are. Adjust as necessary. */
    const char* searchpath = "../data";

    PDF * p;
    const char* imagefile = "nesrin.jpg";
    char* optlist;
    int font, image;

    /* create a new PDFlib object */
    if ((p = PDF_new()) == (PDF *) 0) {
        printf("Couldn't create PDFlib object (out of memory)!\n");
        return(2);
    }

    PDF_TRY(p) {
        /* This means we must check return values of load_font() etc. */
        PDF_set_parameter(p, "errorpolicy", "return");

        PDF_set_parameter(p, "SearchPath", searchpath);

        if (PDF_begin_document(p, "starter_basic.pdf", 0, "") == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        PDF_set_info(p, "Creator", "PDFlib starter sample");
        PDF_set_info(p, "Title", "starter_basic");

        /* We load the image before the first page, and use it
         * on all pages
         */
        image = PDF_load_image(p, "auto", imagefile, 0, "");

        if (image == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        /* Page 1 */
        PDF_begin_page_ext(p, 595, 842, "");

        font = PDF_load_font(p, "Helvetica-Bold", 0, "winansi", "");

        if (font == -1) {
            printf("Error: %s\n", PDF_get_errmsg(p));
            PDF_delete(p);
            return(2);
        }

        PDF_setfont(p, font, 24);

        PDF_set_text_pos(p, 50, 700);
        PDF_show(p, "Hello world!");

        PDF_fit_image(p, image, (float) 0.0, (float) 0.0, "scale=0.25");

        PDF_end_page_ext(p, "");

        /* Page 2 */
        PDF_begin_page_ext(p, 595, 842, "");

        /* red rectangle */
        PDF_setcolor(p, "fill", "rgb", 1.0, 0.0, 0.0, 0.0);
        PDF_rect(p, 200, 200, 250, 150);
        PDF_fill(p);

        /* blue circle */
        PDF_setcolor(p, "fill", "rgb", 0.0, 0.0, 1.0, 0.0);
        PDF_arc(p, 400, 600, 100, 0, 360);
        PDF_fill(p);

        /* thick gray line */
        PDF_setcolor(p, "stroke", "gray", 0.5, 0.0, 0.0, 0.0);
        PDF_setlinewidth(p, 10);
        PDF_moveto(p, 100, 500);
        PDF_lineto(p, 300, 700);
        PDF_stroke(p);

        /* Using the same image handle means the data will be copied
         * to the PDF only once, which saves space.
         */
        PDF_fit_image(p, image, 150.0, 25.0, "scale=0.25");
        PDF_end_page_ext(p, "");

        /* Page 3 */
        PDF_begin_page_ext(p, 595, 842, "");

        /* Fit the image to a box of predefined size (without distortion) */
        optlist =
        "boxsize={400 400} position={center} fitmethod=meet";

        PDF_fit_image(p, image, 100, 200, optlist);

        PDF_end_page_ext(p, "");

        PDF_close_image(p, image);
        PDF_end_document(p, "");
    }

    PDF_CATCH(p) {
        printf("PDFlib exception occurred:\n");
        printf("[%d] %s: %s\n",
            PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
        PDF_delete(p);
        return(2);
    }

    PDF_delete(p);

    return 0;
}