]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/ev-poppler.cc
Updated British English translation.
[evince.git] / pdf / ev-poppler.cc
index 7fcc9c0d630ebe8607d4b2c03b1dc46933772703..1599f2f24906ad9af5336f45514bb36e5d8757fe 100644 (file)
@@ -58,6 +58,7 @@ struct _PdfDocument
        GObject parent_instance;
 
        PopplerDocument *document;
        GObject parent_instance;
 
        PopplerDocument *document;
+       PopplerPSFile *ps_file;
        gchar *password;
 
        PdfDocumentSearch *search;
        gchar *password;
 
        PdfDocumentSearch *search;
@@ -68,6 +69,7 @@ static void pdf_document_security_iface_init            (EvDocumentSecurityIface
 static void pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface);
 static void pdf_document_document_links_iface_init      (EvDocumentLinksIface      *iface);
 static void pdf_document_find_iface_init                (EvDocumentFindIface       *iface);
 static void pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface);
 static void pdf_document_document_links_iface_init      (EvDocumentLinksIface      *iface);
 static void pdf_document_find_iface_init                (EvDocumentFindIface       *iface);
+static void pdf_document_ps_exporter_iface_init         (EvPSExporterIface         *iface);
 static void pdf_document_thumbnails_get_dimensions      (EvDocumentThumbnails      *document_thumbnails,
                                                         gint                       page,
                                                         gint                       size,
 static void pdf_document_thumbnails_get_dimensions      (EvDocumentThumbnails      *document_thumbnails,
                                                         gint                       page,
                                                         gint                       size,
@@ -88,17 +90,11 @@ G_DEFINE_TYPE_WITH_CODE (PdfDocument, pdf_document, G_TYPE_OBJECT,
                                                        pdf_document_document_links_iface_init);
                                 G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FIND,
                                                        pdf_document_find_iface_init);
                                                        pdf_document_document_links_iface_init);
                                 G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FIND,
                                                        pdf_document_find_iface_init);
-#if 0
                                 G_IMPLEMENT_INTERFACE (EV_TYPE_PS_EXPORTER,
                                                        pdf_document_ps_exporter_iface_init);
                                 G_IMPLEMENT_INTERFACE (EV_TYPE_PS_EXPORTER,
                                                        pdf_document_ps_exporter_iface_init);
-#endif
                         });
 
 
                         });
 
 
-
-
-
-
 static void
 pdf_document_get_property (GObject *object,
                           guint prop_id,
 static void
 pdf_document_get_property (GObject *object,
                           guint prop_id,
@@ -328,7 +324,31 @@ pdf_document_set_password (EvDocumentSecurity *document_security,
        document->password = g_strdup (password);
 }
 
        document->password = g_strdup (password);
 }
 
+static gboolean
+pdf_document_can_get_text (EvDocument *document)
+{
+       return TRUE;
+}
+
+static char *
+pdf_document_get_text (EvDocument *document, int page, EvRectangle *rect)
+{
+       PdfDocument *pdf_document = PDF_DOCUMENT (document);
+       PopplerPage *poppler_page;
+       PopplerRectangle r;
+       double height;
+       
+       poppler_page = poppler_document_get_page (pdf_document->document, page);
+       g_return_val_if_fail (poppler_page != NULL, NULL);
+
+       poppler_page_get_size (poppler_page, NULL, &height);
+       r.x1 = rect->x1;
+       r.y1 = height - rect->y2;
+       r.x2 = rect->x2;
+       r.y2 = height - rect->y1;
 
 
+       return poppler_page_get_text (poppler_page, &r);
+}
 
 static void
 pdf_document_document_iface_init (EvDocumentIface *iface)
 
 static void
 pdf_document_document_iface_init (EvDocumentIface *iface)
@@ -340,6 +360,8 @@ pdf_document_document_iface_init (EvDocumentIface *iface)
        iface->get_page_label = pdf_document_get_page_label;
        iface->get_links = pdf_document_get_links;
        iface->render_pixbuf = pdf_document_render_pixbuf;
        iface->get_page_label = pdf_document_get_page_label;
        iface->get_links = pdf_document_get_links;
        iface->render_pixbuf = pdf_document_render_pixbuf;
+       iface->get_text = pdf_document_get_text;
+       iface->can_get_text = pdf_document_can_get_text;
 };
 
 static void
 };
 
 static void
@@ -703,7 +725,7 @@ pdf_document_find_get_result (EvDocumentFind *document_find,
        PopplerPage *poppler_page;
        PopplerRectangle *r;
        int current_page;
        PopplerPage *poppler_page;
        PopplerRectangle *r;
        int current_page;
-       double scale, height;
+       double height;
 
        if (search == NULL)
                return FALSE;
 
        if (search == NULL)
                return FALSE;
@@ -780,6 +802,45 @@ pdf_document_find_iface_init (EvDocumentFindIface *iface)
         iface->cancel = pdf_document_find_cancel;
 }
 
         iface->cancel = pdf_document_find_cancel;
 }
 
+static void
+pdf_document_ps_exporter_begin (EvPSExporter *exporter, const char *filename)
+{
+       PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
+       int n_pages;
+       
+       n_pages = pdf_document_get_n_pages (EV_DOCUMENT (exporter));
+       pdf_document->ps_file = poppler_ps_file_new (pdf_document->document,
+                                                    filename, n_pages);
+}
+
+static void
+pdf_document_ps_exporter_do_page (EvPSExporter *exporter, int page)
+{
+       PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
+       PopplerPage *poppler_page;
+
+       g_return_if_fail (pdf_document->ps_file != NULL);
+
+       poppler_page = poppler_document_get_page (pdf_document->document, page);
+       poppler_page_render_to_ps (poppler_page, pdf_document->ps_file);
+}
+
+static void
+pdf_document_ps_exporter_end (EvPSExporter *exporter)
+{
+       PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
+
+       poppler_ps_file_free (pdf_document->ps_file);
+       pdf_document->ps_file = NULL;
+}
+
+static void
+pdf_document_ps_exporter_iface_init (EvPSExporterIface *iface)
+{
+        iface->begin = pdf_document_ps_exporter_begin;
+        iface->do_page = pdf_document_ps_exporter_do_page;
+        iface->end = pdf_document_ps_exporter_end;
+}
 
 PdfDocument *
 pdf_document_new (void)
 
 PdfDocument *
 pdf_document_new (void)