Index: main/plugin-survey/i18n/messages_en.xml
===================================================================
--- main/plugin-survey/i18n/messages_en.xml	(revision 31097)
+++ main/plugin-survey/i18n/messages_en.xml	(working copy)
@@ -41,6 +41,7 @@
     <message key="PLUGINS_SURVEY_RIBBON_GROUP_DATA_LABEL">Survey user data</message>
    	<message key="PLUGINS_SURVEY_RIBBON_TAB_LIMITACCESS_LABEL">Invitations</message>
    	<message key="PLUGINS_SURVEY_RIBBON_TAB_LIMITACCESS_GROUP_ACTION_LABEL">Actions</message>
+   	<message key="PLUGINS_SURVEY_RIBBON_PRINT_LABEL">Print</message>
    	<message key="PLUGINS_SURVEY_RIBBON_AVANCED_LABEL">Advanced</message>
    	
    	<!-- Tool -->
@@ -385,4 +386,11 @@
 	<message key="PLUGINS_SURVEY_BRANCH_FINISH_START">the end of the survey</message>
 	<message key="PLUGINS_SURVEY_BRANCH_FINISH_END">.</message>
 	<message key="PLUGINS_SURVEY_BRANCH_PAGE_RULE_START">Go directly to </message>
+	
+	<!-- Print survey -->
+    <message key="PLUGINS_SURVEY_PRINT_SURVEY_LABEL">Print survey</message>
+    <message key="PLUGINS_SURVEY_PRINT_SURVEY_DESC">Click this button in order to print the currently open and selected survey.</message>
+    <message key="PLUGINS_SURVEY_PRINT_SURVEY_DISABLED_DESC">This button is deactivated because no survey is currently open or because your rights are insufficient.</message>
+    <message key="PLUGINS_SURVEY_PRINT_SURVEY_NOT_OPEN_DESC">This button is deactivated because no survey is currently open.</message>
+    <message key="PLUGINS_SURVEY_PRINT_SURVEY_NO_SELECTION_DESC">This button is deactivated because no survey is currently selected.</message>
 </catalogue>
Index: main/plugin-survey/i18n/messages_fr.xml
===================================================================
--- main/plugin-survey/i18n/messages_fr.xml	(revision 31097)
+++ main/plugin-survey/i18n/messages_fr.xml	(working copy)
@@ -41,6 +41,7 @@
    	<message key="PLUGINS_SURVEY_RIBBON_GROUP_DATA_LABEL">Données de l\'enquête</message>
    	<message key="PLUGINS_SURVEY_RIBBON_TAB_LIMITACCESS_LABEL">Invitations</message>
    	<message key="PLUGINS_SURVEY_RIBBON_TAB_LIMITACCESS_GROUP_ACTION_LABEL">Actions</message>
+    <message key="PLUGINS_SURVEY_RIBBON_PRINT_LABEL">Impression</message>
    	<message key="PLUGINS_SURVEY_RIBBON_AVANCED_LABEL">Avancé</message>
    	
    	<!-- Tool -->
@@ -384,4 +385,11 @@
 	<message key="PLUGINS_SURVEY_BRANCH_FINISH_START">à la fin de l'enquête</message>
 	<message key="PLUGINS_SURVEY_BRANCH_FINISH_END">.</message>
 	<message key="PLUGINS_SURVEY_BRANCH_PAGE_RULE_START">Allez directement </message>
+	
+	<!-- Print survey -->
+	<message key="PLUGINS_SURVEY_PRINT_SURVEY_LABEL">Imprimer l'enquête</message>
+	<message key="PLUGINS_SURVEY_PRINT_SURVEY_DESC">Cliquez sur ce bouton afin d'imprimer l'enquête actuellement ouverte et sélectionnée.</message>
+	<message key="PLUGINS_SURVEY_PRINT_SURVEY_DISABLED_DESC">Ce bouton est inactif car aucune enquête n'est actuellement ouverte ou que vos droits sont insuffisants.</message>
+	<message key="PLUGINS_SURVEY_PRINT_SURVEY_NOT_OPEN_DESC">Ce bouton est inactif car aucune enquête n'est actuellement ouverte.</message>
+	<message key="PLUGINS_SURVEY_PRINT_SURVEY_NO_SELECTION_DESC">Ce bouton est inactif car aucune enquête n'est actuellement sélectionnée.</message>
 </catalogue>
Index: main/plugin-survey/pages/preview.xsl
===================================================================
--- main/plugin-survey/pages/preview.xsl	(revision 31097)
+++ main/plugin-survey/pages/preview.xsl	(working copy)
@@ -72,7 +72,7 @@
                 	}
                 </script>
 
-  				<link type="text/css" href="{ametys:pluginResourceURL('survey', 'css/preview.css')}" rel="stylesheet" media="screen" />
+  				<link type="text/css" href="{ametys:pluginResourceURL('survey', 'css/preview.css')}" rel="stylesheet" media="print, screen" />
   				
   				<xsl:call-template name="head-scripts"/>
 			</head>
Index: main/plugin-survey/plugin.xml
===================================================================
--- main/plugin-survey/plugin.xml	(revision 31097)
+++ main/plugin-survey/plugin.xml	(working copy)
@@ -766,7 +766,6 @@
             </extension>
             
     	</extensions>
-    		
      </feature>
      
      <feature name="survey.limitaccess">
@@ -1031,4 +1030,33 @@
         </components>
     </feature>
     
+    <feature name="survey.print">
+        <extensions>
+            <extension id="org.ametys.survey.Print" 
+                       point="org.ametys.cms.workspace.ribbon.RibbonControlsManager" 
+                       class="org.ametys.plugins.survey.clientsideelement.SurveyClientSideElement">
+                <action class="org.ametys.survey.control.OpenSurveyActionButton">
+                    <param name="action">org.ametys.survey.Survey.print</param>
+                    <param name="target-type">^survey$</param>
+                    
+                    <param name="label" i18n="true">PLUGINS_SURVEY_PRINT_SURVEY_LABEL</param>
+                    <param name="default-description" i18n="true">PLUGINS_SURVEY_PRINT_SURVEY_DESC</param>
+                    
+                    <param name="disable-description" i18n="true">PLUGINS_SURVEY_PRINT_SURVEY_DISABLED_DESC</param>
+                    <param name="not-open-description" i18n="true">PLUGINS_SURVEY_PRINT_SURVEY_NOT_OPEN_DESC</param>
+                    <param name="no-selection-description" i18n="true">PLUGINS_SURVEY_PRINT_SURVEY_NO_SELECTION_DESC</param>
+                    
+                    <param name="icon-small" file="true">img/survey/print_16x16.png</param>
+                    <param name="icon-medium" file="true">img/survey/print_32x32.png</param>
+                    <param name="icon-large" file="true">img/survey/print_48x48.png</param>
+                </action>
+                <scripts>
+                    <file>js/org/ametys/survey/SurveyAction.i18n.js</file>
+                    <file>js/org/ametys/survey/control/OpenSurveyActionButton.js</file>
+                </scripts>
+                <right>Plugins_Survey_Right_Handle</right>
+            </extension>
+        </extensions>
+    </feature>
+    
 </plugin>
Index: main/plugin-survey/resources/css/preview.css
===================================================================
--- main/plugin-survey/resources/css/preview.css	(revision 31097)
+++ main/plugin-survey/resources/css/preview.css	(working copy)
@@ -206,4 +206,14 @@
 
 .selected {
 	background-color: rgba(230, 228, 242, 0.5);
+}
+
+@media print {
+	.survey .buttons {
+	   display: none !important;
+	}
+	
+	.survey div div {
+	   display: block !important;
+	}
 }
\ No newline at end of file
Index: main/plugin-survey/resources/js/org/ametys/survey/SurveyAction.i18n.js
===================================================================
--- main/plugin-survey/resources/js/org/ametys/survey/SurveyAction.i18n.js	(revision 31097)
+++ main/plugin-survey/resources/js/org/ametys/survey/SurveyAction.i18n.js	(working copy)
@@ -659,6 +659,34 @@
 	org.ametys.survey.Survey._export2HtmlBox.items.get(1).setValue(html);
 }
 
+/**
+ * Print the currently selected and open survey.
+ * @param {String} id The unique identifier of the button
+ * @param {Map} configuration The configuration of the control instance
+ * @param {String} pluginName The name of the plugin declaring this button
+ * @class This class implements the behavior for an action.
+ * @extends org.ametys.ribbon.control.RibbonControl
+ */
+org.ametys.survey.Survey.print = function(id, configuration, pluginName)
+{
+	var targets = org.ametys.ribbon.RibbonManager.getInstance().getCurrentSelectionTargets();
+    var target = org.ametys.messagebus.message.MessageTargetHelper.findFirst(targets, function(target) { return target.getType() == 'survey' });
+    
+    if (target == null)
+    {
+        return;
+    }
+    
+    var surveyPreviewTool = org.ametys.uitool.ToolsManager.getInstance().getTool ("survey-preview-" + target.getParameters().id);
+    if (surveyPreviewTool == null)
+	{
+    	return;
+	}
+    
+    var iFrameDom = Ext.getDom(surveyPreviewTool._iframeId);
+    iFrameDom.contentWindow.print();
+}
+
 //----------------------------------------------------------------------
 /**
  * Create a new page
Index: main/plugin-survey/resources/js/org/ametys/survey/control/OpenSurveyActionButton.js
===================================================================
--- main/plugin-survey/resources/js/org/ametys/survey/control/OpenSurveyActionButton.js	(revision 0)
+++ main/plugin-survey/resources/js/org/ametys/survey/control/OpenSurveyActionButton.js	(revision 0)
@@ -0,0 +1,69 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+Ext.namespace('org.ametys.survey.control');
+
+org.ametys.survey.control.OpenSurveyActionButton = function(id, configuration, pluginName)
+{
+	org.ametys.survey.control.OpenSurveyActionButton.superclass.constructor.call(this, id, configuration, pluginName);
+}
+
+Ext.extend(org.ametys.survey.control.OpenSurveyActionButton, org.ametys.ribbon.control.button.ActionSelectionButton, {});
+
+org.ametys.survey.control.OpenSurveyActionButton.prototype.onMessage = function(messages)
+{
+	for (var i=0; i < messages.length; i++)
+    {
+        if (messages[i].getType().getName() == org.ametys.ribbon.RibbonManager.EVENTTYPE_SELECTIONCHANGED)
+        {
+            var targets = messages[i].getTargets();
+            var target = org.ametys.messagebus.message.MessageTargetHelper.findFirst(targets, this._testTarget.createDelegate(this));
+            
+            if (target != null)
+            {
+                var toolOpened = org.ametys.uitool.ToolsManager.getInstance().getTool ("survey-preview-" + target.getParameters().id) != null;
+                this.getElements().each(function(element) { element.setDisabled(!toolOpened); })
+                if (!toolOpened)
+                {
+                    var text = this._getTooltip(this.getConfiguration()["not-open-description"]);
+                    this.updateTooltip(text, null, null);
+                }
+                else
+                {
+                    this.updateTooltip(this.getConfiguration()["default-description"], null, null);
+                }
+                
+            }
+            else
+            {
+                var text = this._getTooltip(this.getConfiguration()["no-selection-description"]);
+                this.updateTooltip(text, null, null);
+                this.getElements().each(function(element) { element.disable(); })
+            }
+        }
+    }
+}
+
+org.ametys.survey.control.OpenSurveyActionButton.prototype._getTooltip = function (addedText)
+{
+    var tooltip = this.getConfiguration()["default-description"];
+    if (addedText != null && addedText.length > 0)
+    {
+        tooltip += "<br/><br/>";
+        tooltip += addedText;
+    }
+    return tooltip;
+}
