diff -r 6b358e197d08 modules/org.openbravo.client.application/src/org/openbravo/client/application/report/ReportingUtils.java
--- a/modules/org.openbravo.client.application/src/org/openbravo/client/application/report/ReportingUtils.java	Thu Sep 24 09:51:56 2015 +0200
+++ b/modules/org.openbravo.client.application/src/org/openbravo/client/application/report/ReportingUtils.java	Thu Sep 24 16:22:39 2015 +0200
@@ -100,6 +100,10 @@
    * Used to set the parameter with the URI to retrieve images in HTML reports.
    */
   public static final String IMAGES_URI = "Images URI";
+  /**
+   * Used to set Javascript content inside a PDF report.
+   */
+  public static final String PDF_JAVASCRIPT = "PDF Javascript";
 
   private static final double TEXT_CHAR_HEIGHT = 10;
   private static final double TEXT_CHAR_WIDTH = 10;
@@ -377,7 +381,7 @@
       saveHTMLReportToOutputStream(jasperPrint, exportParameters, outputStream);
       break;
     case PDF:
-      JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
+      savePDFReportToOutputStream(jasperPrint, exportParameters, outputStream);
       break;
     case TXT:
       saveTxtReportToOutputStream(jasperPrint, outputStream);
@@ -493,6 +497,40 @@
   }
 
   /**
+   * Generates a PDF report from a pre-compiled report and returns it into an output stream.
+   * 
+   * @param jasperPrint
+   *          JasperPrint object which contains a compiled report.
+   * @param exportParameters
+   *          Export parameters than can be added to configure the resulting report.
+   * @param outputStream
+   *          The output stream used to return the report.
+   * @throws JRException
+   *           In case there is any error generating the report an exception is thrown with the
+   *           error message.
+   */
+  public static void savePDFReportToOutputStream(JasperPrint jasperPrint,
+      Map<Object, Object> exportParameters, OutputStream outputStream) throws JRException {
+    if (exportParameters != null && exportParameters.size() > 0) {
+      final JRPdfExporter exporter = new JRPdfExporter();
+      SimpleExporterInput exporterInput = new SimpleExporterInput(jasperPrint);
+      SimpleOutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(
+          outputStream);
+      SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
+      String jsContent = (String) exportParameters.get(PDF_JAVASCRIPT);
+      if (jsContent != null) {
+        configuration.setPdfJavaScript(jsContent);
+      }
+      exporter.setExporterInput(exporterInput);
+      exporter.setExporterOutput(exporterOutput);
+      exporter.setConfiguration(configuration);
+      exporter.exportReport();
+    } else {
+      JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
+    }
+  }
+
+  /**
    * Generates an XLS report from a pre-compiled report and returns it into a file.
    * 
    * @param jasperPrint
@@ -1089,6 +1127,15 @@
   }
 
   /**
+   * @see ReportingUtils#concatPDFReport(List<JasperPrint>, boolean, OutputStream,
+   *      SimplePdfExporterConfiguration)
+   */
+  public static void concatPDFReport(List<JasperPrint> jasperPrintList, boolean createBookmarks,
+      OutputStream outputStream) throws JRException {
+    concatPDFReport(jasperPrintList, createBookmarks, outputStream, null);
+  }
+
+  /**
    * Returns a PDF file into an output stream as result of the concatenation of the JasperPrint
    * objects list passed as parameter.
    * 
@@ -1099,20 +1146,24 @@
    *          each individual document that was part of the initial document list.
    * @param outputStream
    *          The output stream used for returning the report.
+   * @param reportConfiguration
+   *          An optional configuration for the report.
    * @throws JRException
    *           In case there is any error compiling the report an exception is thrown with the error
    *           message.
    */
   public static void concatPDFReport(List<JasperPrint> jasperPrintList, boolean createBookmarks,
-      OutputStream outputStream) throws JRException {
+      OutputStream outputStream, SimplePdfExporterConfiguration reportConfiguration)
+      throws JRException {
 
     JRPdfExporter exporter = new JRPdfExporter();
     SimpleOutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(
         outputStream);
-    SimplePdfExporterConfiguration reportConfiguration = new SimplePdfExporterConfiguration();
+    SimplePdfExporterConfiguration configuration = reportConfiguration != null ? reportConfiguration
+        : new SimplePdfExporterConfiguration();
 
     reportConfiguration.setCreatingBatchModeBookmarks(createBookmarks);
-    exporter.setConfiguration(reportConfiguration);
+    exporter.setConfiguration(configuration);
     exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
     exporter.setExporterOutput(exporterOutput);
 
diff -r 6b358e197d08 src-db/database/sourcedata/AD_REF_LIST.xml
--- a/src-db/database/sourcedata/AD_REF_LIST.xml	Thu Sep 24 09:51:56 2015 +0200
+++ b/src-db/database/sourcedata/AD_REF_LIST.xml	Thu Sep 24 16:22:39 2015 +0200
@@ -10136,6 +10136,18 @@
 <!--7D10DB31B24A4ACAA68FAB36DA3F82FB-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
 <!--7D10DB31B24A4ACAA68FAB36DA3F82FB--></AD_REF_LIST>
 
+<!--7E046B84F9B544DD8862F3328FFA73D5--><AD_REF_LIST>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <AD_REF_LIST_ID><![CDATA[7E046B84F9B544DD8862F3328FFA73D5]]></AD_REF_LIST_ID>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <VALUE><![CDATA[AttachByDefault]]></VALUE>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <NAME><![CDATA[Attach By Default]]></NAME>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <DESCRIPTION><![CDATA[This preference allows to hide the standard attachments confirm dialog]]></DESCRIPTION>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <AD_REFERENCE_ID><![CDATA[A26BA480E2014707B47257024C3CBFF7]]></AD_REFERENCE_ID>
+<!--7E046B84F9B544DD8862F3328FFA73D5-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--7E046B84F9B544DD8862F3328FFA73D5--></AD_REF_LIST>
+
 <!--7E67333C2FC749B780E70A8DF91891AF--><AD_REF_LIST>
 <!--7E67333C2FC749B780E70A8DF91891AF-->  <AD_REF_LIST_ID><![CDATA[7E67333C2FC749B780E70A8DF91891AF]]></AD_REF_LIST_ID>
 <!--7E67333C2FC749B780E70A8DF91891AF-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -10570,6 +10582,18 @@
 <!--8E2E3976B54A46D58752619DDA78E35E-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
 <!--8E2E3976B54A46D58752619DDA78E35E--></AD_REF_LIST>
 
+<!--8F1D00DF0B9A4F729C3468088AE984B5--><AD_REF_LIST>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <AD_REF_LIST_ID><![CDATA[8F1D00DF0B9A4F729C3468088AE984B5]]></AD_REF_LIST_ID>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <VALUE><![CDATA[DirectPrint]]></VALUE>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <NAME><![CDATA[Direct Print]]></NAME>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <DESCRIPTION><![CDATA[This property allows to show directly the standard printers dialog of the web browser]]></DESCRIPTION>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <AD_REFERENCE_ID><![CDATA[A26BA480E2014707B47257024C3CBFF7]]></AD_REFERENCE_ID>
+<!--8F1D00DF0B9A4F729C3468088AE984B5-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--8F1D00DF0B9A4F729C3468088AE984B5--></AD_REF_LIST>
+
 <!--8F3A063A37CA4FFD8CD13D9CEE135085--><AD_REF_LIST>
 <!--8F3A063A37CA4FFD8CD13D9CEE135085-->  <AD_REF_LIST_ID><![CDATA[8F3A063A37CA4FFD8CD13D9CEE135085]]></AD_REF_LIST_ID>
 <!--8F3A063A37CA4FFD8CD13D9CEE135085-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r 6b358e197d08 src/index.jsp
--- a/src/index.jsp	Thu Sep 24 09:51:56 2015 +0200
+++ b/src/index.jsp	Thu Sep 24 16:22:39 2015 +0200
@@ -221,7 +221,7 @@
 <script src="./web/org.openbravo.userinterface.smartclient/isomorphic/ISC_Combined<%=(uncompSC ? ".uncompressed" : "")%>.js"></script>
 <script src="./web/org.openbravo.userinterface.smartclient/isomorphic/ISC_History<%=(uncompSC ? ".uncompressed" : "")%>.js"></script>
 <script src="./org.openbravo.client.kernel/OBCLKER_Kernel/StaticResources?_appName=OB3&_skinVersion=Default"></script>
-<iframe name="background_target" id="background_target" height="0" width="0" style="display:none;"></iframe>
+<iframe name="background_target" id="background_target" height="0" width="0"></iframe>
 <form name="OBGlobalHiddenForm" method="post" action="blank.html" target="background_target">
 </form>
 </body>
diff -r 6b358e197d08 src/org/openbravo/erpCommon/businessUtility/PrinterReports.java
--- a/src/org/openbravo/erpCommon/businessUtility/PrinterReports.java	Thu Sep 24 09:51:56 2015 +0200
+++ b/src/org/openbravo/erpCommon/businessUtility/PrinterReports.java	Thu Sep 24 16:22:39 2015 +0200
@@ -29,7 +29,11 @@
 import org.openbravo.base.filter.IsIDFilter;
 import org.openbravo.base.secureApp.HttpSecureAppServlet;
 import org.openbravo.base.secureApp.VariablesSecureApp;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBDal;
 import org.openbravo.data.Sqlc;
+import org.openbravo.erpCommon.utility.PropertyException;
+import org.openbravo.model.ad.ui.Window;
 import org.openbravo.utils.FormatUtilities;
 import org.openbravo.xmlEngine.XmlDocument;
 
@@ -57,12 +61,14 @@
       String strHiddenValue = vars.getGlobalVariable("inphiddenvalue", strWindowId + "|"
           + strKeyColumnId);
       String strIsDirectPDF = vars.getStringParameter("inpIsDirectPDF");
+      Window window = OBDal.getInstance().get(Window.class, strWindowId);
+      String directAttachPref = isDirectAttach(OBContext.getOBContext(), window);
       if (strIsDirectPDF == null || "".equals(strIsDirectPDF)) {
-        strIsDirectPDF = "false";
+        strIsDirectPDF = "N".equals(directAttachPref) ? "true" : "false";
       }
       String strIsDirectAttach = vars.getStringParameter("inpIsDirectAttach");
       if (strIsDirectAttach == null || "".equals(strIsDirectAttach)) {
-        strIsDirectAttach = "false";
+        strIsDirectAttach = "Y".equals(directAttachPref) ? "true" : "false";
       }
 
       printPage(response, vars, strDirectPrint, strPDFPath, strHiddenKey, strHiddenValue, inptabId,
@@ -135,4 +141,16 @@
     }
     return quoted.toString();
   }
+
+  private String isDirectAttach(OBContext context, Window window) {
+    String preferenceValue;
+    try {
+      preferenceValue = Preferences.getPreferenceValue("AttachByDefault", true,
+          context.getCurrentClient(), context.getCurrentOrganization(), context.getUser(),
+          context.getRole(), window);
+    } catch (PropertyException e) {
+      return "";
+    }
+    return preferenceValue;
+  }
 }
diff -r 6b358e197d08 src/org/openbravo/erpCommon/utility/reporting/printing/PrintController.java
--- a/src/org/openbravo/erpCommon/utility/reporting/printing/PrintController.java	Thu Sep 24 09:51:56 2015 +0200
+++ b/src/org/openbravo/erpCommon/utility/reporting/printing/PrintController.java	Thu Sep 24 16:22:39 2015 +0200
@@ -40,6 +40,7 @@
 
 import net.sf.jasperreports.engine.JRException;
 import net.sf.jasperreports.engine.JasperPrint;
+import net.sf.jasperreports.export.SimplePdfExporterConfiguration;
 
 import org.apache.commons.fileupload.FileItem;
 import org.codehaus.jettison.json.JSONException;
@@ -54,8 +55,10 @@
 import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.email.EmailUtils;
+import org.openbravo.erpCommon.businessUtility.Preferences;
 import org.openbravo.erpCommon.utility.BasicUtility;
 import org.openbravo.erpCommon.utility.OBError;
+import org.openbravo.erpCommon.utility.PropertyException;
 import org.openbravo.erpCommon.utility.SequenceIdData;
 import org.openbravo.erpCommon.utility.Utility;
 import org.openbravo.erpCommon.utility.poc.EmailManager;
@@ -70,6 +73,7 @@
 import org.openbravo.erpCommon.utility.reporting.TemplateInfo.EmailDefinition;
 import org.openbravo.exception.NoConnectionAvailableException;
 import org.openbravo.model.ad.system.Language;
+import org.openbravo.model.ad.ui.Tab;
 import org.openbravo.model.common.businesspartner.BusinessPartner;
 import org.openbravo.model.common.enterprise.EmailServerConfiguration;
 import org.openbravo.model.common.enterprise.EmailTemplate;
@@ -224,7 +228,7 @@
             reportManager.saveTempReport(report, vars);
           }
         }
-        printReports(response, jrPrintReports, savedReports);
+        printReports(response, jrPrintReports, savedReports, isDirectPrint(vars));
       } else if (vars.commandIn("ARCHIVE")) {
         // Order documents by Document No.
         if (multiReports)
@@ -253,7 +257,7 @@
           reportManager.saveTempReport(report, vars);
           savedReports.add(report);
         }
-        printReports(response, jrPrintReports, savedReports);
+        printReports(response, jrPrintReports, savedReports, isDirectPrint(vars));
       } else {
         if (vars.commandIn("DEFAULT")) {
 
@@ -468,9 +472,10 @@
   }
 
   public void printReports(HttpServletResponse response, Collection<JasperPrint> jrPrintReports,
-      Collection<Report> reports) {
+      Collection<Report> reports, boolean directPrint) {
     ServletOutputStream os = null;
     String filename = "";
+    Map<Object, Object> parameters = new HashMap<Object, Object>();
     try {
       os = response.getOutputStream();
       response.setContentType("application/pdf");
@@ -479,12 +484,16 @@
         for (Report report : reports) {
           filename = report.getFilename();
         }
-        response.setHeader("Content-disposition", "attachment" + "; filename=" + filename);
+        if (!directPrint) {
+          response.setHeader("Content-disposition", "attachment" + "; filename=" + filename);
+        } else {
+          parameters.put(ReportingUtils.PDF_JAVASCRIPT, "this.print();");
+        }
         for (JasperPrint jasperPrint : jrPrintReports) {
-          ReportingUtils.saveReport(jasperPrint, ExportType.PDF, null, os);
+          ReportingUtils.saveReport(jasperPrint, ExportType.PDF, parameters, os);
         }
       } else {
-        concatReport(reports.toArray(new Report[] {}), jrPrintReports, response);
+        concatReport(reports.toArray(new Report[] {}), jrPrintReports, response, directPrint);
       }
       for (Report report : reports) {
         switch (report.getDocumentType()) {
@@ -523,11 +532,17 @@
     }
   }
 
+  public void printReports(HttpServletResponse response, Collection<JasperPrint> jrPrintReports,
+      Collection<Report> reports) {
+    printReports(response, jrPrintReports, reports, false);
+  }
+
   private void concatReport(Report[] reports, Collection<JasperPrint> jrPrintReports,
-      HttpServletResponse response) {
+      HttpServletResponse response, boolean directPrint) {
     try {
       String filename = "";
       boolean createBookmarks = true;
+      SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
       if (reports.length == 1) {
         filename = reports[0].getFilename();
         createBookmarks = false;
@@ -539,9 +554,13 @@
         filename = filename.replaceAll("-", "");
         filename = filename + ".pdf";
       }
-      response.setHeader("Content-disposition", "attachment" + "; filename=" + filename);
+      if (!directPrint) {
+        response.setHeader("Content-disposition", "attachment" + "; filename=" + filename);
+      } else {
+        configuration.setPdfJavaScript("this.print();");
+      }
       ReportingUtils.concatPDFReport(new ArrayList<JasperPrint>(jrPrintReports), createBookmarks,
-          response.getOutputStream());
+          response.getOutputStream(), configuration);
     } catch (Exception e) {
       log4j.error(e);
     }
@@ -1453,6 +1472,26 @@
     return documentIdsOrdered;
   }
 
+  private boolean isDirectPrint(VariablesSecureApp vars) {
+    OBContext context = OBContext.getOBContext();
+    String preferenceValue = "";
+    try {
+      OBContext.setAdminMode(true);
+      String tabId = vars.getSessionValue("inpTabId");
+      Tab tab = OBDal.getInstance().get(Tab.class, tabId);
+      try {
+        preferenceValue = Preferences.getPreferenceValue("DirectPrint", true,
+            context.getCurrentClient(), context.getCurrentOrganization(), context.getUser(),
+            context.getRole(), tab.getWindow());
+      } catch (PropertyException e) {
+        return false;
+      }
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+    return "Y".equals(preferenceValue);
+  }
+
   @Override
   public String getServletInfo() {
     return "Servlet that processes the print action";
