[enhancement] Set print font from Setup > Print Settings or set it for each Print Formatversion-14
@@ -162,4 +162,4 @@ def load_print(bootinfo, doclist): | |||||
load_print_css(bootinfo, print_settings) | load_print_css(bootinfo, print_settings) | ||||
def load_print_css(bootinfo, print_settings): | def load_print_css(bootinfo, print_settings): | ||||
bootinfo.print_css = frappe.get_attr("frappe.templates.pages.print.get_print_style")(print_settings.print_style or "Modern") | |||||
bootinfo.print_css = frappe.get_attr("frappe.templates.pages.print.get_print_style")(print_settings.print_style or "Modern", for_legacy=True) |
@@ -0,0 +1 @@ | |||||
- Change print font from Setup > Print Settings or set it for each Print Format. Font options are "Default", "Arial", "Helvetica", "Verdana", "Monospace". |
@@ -12,7 +12,6 @@ def get(name): | |||||
""" | """ | ||||
page = frappe.get_doc('Page', name) | page = frappe.get_doc('Page', name) | ||||
if page.is_permitted(): | if page.is_permitted(): | ||||
print "here" | |||||
page.load_assets() | page.load_assets() | ||||
return page | return page | ||||
else: | else: | ||||
@@ -19,12 +19,10 @@ | |||||
"search_index": 0 | "search_index": 0 | ||||
}, | }, | ||||
{ | { | ||||
"depends_on": "eval:!doc.custom_format", | |||||
"fieldname": "edit_format", | |||||
"fieldtype": "Button", | |||||
"label": "Edit Format", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
"fieldname": "disabled", | |||||
"fieldtype": "Check", | |||||
"label": "Disabled", | |||||
"permlevel": 0 | |||||
}, | }, | ||||
{ | { | ||||
"fieldname": "column_break_3", | "fieldname": "column_break_3", | ||||
@@ -52,23 +50,18 @@ | |||||
"search_index": 1 | "search_index": 1 | ||||
}, | }, | ||||
{ | { | ||||
"fieldname": "disabled", | |||||
"fieldname": "custom_format", | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"label": "Disabled", | |||||
"permlevel": 0 | |||||
"label": "Custom Format", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
}, | }, | ||||
{ | { | ||||
"depends_on": "custom_format", | |||||
"fieldname": "section_break_6", | "fieldname": "section_break_6", | ||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"permlevel": 0 | "permlevel": 0 | ||||
}, | }, | ||||
{ | |||||
"fieldname": "custom_format", | |||||
"fieldtype": "Check", | |||||
"label": "Custom Format", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
}, | |||||
{ | { | ||||
"default": "Server", | "default": "Server", | ||||
"depends_on": "custom_format", | "depends_on": "custom_format", | ||||
@@ -99,6 +92,44 @@ | |||||
"reqd": 0, | "reqd": 0, | ||||
"search_index": 0 | "search_index": 0 | ||||
}, | }, | ||||
{ | |||||
"depends_on": "eval:!doc.custom_format", | |||||
"fieldname": "section_break_9", | |||||
"fieldtype": "Section Break", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
}, | |||||
{ | |||||
"depends_on": "eval:!doc.custom_format", | |||||
"fieldname": "edit_format", | |||||
"fieldtype": "Button", | |||||
"label": "Edit Format", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
}, | |||||
{ | |||||
"fieldname": "column_break_11", | |||||
"fieldtype": "Column Break", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
}, | |||||
{ | |||||
"default": "Default", | |||||
"depends_on": "eval:!doc.custom_format", | |||||
"fieldname": "font", | |||||
"fieldtype": "Select", | |||||
"label": "Font", | |||||
"options": "Default\nArial\nHelvetica\nVerdana\nMonospace", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
}, | |||||
{ | |||||
"depends_on": "custom_format", | |||||
"fieldname": "section_break_13", | |||||
"fieldtype": "Section Break", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
}, | |||||
{ | { | ||||
"depends_on": "custom_format", | "depends_on": "custom_format", | ||||
"fieldname": "print_format_help", | "fieldname": "print_format_help", | ||||
@@ -134,7 +165,7 @@ | |||||
"issingle": 0, | "issingle": 0, | ||||
"istable": 0, | "istable": 0, | ||||
"max_attachments": 0, | "max_attachments": 0, | ||||
"modified": "2015-02-05 05:11:42.667447", | |||||
"modified": "2015-07-15 08:01:06.284031", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Print", | "module": "Print", | ||||
"name": "Print Format", | "name": "Print Format", | ||||
@@ -42,9 +42,13 @@ | |||||
"permlevel": 0 | "permlevel": 0 | ||||
}, | }, | ||||
{ | { | ||||
"fieldname": "column_break_6", | |||||
"fieldtype": "Column Break", | |||||
"permlevel": 0 | |||||
"default": "Default", | |||||
"fieldname": "font", | |||||
"fieldtype": "Select", | |||||
"label": "Font", | |||||
"options": "Default\nArial\nHelvetica\nVerdana\nMonospace", | |||||
"permlevel": 0, | |||||
"precision": "" | |||||
}, | }, | ||||
{ | { | ||||
"description": "In points. Default is 9.", | "description": "In points. Default is 9.", | ||||
@@ -53,6 +57,11 @@ | |||||
"label": "Font Size", | "label": "Font Size", | ||||
"permlevel": 0 | "permlevel": 0 | ||||
}, | }, | ||||
{ | |||||
"fieldname": "column_break_6", | |||||
"fieldtype": "Column Break", | |||||
"permlevel": 0 | |||||
}, | |||||
{ | { | ||||
"default": "1", | "default": "1", | ||||
"description": "Print with Letterhead, unless unchecked in a particular Document", | "description": "Print with Letterhead, unless unchecked in a particular Document", | ||||
@@ -76,7 +85,7 @@ | |||||
], | ], | ||||
"icon": "icon-cog", | "icon": "icon-cog", | ||||
"issingle": 1, | "issingle": 1, | ||||
"modified": "2015-03-25 07:10:38.893958", | |||||
"modified": "2015-07-15 08:03:23.743143", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Print", | "module": "Print", | ||||
"name": "Print Settings", | "name": "Print Settings", | ||||
@@ -24,10 +24,20 @@ frappe.dom = { | |||||
// execute the script globally | // execute the script globally | ||||
document.getElementsByTagName('head')[0].appendChild(el); | document.getElementsByTagName('head')[0].appendChild(el); | ||||
}, | }, | ||||
set_style: function(txt) { | |||||
set_style: function(txt, id) { | |||||
if(!txt) return; | if(!txt) return; | ||||
var se = document.createElement('style'); | var se = document.createElement('style'); | ||||
se.type = "text/css"; | se.type = "text/css"; | ||||
if (id) { | |||||
var element = document.getElementById(id); | |||||
if (element) { | |||||
element.parentNode.removeChild(element); | |||||
} | |||||
se.id = id; | |||||
} | |||||
if (se.styleSheet) { | if (se.styleSheet) { | ||||
se.styleSheet.cssText = txt; | se.styleSheet.cssText = txt; | ||||
} else { | } else { | ||||
@@ -30,6 +30,7 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
.on("change", function() { | .on("change", function() { | ||||
if(me.is_old_style()) { | if(me.is_old_style()) { | ||||
me.wrapper.find(".btn-download-pdf").toggle(false); | me.wrapper.find(".btn-download-pdf").toggle(false); | ||||
me.set_style(); | |||||
me.preview_old_style(); | me.preview_old_style(); | ||||
} else { | } else { | ||||
me.wrapper.find(".btn-download-pdf").toggle(true); | me.wrapper.find(".btn-download-pdf").toggle(true); | ||||
@@ -91,8 +92,9 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
}, | }, | ||||
preview: function() { | preview: function() { | ||||
var me = this; | var me = this; | ||||
this.get_print_html(function(html) { | |||||
me.wrapper.find(".print-format").html(html); | |||||
this.get_print_html(function(out) { | |||||
me.wrapper.find(".print-format").html(out.html); | |||||
me.set_style(out.style); | |||||
}); | }); | ||||
}, | }, | ||||
printit: function() { | printit: function() { | ||||
@@ -100,21 +102,19 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
}, | }, | ||||
new_page_preview: function(printit) { | new_page_preview: function(printit) { | ||||
var me = this; | var me = this; | ||||
this.get_print_html(function(html) { | |||||
var w = window.open("/print?" | |||||
+"doctype="+encodeURIComponent(me.frm.doc.doctype) | |||||
+"&name="+encodeURIComponent(me.frm.doc.name) | |||||
+(printit ? "&trigger_print=1" : "") | |||||
+"&format="+me.selected_format() | |||||
+"&no_letterhead="+(me.with_letterhead() ? "0" : "1")); | |||||
if(!w) { | |||||
msgprint(__("Please enable pop-ups")); return; | |||||
} | |||||
}); | |||||
var w = window.open("/print?" | |||||
+"doctype="+encodeURIComponent(me.frm.doc.doctype) | |||||
+"&name="+encodeURIComponent(me.frm.doc.name) | |||||
+(printit ? "&trigger_print=1" : "") | |||||
+"&format="+me.selected_format() | |||||
+"&no_letterhead="+(me.with_letterhead() ? "0" : "1")); | |||||
if(!w) { | |||||
msgprint(__("Please enable pop-ups")); return; | |||||
} | |||||
}, | }, | ||||
get_print_html: function(callback) { | get_print_html: function(callback) { | ||||
frappe.call({ | frappe.call({ | ||||
method: "frappe.templates.pages.print.get_html", | |||||
method: "frappe.templates.pages.print.get_html_and_style", | |||||
args: { | args: { | ||||
doc: this.frm.doc, | doc: this.frm.doc, | ||||
print_format: this.selected_format(), | print_format: this.selected_format(), | ||||
@@ -181,5 +181,8 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
}, | }, | ||||
with_letterhead: function() { | with_letterhead: function() { | ||||
return this.print_letterhead.is(":checked") ? 1 : 0; | return this.print_letterhead.is(":checked") ? 1 : 0; | ||||
}, | |||||
set_style: function(style) { | |||||
frappe.dom.set_style(style || frappe.boot.print_css, "print-style"); | |||||
} | } | ||||
}) | }) |
@@ -1,7 +1,7 @@ | |||||
{% set doc = frappe.get_doc(doc) %} | {% set doc = frappe.get_doc(doc) %} | ||||
{% set subject = doc.get(meta.title_field or "name") %} | {% set subject = doc.get(meta.title_field or "name") %} | ||||
{% set route = ((is_web_form is defined and is_web_form and "{0}?name={1}".format(pathname, doc.name)) | {% set route = ((is_web_form is defined and is_web_form and "{0}?name={1}".format(pathname, doc.name)) | ||||
or (doc.get("get_route") and doc.get_route()) | |||||
or (doc.get_route and doc.get_route()) | |||||
or "{0}/{1}".format(pathname or doc.doctype, doc.name)) %} | or "{0}/{1}".format(pathname or doc.doctype, doc.name)) %} | ||||
<div class="web-list-item"> | <div class="web-list-item"> | ||||
<a class="no-decoration" href="/{{ route }}" no-pjax> | <a class="no-decoration" href="/{{ route }}" no-pjax> | ||||
@@ -34,12 +34,11 @@ def get_context(context): | |||||
return { | return { | ||||
"body": get_html(doc, print_format = frappe.form_dict.format, | "body": get_html(doc, print_format = frappe.form_dict.format, | ||||
meta=meta, trigger_print = frappe.form_dict.trigger_print, no_letterhead=frappe.form_dict.no_letterhead), | meta=meta, trigger_print = frappe.form_dict.trigger_print, no_letterhead=frappe.form_dict.no_letterhead), | ||||
"css": get_print_style(frappe.form_dict.style), | |||||
"css": get_print_style(frappe.form_dict.style, frappe.form_dict.format), | |||||
"comment": frappe.session.user, | "comment": frappe.session.user, | ||||
"title": doc.get(meta.title_field) if meta.title_field else doc.name | "title": doc.get(meta.title_field) if meta.title_field else doc.name | ||||
} | } | ||||
@frappe.whitelist() | |||||
def get_html(doc, name=None, print_format=None, meta=None, | def get_html(doc, name=None, print_format=None, meta=None, | ||||
no_letterhead=None, trigger_print=False): | no_letterhead=None, trigger_print=False): | ||||
@@ -108,6 +107,15 @@ def get_html(doc, name=None, print_format=None, meta=None, | |||||
return html | return html | ||||
@frappe.whitelist() | |||||
def get_html_and_style(doc, name=None, print_format=None, meta=None, | |||||
no_letterhead=None, trigger_print=False): | |||||
return { | |||||
"html": get_html(doc, name=name, print_format=print_format, meta=meta, | |||||
no_letterhead=no_letterhead, trigger_print=trigger_print), | |||||
"style": get_print_style(print_format=print_format) | |||||
} | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def download_pdf(doctype, name, format=None): | def download_pdf(doctype, name, format=None): | ||||
html = frappe.get_print(doctype, name, format) | html = frappe.get_print(doctype, name, format) | ||||
@@ -241,13 +249,17 @@ def has_value(df, doc): | |||||
return True | return True | ||||
def get_print_style(style=None): | |||||
def get_print_style(style=None, print_format=None, for_legacy=False): | |||||
print_settings = frappe.get_doc("Print Settings") | print_settings = frappe.get_doc("Print Settings") | ||||
if not style: | if not style: | ||||
style = print_settings.print_style or "Standard" | style = print_settings.print_style or "Standard" | ||||
context = {"print_settings": print_settings, "print_style": style} | |||||
context = { | |||||
"print_settings": print_settings, | |||||
"print_style": style, | |||||
"font": get_font(print_settings, print_format, for_legacy) | |||||
} | |||||
css = frappe.get_template("templates/styles/standard.css").render(context) | css = frappe.get_template("templates/styles/standard.css").render(context) | ||||
@@ -265,6 +277,26 @@ def get_print_style(style=None): | |||||
return css | return css | ||||
def get_font(print_settings, print_format=None, for_legacy=False): | |||||
default = '"Helvetica Neue", Helvetica, Arial, "Open Sans", sans-serif' | |||||
if for_legacy: | |||||
return default | |||||
font = None | |||||
if print_format and print_format not in ("Standard", standard_format): | |||||
print_format = frappe.get_doc("Print Format", print_format) | |||||
if print_format.font and print_format.font!="Default": | |||||
font = '{0}, sans-serif'.format(print_format.font) | |||||
if not font: | |||||
if print_settings.font and print_settings.font!="Default": | |||||
font = '{0}, sans-serif'.format(print_settings.font) | |||||
else: | |||||
font = default | |||||
return font | |||||
def get_visible_columns(data, table_meta, df): | def get_visible_columns(data, table_meta, df): | ||||
"""Returns list of visible columns based on print_hide and if all columns have value.""" | """Returns list of visible columns based on print_hide and if all columns have value.""" | ||||
columns = [] | columns = [] | ||||
@@ -39,8 +39,8 @@ | |||||
} | } | ||||
.print-format { | .print-format { | ||||
font-size: 9pt; | |||||
font-family: "Helvetica Neue", Helvetica, Arial, "Open Sans", sans-serif; | |||||
font-size: {{ print_settings.font_size|flt or 9 }}pt; | |||||
font-family: {{ font }}; | |||||
-webkit-print-color-adjust:exact; | -webkit-print-color-adjust:exact; | ||||
} | } | ||||
@@ -85,7 +85,3 @@ table.no-border, table.no-border td { | |||||
.print-format p { | .print-format p { | ||||
margin: 3px 0px 3px; | margin: 3px 0px 3px; | ||||
} | } | ||||
.print-format { | |||||
font-size: {{ print_settings.font_size|flt or 9 }}pt; | |||||
} |