Re: file-pdf patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux