Code

i18n. Fix for bug #601522 (embedding prompt dialog's caption is not translated).
[inkscape.git] / src / extension / internal / cairo-renderer-pdf-out.cpp
index bd25706520bacd7c97ef663c8f3a2eb124074fca..e8eff20b7ab6eedc7a88500f004a9cdc953acab8 100644 (file)
@@ -5,8 +5,9 @@
  * Authors:
  *   Ted Gould <ted@gould.cx>
  *   Ulf Erikson <ulferikson@users.sf.net>
+ *   Johan Engelen <goejendaagh@zonnet.nl>
  *
- * Copyright (C) 2004-2006 Authors
+ * Copyright (C) 2004-2010 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
@@ -20,6 +21,7 @@
 #include "cairo-renderer-pdf-out.h"
 #include "cairo-render-context.h"
 #include "cairo-renderer.h"
+#include "latex-text-renderer.h"
 #include <print.h>
 #include "extension/system.h"
 #include "extension/print.h"
@@ -33,6 +35,8 @@
 #include "sp-item.h"
 #include "sp-root.h"
 
+#include <2geom/matrix.h>
+
 namespace Inkscape {
 namespace Extension {
 namespace Internal {
@@ -48,7 +52,7 @@ CairoRendererPdfOutput::check (Inkscape::Extension::Extension * module)
 
 static bool
 pdf_render_document_to_file(SPDocument *doc, gchar const *filename, unsigned int level,
-                            bool texttopath, bool filtertobitmap, int resolution,
+                            bool texttopath, bool omittext, bool filtertobitmap, int resolution,
                             const gchar * const exportId, bool exportDrawing, bool exportCanvas)
 {
     sp_document_ensure_up_to_date(doc);
@@ -74,14 +78,16 @@ pdf_render_document_to_file(SPDocument *doc, gchar const *filename, unsigned int
     
     /* Create new arena */
     NRArena *arena = NRArena::create();
+    nr_arena_set_renderoffscreen (arena);
     unsigned dkey = sp_item_display_key_new(1);
-    NRArenaItem *root = sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY);
+    sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY);
 
     /* Create renderer and context */
     CairoRenderer *renderer = new CairoRenderer();
     CairoRenderContext *ctx = renderer->createContext();
     ctx->setPDFLevel(level);
     ctx->setTextToPath(texttopath);
+    renderer->_omitText = omittext;
     ctx->setFilterToBitmap(filtertobitmap);
     ctx->setBitmapResolution(resolution);
 
@@ -97,28 +103,26 @@ pdf_render_document_to_file(SPDocument *doc, gchar const *filename, unsigned int
 
     /* Release arena */
     sp_item_invoke_hide(base, dkey);
-    nr_arena_item_unref(root);
     nr_object_unref((NRObject *) arena);
-/* end */
+
     renderer->destroyContext(ctx);
     delete renderer;
 
     return ret;
 }
 
-
 /**
     \brief  This function calls the output module with the filename
     \param  mod   unused
     \param  doc   Document to be saved
-    \param  uri   Filename to save to (probably will end in .pdf)
+    \param  filename   Filename to save to (probably will end in .pdf)
 
     The most interesting thing that this function does is just attach
     an '>' on the front of the filename.  This is the syntax used to
     tell the printing system to save to file.
 */
 void
-CairoRendererPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gchar *uri)
+CairoRendererPdfOutput::save(Inkscape::Extension::Output *mod, SPDocument *doc, gchar const *filename)
 {
     Inkscape::Extension::Extension * ext;
     unsigned int ret;
@@ -135,7 +139,7 @@ CairoRendererPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc,
 //            level = 1;
     }
     catch(...) {
-//        g_warning("Parameter <PDFversion> might not exists");
+//        g_warning("Parameter <PDFversion> might not exist");
     }
 
     bool new_textToPath  = FALSE;
@@ -143,7 +147,15 @@ CairoRendererPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc,
         new_textToPath  = mod->get_param_bool("textToPath");
     }
     catch(...) {
-        g_warning("Parameter <textToPath> might not exists");
+        g_warning("Parameter <textToPath> might not exist");
+    }
+
+    bool new_textToLaTeX  = FALSE;
+    try {
+        new_textToLaTeX  = mod->get_param_bool("textToLaTeX");
+    }
+    catch(...) {
+        g_warning("Parameter <textToLaTeX> might not exist");
     }
 
     bool new_blurToBitmap  = FALSE;
@@ -151,7 +163,7 @@ CairoRendererPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc,
         new_blurToBitmap  = mod->get_param_bool("blurToBitmap");
     }
     catch(...) {
-        g_warning("Parameter <blurToBitmap> might not exists");
+        g_warning("Parameter <blurToBitmap> might not exist");
     }
 
     int new_bitmapResolution  = 72;
@@ -159,7 +171,7 @@ CairoRendererPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc,
         new_bitmapResolution = mod->get_param_int("resolution");
     }
     catch(...) {
-        g_warning("Parameter <resolution> might not exists");
+        g_warning("Parameter <resolution> might not exist");
     }
 
     const gchar *new_exportId = NULL;
@@ -167,36 +179,45 @@ CairoRendererPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc,
         new_exportId = mod->get_param_string("exportId");
     }
     catch(...) {
-        g_warning("Parameter <exportId> might not exists");
+        g_warning("Parameter <exportId> might not exist");
     }
 
     bool new_exportDrawing  = FALSE;
     try {
-        new_exportDrawing  = mod->get_param_bool("exportDrawing");
+        new_exportDrawing  = mod->get_param_bool("areaDrawing");
     }
     catch(...) {
-        g_warning("Parameter <exportDrawing> might not exists");
+        g_warning("Parameter <areaDrawing> might not exist");
     }
 
     bool new_exportCanvas  = FALSE;
     try {
-        new_exportCanvas  = mod->get_param_bool("exportCanvas");
+        new_exportCanvas  = mod->get_param_bool("areaPage");
     }
     catch(...) {
-        g_warning("Parameter <exportCanvas> might not exists");
+        g_warning("Parameter <exportCanvas> might not exist");
     }
 
-    gchar * final_name;
-    final_name = g_strdup_printf("> %s", uri);
-    ret = pdf_render_document_to_file(doc, final_name, level,
-                                      new_textToPath, new_blurToBitmap, new_bitmapResolution,
-                                      new_exportId, new_exportDrawing, new_exportCanvas);
-    g_free(final_name);
+    // Create PDF file
+    {
+        gchar * final_name;
+        final_name = g_strdup_printf("> %s", filename);
+        ret = pdf_render_document_to_file(doc, final_name, level,
+                                          new_textToPath, new_textToLaTeX, new_blurToBitmap, new_bitmapResolution,
+                                          new_exportId, new_exportDrawing, new_exportCanvas);
+        g_free(final_name);
+
+        if (!ret)
+            throw Inkscape::Extension::Output::save_failed();
+    }
 
-    if (!ret)
-        throw Inkscape::Extension::Output::save_failed();
+    // Create LaTeX file (if requested)
+    if (new_textToLaTeX) {
+        ret = latex_render_document_text_to_file(doc, filename, new_exportId, new_exportDrawing, new_exportCanvas, true);
 
-    return;
+        if (!ret)
+            throw Inkscape::Extension::Output::save_failed();
+    }
 }
 
 #include "clear-n_.h"
@@ -219,10 +240,11 @@ CairoRendererPdfOutput::init (void)
                                "<_item value='PDF14'>" N_("PDF 1.4") "</_item>\n"
                        "</param>\n"
                        "<param name=\"textToPath\" gui-text=\"" N_("Convert texts to paths") "\" type=\"boolean\">false</param>\n"
-                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert blur effects to bitmaps") "\" type=\"boolean\">false</param>\n"
-                       "<param name=\"resolution\" gui-text=\"" N_("Preferred resolution (DPI) of bitmaps") "\" type=\"int\" min=\"72\" max=\"2400\">90</param>\n"
-                       "<param name=\"exportDrawing\" gui-text=\"" N_("Export drawing, not page") "\" type=\"boolean\">false</param>\n"
-                       "<param name=\"exportCanvas\" gui-text=\"" N_("Export canvas") "\" type=\"boolean\">false</param>\n"
+                       "<param name=\"textToLaTeX\" gui-text=\"" N_("PDF+LaTeX: Omit text in PDF, and create LaTeX file") "\" type=\"boolean\">false</param>\n"
+                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Rasterize filter effects") "\" type=\"boolean\">true</param>\n"
+                       "<param name=\"resolution\" gui-text=\"" N_("Resolution for rasterization (dpi)") "\" type=\"int\" min=\"1\" max=\"10000\">90</param>\n"
+                       "<param name=\"areaDrawing\" gui-text=\"" N_("Export area is drawing") "\" type=\"boolean\">false</param>\n"
+                       "<param name=\"areaPage\" gui-text=\"" N_("Export area is page") "\" type=\"boolean\">false</param>\n"
                        "<param name=\"exportId\" gui-text=\"" N_("Limit export to the object with ID") "\" type=\"string\"></param>\n"
                        "<output>\n"
                                "<extension>.pdf</extension>\n"