From 991cc4f88bca2293930984fde9d04687122b802c Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Mon, 8 Feb 2016 20:25:03 +0000 Subject: [PATCH] rename as pdfload --- ChangeLog | 4 +- TODO | 4 +- doc/gtk-doc.make | 20 +- libvips/foreign/Makefile.am | 2 +- libvips/foreign/foreign.c | 35 +-- libvips/foreign/{popplerload.c => pdfload.c} | 238 +++++++++---------- libvips/include/vips/foreign.h | 4 +- 7 files changed, 156 insertions(+), 151 deletions(-) rename libvips/foreign/{popplerload.c => pdfload.c} (51%) diff --git a/ChangeLog b/ChangeLog index 55cf66ae..804f7d95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,8 @@ 29/1/16 started 8.3 - add vips_reduce*() ... a fast path for bicubic downsize -- vips_resize() and vips_similarity use it when they can +- vips_resize() and vips_similarity() use it when they can - bicubic is better on 32-bit int images -- add popplerload for PDF rendering +- add pdfload for PDF rendering ... file and buffer input are supported 27/1/16 started 8.2.3 - fix a crash with SPARC byte-order labq vips images diff --git a/TODO b/TODO index 4a47394c..d65134f9 100644 --- a/TODO +++ b/TODO @@ -1,11 +1,9 @@ -- add tests for popplerload, check docs, update c++ +- add tests for pdfload, check docs, update c++ - trim page edges? we often have black now - could load pdf thumbnails? -- rename as pdfload? - - new vips_reduce: affine diff --git a/doc/gtk-doc.make b/doc/gtk-doc.make index e7916563..9ccd0b04 100644 --- a/doc/gtk-doc.make +++ b/doc/gtk-doc.make @@ -25,6 +25,7 @@ TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ + $(expand_content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt @@ -86,7 +87,7 @@ GTK_DOC_V_SETUP_0=@echo " DOC Preparing build"; setup-build.stamp: -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ + files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ destdir=`dirname $(abs_builddir)/$$file`; \ @@ -118,7 +119,7 @@ scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ + if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ @@ -162,17 +163,17 @@ GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_$(V)) GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY)) GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references"; -html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ + if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ - if test "$(?)" = "0"; then \ + if test "$$?" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) @@ -194,11 +195,11 @@ GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_$(V)) GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY)) GTK_DOC_V_PDF_0=@echo " DOC Building PDF"; -pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) +pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ + if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ @@ -223,12 +224,15 @@ clean-local: @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ rm -f $(DOC_MODULE).types; \ fi + @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ + rm -f $(DOC_MODULE)-sections.txt; \ + fi distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ + rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ fi maintainer-clean-local: diff --git a/libvips/foreign/Makefile.am b/libvips/foreign/Makefile.am index b5aa5bf0..d4a7c9e0 100644 --- a/libvips/foreign/Makefile.am +++ b/libvips/foreign/Makefile.am @@ -1,7 +1,7 @@ noinst_LTLIBRARIES = libforeign.la libforeign_la_SOURCES = \ - popplerload.c \ + pdfload.c \ radiance.h \ radiance.c \ radload.c \ diff --git a/libvips/foreign/foreign.c b/libvips/foreign/foreign.c index 2c8a7248..f098b8a2 100644 --- a/libvips/foreign/foreign.c +++ b/libvips/foreign/foreign.c @@ -1654,9 +1654,9 @@ vips_foreign_operation_init( void ) extern GType vips_foreign_load_webp_buffer_get_type( void ); extern GType vips_foreign_save_webp_file_get_type( void ); extern GType vips_foreign_save_webp_buffer_get_type( void ); - extern GType vips_foreign_load_poppler_get_type( void ); - extern GType vips_foreign_load_poppler_file_get_type( void ); - extern GType vips_foreign_load_poppler_buffer_get_type( void ); + extern GType vips_foreign_load_pdf_get_type( void ); + extern GType vips_foreign_load_pdf_file_get_type( void ); + extern GType vips_foreign_load_pdf_buffer_get_type( void ); vips_foreign_load_rad_get_type(); vips_foreign_save_rad_get_type(); @@ -1675,9 +1675,9 @@ vips_foreign_operation_init( void ) vips_foreign_save_vips_get_type(); #ifdef HAVE_POPPLER - vips_foreign_load_poppler_get_type(); - vips_foreign_load_poppler_file_get_type(); - vips_foreign_load_poppler_buffer_get_type(); + vips_foreign_load_pdf_get_type(); + vips_foreign_load_pdf_file_get_type(); + vips_foreign_load_pdf_buffer_get_type(); #endif /*HAVE_POPPLER*/ #ifdef HAVE_GSF @@ -2852,7 +2852,7 @@ vips_matload( const char *filename, VipsImage **out, ... ) } /** - * vips_popplerload: + * vips_pdfload: * @filename: file to load * @out: output image * @...: %NULL-terminated list of optional named arguments @@ -2867,31 +2867,34 @@ vips_matload( const char *filename, VipsImage **out, ... ) * * Use @page to select a page to render, numbering from zero. * - * Use @dpi to set the rendering resolution. The default is 72. Alternatively + * Use @dpi to set the rendering resolution. The default is 72. Alternatively, * you can scale the rendering by @scale. * + * The operation fills a number of header fields with metadata, for example + * "pdf-author". They may be useful. + * * This function only reads the image header and does not render any pixel - * data. Rendering only occurs when pixels are accessed. + * data. Rendering occurs when pixels are accessed. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int -vips_popplerload( const char *filename, VipsImage **out, ... ) +vips_pdfload( const char *filename, VipsImage **out, ... ) { va_list ap; int result; va_start( ap, out ); - result = vips_call_split( "popplerload", ap, filename, out ); + result = vips_call_split( "pdfload", ap, filename, out ); va_end( ap ); return( result ); } /** - * vips_popplerload_buffer: + * vips_pdfload_buffer: * @buf: memory area to load * @len: size of memory area * @out: image to write @@ -2904,17 +2907,17 @@ vips_popplerload( const char *filename, VipsImage **out, ... ) * @scale: %gdouble, scale render by this factor * * Read a PDF-formatted memory block into a VIPS image. Exactly as - * vips_popplerload(), but read from a memory buffer. + * vips_pdfload(), but read from a memory buffer. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * - * See also: vips_popplerload(). + * See also: vips_pdfload(). * * Returns: 0 on success, -1 on error. */ int -vips_popplerload_buffer( void *buf, size_t len, VipsImage **out, ... ) +vips_pdfload_buffer( void *buf, size_t len, VipsImage **out, ... ) { va_list ap; VipsBlob *blob; @@ -2925,7 +2928,7 @@ vips_popplerload_buffer( void *buf, size_t len, VipsImage **out, ... ) blob = vips_blob_new( NULL, buf, len ); va_start( ap, out ); - result = vips_call_split( "popplerload_buffer", ap, blob, out ); + result = vips_call_split( "pdfload_buffer", ap, blob, out ); va_end( ap ); vips_area_unref( VIPS_AREA( blob ) ); diff --git a/libvips/foreign/popplerload.c b/libvips/foreign/pdfload.c similarity index 51% rename from libvips/foreign/popplerload.c rename to libvips/foreign/pdfload.c index 0019f072..89082568 100644 --- a/libvips/foreign/popplerload.c +++ b/libvips/foreign/pdfload.c @@ -54,7 +54,7 @@ #include #include -typedef struct _VipsForeignLoadPoppler { +typedef struct _VipsForeignLoadPdf { VipsForeignLoad parent_object; /* Load this page. @@ -72,34 +72,34 @@ typedef struct _VipsForeignLoadPoppler { PopplerDocument *doc; PopplerPage *page; -} VipsForeignLoadPoppler; +} VipsForeignLoadPdf; -typedef VipsForeignLoadClass VipsForeignLoadPopplerClass; +typedef VipsForeignLoadClass VipsForeignLoadPdfClass; -G_DEFINE_ABSTRACT_TYPE( VipsForeignLoadPoppler, vips_foreign_load_poppler, +G_DEFINE_ABSTRACT_TYPE( VipsForeignLoadPdf, vips_foreign_load_pdf, VIPS_TYPE_FOREIGN_LOAD ); static void -vips_foreign_load_poppler_dispose( GObject *gobject ) +vips_foreign_load_pdf_dispose( GObject *gobject ) { - VipsForeignLoadPoppler *poppler = (VipsForeignLoadPoppler *) gobject; + VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) gobject; - VIPS_UNREF( poppler->page ); - VIPS_UNREF( poppler->doc ); + VIPS_UNREF( pdf->page ); + VIPS_UNREF( pdf->doc ); - G_OBJECT_CLASS( vips_foreign_load_poppler_parent_class )-> + G_OBJECT_CLASS( vips_foreign_load_pdf_parent_class )-> dispose( gobject ); } static int -vips_foreign_load_poppler_build( VipsObject *object ) +vips_foreign_load_pdf_build( VipsObject *object ) { - VipsForeignLoadPoppler *poppler = (VipsForeignLoadPoppler *) object; + VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object; if( !vips_object_argument_isset( object, "scale" ) ) - poppler->scale = poppler->dpi / 72.0; + pdf->scale = pdf->dpi / 72.0; - if( VIPS_OBJECT_CLASS( vips_foreign_load_poppler_parent_class )-> + if( VIPS_OBJECT_CLASS( vips_foreign_load_pdf_parent_class )-> build( object ) ) return( -1 ); @@ -107,7 +107,7 @@ vips_foreign_load_poppler_build( VipsObject *object ) } static VipsForeignFlags -vips_foreign_load_poppler_get_flags_filename( const char *filename ) +vips_foreign_load_pdf_get_flags_filename( const char *filename ) { /* We can render any part of the page on demand. */ @@ -115,13 +115,13 @@ vips_foreign_load_poppler_get_flags_filename( const char *filename ) } static VipsForeignFlags -vips_foreign_load_poppler_get_flags( VipsForeignLoad *load ) +vips_foreign_load_pdf_get_flags( VipsForeignLoad *load ) { return( VIPS_FOREIGN_PARTIAL ); } static gboolean -vips_foreign_load_poppler_is_a_buffer( const void *buf, size_t len ) +vips_foreign_load_pdf_is_a_buffer( const void *buf, size_t len ) { const guchar *str = (const guchar *) buf; @@ -136,12 +136,12 @@ vips_foreign_load_poppler_is_a_buffer( const void *buf, size_t len ) } static gboolean -vips_foreign_load_poppler_is_a( const char *filename ) +vips_foreign_load_pdf_is_a( const char *filename ) { unsigned char buf[4]; if( vips__get_bytes( filename, buf, 4 ) && - vips_foreign_load_poppler_is_a_buffer( buf, 4 ) ) + vips_foreign_load_pdf_is_a_buffer( buf, 4 ) ) return( 1 ); return( 0 ); @@ -149,24 +149,24 @@ vips_foreign_load_poppler_is_a( const char *filename ) /* String-based metadata fields we extract. */ -typedef struct _VipsForeignLoadPopperMetadata { - char *(*poppler_fetch)( PopplerDocument *doc ); +typedef struct _VipsForeignLoadPdfMetadata { + char *(*pdf_fetch)( PopplerDocument *doc ); char *field; -} VipsForeignLoadPopperMetadata; +} VipsForeignLoadPdfMetadata; -static VipsForeignLoadPopperMetadata vips_foreign_load_poppler_metadata[] = { - { poppler_document_get_title, "poppler-title" }, - { poppler_document_get_author, "poppler-author" }, - { poppler_document_get_subject, "poppler-subject" }, - { poppler_document_get_keywords, "poppler-keywords" }, - { poppler_document_get_creator, "poppler-creator" }, - { poppler_document_get_producer, "poppler-producer" }, - { poppler_document_get_metadata, "poppler-metadata" }, +static VipsForeignLoadPdfMetadata vips_foreign_load_pdf_metadata[] = { + { poppler_document_get_title, "pdf-title" }, + { poppler_document_get_author, "pdf-author" }, + { poppler_document_get_subject, "pdf-subject" }, + { poppler_document_get_keywords, "pdf-keywords" }, + { poppler_document_get_creator, "pdf-creator" }, + { poppler_document_get_producer, "pdf-producer" }, + { poppler_document_get_metadata, "pdf-metadata" }, }; -static int n_metadata = VIPS_NUMBER( vips_foreign_load_poppler_metadata ); +static int n_metadata = VIPS_NUMBER( vips_foreign_load_pdf_metadata ); static void -vips_foreign_load_poppler_parse( VipsForeignLoadPoppler *poppler, +vips_foreign_load_pdf_parse( VipsForeignLoadPdf *pdf, VipsImage *out ) { PopplerRectangle crop_box; @@ -175,16 +175,16 @@ vips_foreign_load_poppler_parse( VipsForeignLoadPoppler *poppler, double res; int i; - poppler_page_get_size( poppler->page, &width, &height ); + poppler_page_get_size( pdf->page, &width, &height ); - poppler_page_get_crop_box( poppler->page, &crop_box ); + poppler_page_get_crop_box( pdf->page, &crop_box ); /* We need pixels/mm for vips. */ - res = poppler->dpi / 25.4; + res = pdf->dpi / 25.4; vips_image_init_fields( out, - width * poppler->scale, height * poppler->scale, + width * pdf->scale, height * pdf->scale, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, res, res ); @@ -194,16 +194,16 @@ vips_foreign_load_poppler_parse( VipsForeignLoadPoppler *poppler, /* Extract and attach metadata. */ - vips_image_set_int( out, "poppler-n_pages", - poppler_document_get_n_pages( poppler->doc ) ); + vips_image_set_int( out, "pdf-n_pages", + poppler_document_get_n_pages( pdf->doc ) ); for( i = 0; i < n_metadata; i++ ) { - VipsForeignLoadPopperMetadata *metadata = - &vips_foreign_load_poppler_metadata[i]; + VipsForeignLoadPdfMetadata *metadata = + &vips_foreign_load_pdf_metadata[i]; char *str; - if( (str = metadata->poppler_fetch( poppler->doc )) ) { + if( (str = metadata->pdf_fetch( pdf->doc )) ) { vips_image_set_string( out, metadata->field, str ); g_free( str ); } @@ -211,35 +211,35 @@ vips_foreign_load_poppler_parse( VipsForeignLoadPoppler *poppler, } static int -vips_foreign_load_poppler_header( VipsForeignLoad *load ) +vips_foreign_load_pdf_header( VipsForeignLoad *load ) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( load ); - VipsForeignLoadPoppler *poppler = (VipsForeignLoadPoppler *) load; + VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) load; - if( !(poppler->page = poppler_document_get_page( poppler->doc, - poppler->page_no )) ) { + if( !(pdf->page = poppler_document_get_page( pdf->doc, + pdf->page_no )) ) { vips_error( class->nickname, - _( "unable to load page %d" ), poppler->page_no ); + _( "unable to load page %d" ), pdf->page_no ); return( -1 ); } - vips_foreign_load_poppler_parse( poppler, load->out ); + vips_foreign_load_pdf_parse( pdf, load->out ); return( 0 ); } static int -vips_foreign_load_poppler_generate( VipsRegion *or, +vips_foreign_load_pdf_generate( VipsRegion *or, void *seq, void *a, void *b, gboolean *stop ) { - VipsForeignLoadPoppler *poppler = (VipsForeignLoadPoppler *) a; + VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) a; VipsRect *r = &or->valid; cairo_surface_t *surface; cairo_t *cr; int x, y; - /* Poppler won't always paint the background. + /* Pdf won't always paint the background. */ vips_region_black( or ); @@ -251,14 +251,14 @@ vips_foreign_load_poppler_generate( VipsRegion *or, cr = cairo_create( surface ); cairo_surface_destroy( surface ); - cairo_scale( cr, poppler->scale, poppler->scale ); + cairo_scale( cr, pdf->scale, pdf->scale ); cairo_translate( cr, - -r->left / poppler->scale, -r->top / poppler->scale ); + -r->left / pdf->scale, -r->top / pdf->scale ); - /* Poppler is single-threaded, but we don't need to lock since we're + /* poppler is single-threaded, but we don't need to lock since we're * running inside a non-threaded tilecache. */ - poppler_page_render( poppler->page, cr ); + poppler_page_render( pdf->page, cr ); cairo_destroy( cr ); @@ -280,9 +280,9 @@ vips_foreign_load_poppler_generate( VipsRegion *or, } static int -vips_foreign_load_poppler_load( VipsForeignLoad *load ) +vips_foreign_load_pdf_load( VipsForeignLoad *load ) { - VipsForeignLoadPoppler *poppler = (VipsForeignLoadPoppler *) load; + VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) load; VipsImage **t = (VipsImage **) vips_object_local_array( (VipsObject *) load, 2 ); @@ -290,14 +290,14 @@ vips_foreign_load_poppler_load( VipsForeignLoad *load ) */ t[0] = vips_image_new(); - vips_foreign_load_poppler_parse( poppler, t[0] ); + vips_foreign_load_pdf_parse( pdf, t[0] ); if( vips_image_generate( t[0], - NULL, vips_foreign_load_poppler_generate, NULL, poppler, NULL ) ) + NULL, vips_foreign_load_pdf_generate, NULL, pdf, NULL ) ) return( -1 ); /* Don't use tilecache to keep the number of calls to - * poppler_page_render() low. Don't thread the cache, we rely on - * locking to keep poppler single-threaded. + * pdf_page_render() low. Don't thread the cache, we rely on + * locking to keep pdf single-threaded. */ if( vips_linecache( t[0], &t[1], "tile_height", 128, @@ -310,57 +310,57 @@ vips_foreign_load_poppler_load( VipsForeignLoad *load ) } static void -vips_foreign_load_poppler_class_init( VipsForeignLoadPopplerClass *class ) +vips_foreign_load_pdf_class_init( VipsForeignLoadPdfClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; - gobject_class->dispose = vips_foreign_load_poppler_dispose; + gobject_class->dispose = vips_foreign_load_pdf_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; - object_class->nickname = "popplerload"; - object_class->description = _( "load PDF with poppler" ); - object_class->build = vips_foreign_load_poppler_build; + object_class->nickname = "pdfload"; + object_class->description = _( "load PDF with pdf" ); + object_class->build = vips_foreign_load_pdf_build; load_class->get_flags_filename = - vips_foreign_load_poppler_get_flags_filename; - load_class->get_flags = vips_foreign_load_poppler_get_flags; - load_class->load = vips_foreign_load_poppler_load; + vips_foreign_load_pdf_get_flags_filename; + load_class->get_flags = vips_foreign_load_pdf_get_flags; + load_class->load = vips_foreign_load_pdf_load; VIPS_ARG_INT( class, "page", 10, _( "Page" ), _( "Load this page from the file" ), VIPS_ARGUMENT_OPTIONAL_INPUT, - G_STRUCT_OFFSET( VipsForeignLoadPoppler, page_no ), + G_STRUCT_OFFSET( VipsForeignLoadPdf, page_no ), 0, 100000, 0 ); VIPS_ARG_DOUBLE( class, "dpi", 11, _( "DPI" ), _( "Render at this DPI" ), VIPS_ARGUMENT_OPTIONAL_INPUT, - G_STRUCT_OFFSET( VipsForeignLoadPoppler, dpi ), + G_STRUCT_OFFSET( VipsForeignLoadPdf, dpi ), 0.001, 100000.0, 72.0 ); VIPS_ARG_DOUBLE( class, "scale", 12, _( "Scale" ), _( "Scale output by this factor" ), VIPS_ARGUMENT_OPTIONAL_INPUT, - G_STRUCT_OFFSET( VipsForeignLoadPoppler, scale ), + G_STRUCT_OFFSET( VipsForeignLoadPdf, scale ), 0.001, 100000.0, 1.0 ); } static void -vips_foreign_load_poppler_init( VipsForeignLoadPoppler *poppler ) +vips_foreign_load_pdf_init( VipsForeignLoadPdf *pdf ) { - poppler->dpi = 72.0; - poppler->scale = 1.0; + pdf->dpi = 72.0; + pdf->scale = 1.0; } -typedef struct _VipsForeignLoadPopplerFile { - VipsForeignLoadPoppler parent_object; +typedef struct _VipsForeignLoadPdfFile { + VipsForeignLoadPdf parent_object; /* Filename for load. */ @@ -368,30 +368,30 @@ typedef struct _VipsForeignLoadPopplerFile { char *uri; -} VipsForeignLoadPopplerFile; +} VipsForeignLoadPdfFile; -typedef VipsForeignLoadPopplerClass VipsForeignLoadPopplerFileClass; +typedef VipsForeignLoadPdfClass VipsForeignLoadPdfFileClass; -G_DEFINE_TYPE( VipsForeignLoadPopplerFile, vips_foreign_load_poppler_file, - vips_foreign_load_poppler_get_type() ); +G_DEFINE_TYPE( VipsForeignLoadPdfFile, vips_foreign_load_pdf_file, + vips_foreign_load_pdf_get_type() ); static void -vips_foreign_load_poppler_file_dispose( GObject *gobject ) +vips_foreign_load_pdf_file_dispose( GObject *gobject ) { - VipsForeignLoadPopplerFile *file = - (VipsForeignLoadPopplerFile *) gobject; + VipsForeignLoadPdfFile *file = + (VipsForeignLoadPdfFile *) gobject; VIPS_FREE( file->uri ); - G_OBJECT_CLASS( vips_foreign_load_poppler_file_parent_class )-> + G_OBJECT_CLASS( vips_foreign_load_pdf_file_parent_class )-> dispose( gobject ); } static int -vips_foreign_load_poppler_file_header( VipsForeignLoad *load ) +vips_foreign_load_pdf_file_header( VipsForeignLoad *load ) { - VipsForeignLoadPoppler *poppler = (VipsForeignLoadPoppler *) load; - VipsForeignLoadPopplerFile *file = (VipsForeignLoadPopplerFile *) load; + VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) load; + VipsForeignLoadPdfFile *file = (VipsForeignLoadPdfFile *) load; char *path; GError *error = NULL; @@ -406,90 +406,90 @@ vips_foreign_load_poppler_file_header( VipsForeignLoad *load ) } free( path ); - if( !(poppler->doc = poppler_document_new_from_file( + if( !(pdf->doc = poppler_document_new_from_file( file->uri, NULL, &error )) ) { vips_g_error( &error ); return( -1 ); } - return( vips_foreign_load_poppler_header( load ) ); + return( vips_foreign_load_pdf_header( load ) ); } -static const char *vips_foreign_poppler_suffs[] = { +static const char *vips_foreign_pdf_suffs[] = { ".pdf", NULL }; static void -vips_foreign_load_poppler_file_class_init( - VipsForeignLoadPopplerFileClass *class ) +vips_foreign_load_pdf_file_class_init( + VipsForeignLoadPdfFileClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; - gobject_class->dispose = vips_foreign_load_poppler_file_dispose; + gobject_class->dispose = vips_foreign_load_pdf_file_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; - object_class->nickname = "popplerload"; - object_class->description = _( "load PDF with poppler" ); + object_class->nickname = "pdfload"; + object_class->description = _( "load PDF with pdf" ); - foreign_class->suffs = vips_foreign_poppler_suffs; + foreign_class->suffs = vips_foreign_pdf_suffs; - load_class->is_a = vips_foreign_load_poppler_is_a; - load_class->header = vips_foreign_load_poppler_file_header; + load_class->is_a = vips_foreign_load_pdf_is_a; + load_class->header = vips_foreign_load_pdf_file_header; VIPS_ARG_STRING( class, "filename", 1, _( "Filename" ), _( "Filename to load from" ), VIPS_ARGUMENT_REQUIRED_INPUT, - G_STRUCT_OFFSET( VipsForeignLoadPopplerFile, filename ), + G_STRUCT_OFFSET( VipsForeignLoadPdfFile, filename ), NULL ); } static void -vips_foreign_load_poppler_file_init( VipsForeignLoadPopplerFile *file ) +vips_foreign_load_pdf_file_init( VipsForeignLoadPdfFile *file ) { } -typedef struct _VipsForeignLoadPopplerBuffer { - VipsForeignLoadPoppler parent_object; +typedef struct _VipsForeignLoadPdfBuffer { + VipsForeignLoadPdf parent_object; /* Load from a buffer. */ VipsArea *buf; -} VipsForeignLoadPopplerBuffer; +} VipsForeignLoadPdfBuffer; -typedef VipsForeignLoadPopplerClass VipsForeignLoadPopplerBufferClass; +typedef VipsForeignLoadPdfClass VipsForeignLoadPdfBufferClass; -G_DEFINE_TYPE( VipsForeignLoadPopplerBuffer, vips_foreign_load_poppler_buffer, - vips_foreign_load_poppler_get_type() ); +G_DEFINE_TYPE( VipsForeignLoadPdfBuffer, vips_foreign_load_pdf_buffer, + vips_foreign_load_pdf_get_type() ); static int -vips_foreign_load_poppler_buffer_header( VipsForeignLoad *load ) +vips_foreign_load_pdf_buffer_header( VipsForeignLoad *load ) { - VipsForeignLoadPoppler *poppler = (VipsForeignLoadPoppler *) load; - VipsForeignLoadPopplerBuffer *buffer = - (VipsForeignLoadPopplerBuffer *) load; + VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) load; + VipsForeignLoadPdfBuffer *buffer = + (VipsForeignLoadPdfBuffer *) load; GError *error = NULL; - if( !(poppler->doc = poppler_document_new_from_data( + if( !(pdf->doc = poppler_document_new_from_data( buffer->buf->data, buffer->buf->length, NULL, &error )) ) { vips_g_error( &error ); return( -1 ); } - return( vips_foreign_load_poppler_header( load ) ); + return( vips_foreign_load_pdf_header( load ) ); } static void -vips_foreign_load_poppler_buffer_class_init( - VipsForeignLoadPopplerBufferClass *class ) +vips_foreign_load_pdf_buffer_class_init( + VipsForeignLoadPdfBufferClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); VipsObjectClass *object_class = (VipsObjectClass *) class; @@ -498,23 +498,23 @@ vips_foreign_load_poppler_buffer_class_init( gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; - object_class->nickname = "popplerload_buffer"; - object_class->description = _( "load PDF with poppler" ); + object_class->nickname = "pdfload_buffer"; + object_class->description = _( "load PDF with pdf" ); - load_class->is_a_buffer = vips_foreign_load_poppler_is_a_buffer; - load_class->header = vips_foreign_load_poppler_buffer_header; + load_class->is_a_buffer = vips_foreign_load_pdf_is_a_buffer; + load_class->header = vips_foreign_load_pdf_buffer_header; VIPS_ARG_BOXED( class, "buffer", 1, _( "Buffer" ), _( "Buffer to load from" ), VIPS_ARGUMENT_REQUIRED_INPUT, - G_STRUCT_OFFSET( VipsForeignLoadPopplerBuffer, buf ), + G_STRUCT_OFFSET( VipsForeignLoadPdfBuffer, buf ), VIPS_TYPE_BLOB ); } static void -vips_foreign_load_poppler_buffer_init( VipsForeignLoadPopplerBuffer *file ) +vips_foreign_load_pdf_buffer_init( VipsForeignLoadPdfBuffer *file ) { } diff --git a/libvips/include/vips/foreign.h b/libvips/include/vips/foreign.h index 0f295e5b..9d932ff1 100644 --- a/libvips/include/vips/foreign.h +++ b/libvips/include/vips/foreign.h @@ -490,9 +490,9 @@ int vips_radload( const char *filename, VipsImage **out, ... ) int vips_radsave( VipsImage *in, const char *filename, ... ) __attribute__((sentinel)); -int vips_popplerload( const char *filename, VipsImage **out, ... ) +int vips_pdfload( const char *filename, VipsImage **out, ... ) __attribute__((sentinel)); -int vips_popplerload_buffer( void *buf, size_t len, VipsImage **out, ... ) +int vips_pdfload_buffer( void *buf, size_t len, VipsImage **out, ... ) __attribute__((sentinel)); /**