From 6c3ca0cf2c626fce12897ea0937c07f2d7863d2f Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Thu, 23 Dec 2004 01:08:19 +0000 Subject: add GnomePrintJob to EvPrintJob constructor arguments. * shell/ev-window.c (ev_window_print): add GnomePrintJob to EvPrintJob constructor arguments. * backend/ev-ps-exporter.c, backend/ev-ps-exporter.h: interface for documents that can export PostScript (page by page). * backend/Makefile.am (libevbackend_la_SOURCES): add them. * pdf/xpdf/pdf-document.cc (pdf_document_ps_export_begin) (pdf_document_ps_export_do_page, pdf_document_ps_export_end) (pdf_document_ps_exporter_iface_init: Implement EvPSExporter. * pdf/xpdf/Makefile.am (libxpdf_la_SOURCES): build PSOutputDev. --- (limited to 'pdf') diff --git a/pdf/xpdf/Makefile.am b/pdf/xpdf/Makefile.am index 7c1b643..9676c00 100644 --- a/pdf/xpdf/Makefile.am +++ b/pdf/xpdf/Makefile.am @@ -93,6 +93,8 @@ libxpdf_la_SOURCES = \ NameToUnicodeTable.h \ GDKSplashOutputDev.cc \ GDKSplashOutputDev.h \ + PSOutputDev.cc \ + PSOutputDev.h \ TextOutputDev.cc \ TextOutputDev.h \ UTF8.h diff --git a/pdf/xpdf/pdf-document.cc b/pdf/xpdf/pdf-document.cc index 9deda49..8323ebe 100644 --- a/pdf/xpdf/pdf-document.cc +++ b/pdf/xpdf/pdf-document.cc @@ -19,11 +19,13 @@ #include "gpdf-g-switch.h" #include "pdf-document.h" +#include "ev-ps-exporter.h" #include "gpdf-g-switch.h" #include "GlobalParams.h" #include "GDKSplashOutputDev.h" #include "PDFDoc.h" +#include "PSOutputDev.h" typedef struct _PdfDocumentClass PdfDocumentClass; @@ -47,16 +49,22 @@ struct _PdfDocument GdkDrawable *target; GDKSplashOutputDev *out; + PSOutputDev *ps_out; PDFDoc *doc; gboolean page_valid; }; static void pdf_document_document_iface_init (EvDocumentIface *iface); +static void pdf_document_ps_exporter_iface_init (EvPSExporterIface *iface); G_DEFINE_TYPE_WITH_CODE (PdfDocument, pdf_document, G_TYPE_OBJECT, - { G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT, - pdf_document_document_iface_init) }); + { + G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT, + pdf_document_document_iface_init); + G_IMPLEMENT_INTERFACE (EV_TYPE_PS_EXPORTER, + pdf_document_ps_exporter_iface_init); + }); static gboolean document_validate_page (PdfDocument *pdf_document) @@ -355,6 +363,38 @@ pdf_document_end_find (EvDocument *document) } static void +pdf_document_ps_export_begin (EvPSExporter *exporter, const char *filename) +{ + PdfDocument *document = PDF_DOCUMENT (exporter); + + if (document->ps_out) + delete document->ps_out; + + document->ps_out = new PSOutputDev ((char *)filename, document->doc->getXRef(), + document->doc->getCatalog(), 1, + ev_document_get_n_pages (EV_DOCUMENT (document)), + psModePS); +} + +static void +pdf_document_ps_export_do_page (EvPSExporter *exporter, int page) +{ + PdfDocument *document = PDF_DOCUMENT (exporter); + + document->doc->displayPage (document->ps_out, page, + 72.0, 72.0, 0, gTrue, gFalse); +} + +static void +pdf_document_ps_export_end (EvPSExporter *exporter) +{ + PdfDocument *document = PDF_DOCUMENT (exporter); + + delete document->ps_out; + document->ps_out = NULL; +} + +static void pdf_document_finalize (GObject *object) { PdfDocument *pdf_document = PDF_DOCUMENT (object); @@ -364,6 +404,8 @@ pdf_document_finalize (GObject *object) if (pdf_document->out) delete pdf_document->out; + if (pdf_document->ps_out) + delete pdf_document->ps_out; if (pdf_document->doc) delete pdf_document->doc; @@ -394,6 +436,14 @@ pdf_document_document_iface_init (EvDocumentIface *iface) } static void +pdf_document_ps_exporter_iface_init (EvPSExporterIface *iface) +{ + iface->begin = pdf_document_ps_export_begin; + iface->do_page = pdf_document_ps_export_do_page; + iface->end = pdf_document_ps_export_end; +} + +static void pdf_document_init (PdfDocument *pdf_document) { pdf_document->page = 1; -- cgit v0.9.1