I guess I also need to copy&past the patch (attachments don't seem to work here...) So here it is: *** file-pdf.c 2008-11-20 23:43:49.000000000 +0100--- file-pdf-patched.c 2009-05-07 16:51:02.000000000 +0200****************** 264,271 **** static const GimpParamDef thumb_args[] = {! { GIMP_PDB_STRING, "filename", "The name of the file to load" },! { GIMP_PDB_INT32, "thumb-size", "Preferred thumbnail size" } }; static const GimpParamDef thumb_return_vals[] =--- 264,277 ---- static const GimpParamDef thumb_args[] = {! { GIMP_PDB_STRING, "filename", "The name of the file to load" },! /* start of patched part to define preferred height and width of thumbnail - by Cihan Aksakal, Nils Mull */! { GIMP_PDB_INT32, "preferred-width", "Preferred thumbnail width" },! { GIMP_PDB_INT32, "preferred-height", "Preferred thumbnail height" },! /* end of patched part to define preferred height and width of thumbnail - by Cihan Aksakal, Nils Mull */! /* start of patched part to define page number to extract - by Cihan Aksakal, Nils Mull */! { GIMP_PDB_INT32, "page-number", "Page Number to extract (Note: 0-Based)" }! /* end of patched part to define page number to extract - by Cihan Aksakal, Nils Mull */ }; static const GimpParamDef thumb_return_vals[] =****************** 427,513 **** } else if (strcmp (name, LOAD_THUMB_PROC) == 0) {! if (nparams < 2)! { status = GIMP_PDB_CALLING_ERROR;! }! else! { gdouble width = 0; gdouble height = 0; gdouble scale; gint32 image = -1; GdkPixbuf *pixbuf = NULL; /* Possibly retrieve last settings */ gimp_get_data (LOAD_PROC, &loadvals); doc = open_document (param[0].data.d_string, &error); ! if (doc)! {! PopplerPage *page = poppler_document_get_page (doc, 0);!! if (page)! {! poppler_page_get_size (page, &width, &height);!! g_object_unref (page); } ! pixbuf = get_thumbnail (doc, 0, param[1].data.d_int32); g_object_unref (doc);- }-- if (pixbuf)- {- image = gimp_image_new (gdk_pixbuf_get_width (pixbuf),- gdk_pixbuf_get_height (pixbuf),- GIMP_RGB);-- gimp_image_undo_disable (image);-- layer_from_pixbuf (image, "thumbnail", 0, pixbuf, 0.0, 1.0);- g_object_unref (pixbuf); ! gimp_image_undo_enable (image);! gimp_image_clean_all (image); } ! scale = loadvals.resolution / gimp_unit_get_factor (GIMP_UNIT_POINT); - width *= scale;- height *= scale;-- if (image != -1)- {- *nreturn_vals = 4;-- values[1].type = GIMP_PDB_IMAGE;- values[1].data.d_image = image;- values[2].type = GIMP_PDB_INT32;- values[2].data.d_int32 = width;- values[3].type = GIMP_PDB_INT32;- values[3].data.d_int32 = height;- }- else- {- status = GIMP_PDB_EXECUTION_ERROR;- } } ! }! else! { status = GIMP_PDB_CALLING_ERROR; } ! if (status != GIMP_PDB_SUCCESS && error)! { *nreturn_vals = 2; values[1].type = GIMP_PDB_STRING; values[1].data.d_string = error->message;! } values[0].data.d_status = status; }--- 433,568 ---- } else if (strcmp (name, LOAD_THUMB_PROC) == 0) {! if (nparams < 2) { status = GIMP_PDB_CALLING_ERROR;! } else {! /* start of patched part to define page number to extract - by Cihan Aksakal, Nils Mull */ gdouble width = 0; gdouble height = 0; gdouble scale; gint32 image = -1; GdkPixbuf *pixbuf = NULL; + /* calculate page number to extract */+ gint32 extractionPageNumber = 0;+ if (param[3].data.d_int32 > 0) {+ extractionPageNumber = param[3].data.d_int32;+ } /* Possibly retrieve last settings */ gimp_get_data (LOAD_PROC, &loadvals); doc = open_document (param[0].data.d_string, &error);++ /* check whether the document is loaded and contains enough pages to process the extraction of the defined page */+ if (doc && poppler_document_get_n_pages(doc) > extractionPageNumber) {+ /* added var extractionPageNumber instead of 0 - now it extracts the defined page */+ PopplerPage *page = poppler_document_get_page (doc, extractionPageNumber);+ if (page) {+ poppler_page_get_size (page, &width, &height);+ g_object_unref (page);+ } ! /* calculate prefered size */! if (param[1].data.d_int32 > 0 && param[2].data.d_int32 > 0) {! /* calculate preferred width and height */! gint32 preferredSize = 0;!! gint32 bbWidth = param[1].data.d_int32;! gint32 bbHeight = param[2].data.d_int32;!! gdouble pWidth = 0;! gdouble pHeight = 0;!! /* calculation for image scaling & preferredSize */! if (width > height) {! printf("width > height\n");! pWidth = bbWidth;! pHeight = (gdouble) (pWidth/width) * height;! printf("%f x %f\n", pWidth, pHeight);! if (pHeight > bbHeight) {! printf("pHeight (%f) > bbHeight (%d)\n", pHeight, bbHeight);! pWidth = (gdouble) (bbHeight/pHeight) * pWidth; // check! pHeight = bbHeight;! printf("%f x %f\n", pWidth, pHeight); }+ } else {+ printf("width =< height\n");+ pHeight = bbHeight;+ pWidth = (gdouble) (pHeight/height) * width;+ printf("%f x %f\n", pWidth, pHeight);+ if (pWidth > bbWidth) {+ printf("pWidth (%f) > bbWidth (%d)\n", pWidth, bbWidth);+ pHeight = (gdouble) (bbWidth/pWidth) * pHeight; // check+ pWidth = bbWidth;+ printf("%f x %f\n", pWidth, pHeight);+ }+ }+ preferredSize = MAX(pWidth, pHeight); ! /* added var extractionPageNumber instead of 0 - now it extracts the defined page */! pixbuf = get_thumbnail (doc, extractionPageNumber, preferredSize); g_object_unref (doc); ! if (pixbuf) {! image = gimp_image_new (gdk_pixbuf_get_width (pixbuf),! gdk_pixbuf_get_height (pixbuf),! GIMP_RGB);!! gimp_image_undo_disable (image);!! layer_from_pixbuf (image, "thumbnail", 0, pixbuf, 0.0, 1.0);! g_object_unref (pixbuf);!! gimp_image_undo_enable (image);! gimp_image_clean_all (image);! }!! scale = loadvals.resolution / gimp_unit_get_factor (GIMP_UNIT_POINT);!! width *= scale;! height *= scale;!! if (image != -1) {! *nreturn_vals = 4;!! values[1].type = GIMP_PDB_IMAGE;! values[1].data.d_image = image;! values[2].type = GIMP_PDB_INT32;! values[2].data.d_int32 = width;! values[3].type = GIMP_PDB_INT32;! values[3].data.d_int32 = height;! } else {! status = GIMP_PDB_EXECUTION_ERROR;! }! } else { /* preferred height and width parameters check failed */! /* set error message and status that a file page number violation occured */! g_set_error (&error, 0, 0,! "Could not calculate preferred thumbail height and width (width: '%d', height: '%d' ). Note: Both parameters have to be greater 0. PDF-File: '%s'",! param[1].data.d_int32, param[2].data.d_int32, gimp_filename_to_utf8 (param[0].data.d_string) );! status = GIMP_PDB_EXECUTION_ERROR; } ! } else if (doc) { /* check doc & page number failed */! /* set error message and status that a file page number violation occured */! g_set_error (&error, 0, 0,! "Could not extract page-number %d (Note: 0-Based). Documnent has only %d pages. PDF-File: '%s'",! extractionPageNumber, poppler_document_get_n_pages(doc), gimp_filename_to_utf8 (param[0].data.d_string) );! status = GIMP_PDB_EXECUTION_ERROR;! }! /* check doc & page number */ }+ /* end of patched part to define page number to extract - by Cihan Aksakal, Nils Mull */ ! } else { status = GIMP_PDB_CALLING_ERROR; } ! if (status != GIMP_PDB_SUCCESS && error) { *nreturn_vals = 2; values[1].type = GIMP_PDB_STRING; values[1].data.d_string = error->message;! } values[0].data.d_status = status; } ----- Ursprüngliche Mail -----Von: "Thomas Frieling" <thomas.frieling@xxxxxxxxx>An: gimp-developer@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: Dienstag, 14. Juli 2009 20:00:33 GMT +01:00 Amsterdam/Berlin/Bern/Rom/Stockholm/WienBetreff: file-pdf patch Hi all! Just wanted to share a litte patch for file-pdf.c to support a max width/height and a page number as parameters. Maybe someone can clean the code and push it into the next gimp release. Usage:gimp -i -b '(pdftojpg inputfilename maxWidth maxHeight outputfilename quality radius delta brightness contrast page)' -b '(gimp-quit 0)'Example:gimp -i -b '(pdftojpg "/tmp/input.pdf" 1000 1800 "/tmp/output.jpg" 0.85 3.5 15 -10 5 3)' -b '(gimp-quit 0)' Have fun,Thomas -- Thomas Frielinghttp://www.kaufda.deJuno Internet GmbHGeschäftsführer Tel.: +49 (0) 30 / 253-293-25Mobil: + 49 (0) 173 / 63 62 62 3thomas.frieling@xxxxxxxxx https://www.xing.com/profile/Thomas_Frieling2 Sitz des kaufDA Office:Kunsthaus Lempertz, Poststr. 21-22, 10178 Berlin Sitz der Gesellschaft:Fronhoferstr. 6, 12165 Berlin Amtsgericht Charlottenburg - HRB 115393 BGeschäftsführung: Cihan Aksakal, Thomas Frieling, Christian W. Gaiser, Tim M. Marbach -- Thomas Frielinghttp://www.kaufda.deJuno Internet GmbHGeschäftsführer Tel.: +49 (0) 30 / 253-293-25Mobil: + 49 (0) 173 / 63 62 62 3thomas.frieling@xxxxxxxxx https://www.xing.com/profile/Thomas_Frieling2 Sitz des kaufDA Office:Kunsthaus Lempertz, Poststr. 21-22, 10178 Berlin Sitz der Gesellschaft:Fronhoferstr. 6, 12165 Berlin Amtsgericht Charlottenburg - HRB 115393 BGeschäftsführung: Cihan Aksakal, Thomas Frieling, Christian W. Gaiser, Tim M. Marbach _______________________________________________Gimp-developer mailing listGimp-developer@xxxxxxxxxxxxxxxxxxxxxxxxxxx://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer