From b7abdba401b7aec50e93ecd1df1ce76cb1f315c1 Mon Sep 17 00:00:00 2001 From: Matthew S. Wilson Date: Sun, 03 Jul 2005 14:00:45 +0000 Subject: implement the ps exporter interface for tiff documents 2005-07-03 Matthew S. Wilson * tiff/tiff-document.c (tiff_document_ps_export_begin) (tiff_document_ps_export_do_page, tiff_document_ps_export_end) (tiff_document_document_ps_exporter_iface_init): implement the ps exporter interface for tiff documents * tiff/tiff2ps.c: added a modified version of tiff2ps.c from libtiff to implement TIFF postscript export * tiff/tiff2ps.h: added a header file for external tiff2ps functions. * tiff/Makefile.am (libtiffdocument_la_SOURCES): add tiff2ps.c and tiff2ps.h --- (limited to 'tiff/tiff-document.c') diff --git a/tiff/tiff-document.c b/tiff/tiff-document.c index 3324e7d..137833b 100644 --- a/tiff/tiff-document.c +++ b/tiff/tiff-document.c @@ -1,4 +1,3 @@ - /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */ /* * Copyright (C) 2005, Jonathan Blandford @@ -18,12 +17,19 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* FIXME: Shoudl probably buffer calls to libtiff with TIFFSetWarningHandler +/* FIXME: Should probably buffer calls to libtiff with TIFFSetWarningHandler */ + +#include +#include +#include + #include "tiffio.h" +#include "tiff2ps.h" #include "tiff-document.h" -#include "ev-document-thumbnails.h" #include "ev-document-misc.h" +#include "ev-document-thumbnails.h" +#include "ev-ps-exporter.h" struct _TiffDocumentClass { @@ -37,18 +43,23 @@ struct _TiffDocument TIFF *tiff; gint n_pages; EvOrientation orientation; + FILE *ps_export_file; + gint ps_export_pages; }; typedef struct _TiffDocumentClass TiffDocumentClass; static void tiff_document_document_iface_init (EvDocumentIface *iface); static void tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); +static void tiff_document_document_ps_exporter_iface_init (EvPSExporterIface *iface); G_DEFINE_TYPE_WITH_CODE (TiffDocument, tiff_document, G_TYPE_OBJECT, { G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT, tiff_document_document_iface_init); G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS, tiff_document_document_thumbnails_iface_init); + G_IMPLEMENT_INTERFACE (EV_TYPE_PS_EXPORTER, + tiff_document_document_ps_exporter_iface_init); }); static TIFFErrorHandler orig_error_handler = NULL; @@ -398,6 +409,55 @@ tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface) iface->get_dimensions = tiff_document_thumbnails_get_dimensions; } +/* postscript exporter implementation */ + +static void +tiff_document_ps_export_begin (EvPSExporter *exporter, const char *filename, + int first_page, int last_page) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + document->ps_export_file = g_fopen (filename, "w"); + if (document->ps_export_file == NULL) + return; + document->ps_export_pages = 0; +} + +static void +tiff_document_ps_export_do_page (EvPSExporter *exporter, int page) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + if (document->ps_export_file == NULL) + return; + if (TIFFSetDirectory (document->tiff, page) != 1) + return; + TIFF2PS (document->ps_export_file, + document->tiff, + 0, 0, 0, 0, 0, + &document->ps_export_pages); +} + +static void +tiff_document_ps_export_end (EvPSExporter *exporter) +{ + TiffDocument *document = TIFF_DOCUMENT (exporter); + + if (document->ps_export_file == NULL) + return; + if (document->ps_export_pages) + TIFFPSTail (document->ps_export_file, + document->ps_export_pages); + fclose (document->ps_export_file); +} + +static void +tiff_document_document_ps_exporter_iface_init (EvPSExporterIface *iface) +{ + iface->begin = tiff_document_ps_export_begin; + iface->do_page = tiff_document_ps_export_do_page; + iface->end = tiff_document_ps_export_end; +} static void tiff_document_init (TiffDocument *tiff_document) -- cgit v0.9.1