瀏覽代碼

Merge pull request #1200 from anandpdoshi/anand-july-16

[enhancement] Set print font from Setup > Print Settings or set it for each Print Format
version-14
Anand Doshi 10 年之前
父節點
當前提交
f17660ea1c
共有 10 個文件被更改,包括 130 次插入49 次删除
  1. +1
    -1
      frappe/boot.py
  2. +1
    -0
      frappe/change_log/current/fonts_in_print.md
  3. +0
    -1
      frappe/desk/desk_page.py
  4. +48
    -17
      frappe/print/doctype/print_format/print_format.json
  5. +13
    -4
      frappe/print/doctype/print_settings/print_settings.json
  6. +11
    -1
      frappe/public/js/frappe/dom.js
  7. +17
    -14
      frappe/public/js/frappe/form/print.js
  8. +1
    -1
      frappe/templates/includes/list/row_template.html
  9. +36
    -4
      frappe/templates/pages/print.py
  10. +2
    -6
      frappe/templates/styles/standard.css

+ 1
- 1
frappe/boot.py 查看文件

@@ -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)

+ 1
- 0
frappe/change_log/current/fonts_in_print.md 查看文件

@@ -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".

+ 0
- 1
frappe/desk/desk_page.py 查看文件

@@ -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:


+ 48
- 17
frappe/print/doctype/print_format/print_format.json 查看文件

@@ -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",


+ 13
- 4
frappe/print/doctype/print_settings/print_settings.json 查看文件

@@ -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",


+ 11
- 1
frappe/public/js/frappe/dom.js 查看文件

@@ -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 {


+ 17
- 14
frappe/public/js/frappe/form/print.js 查看文件

@@ -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
- 1
frappe/templates/includes/list/row_template.html 查看文件

@@ -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>


+ 36
- 4
frappe/templates/pages/print.py 查看文件

@@ -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 = []


+ 2
- 6
frappe/templates/styles/standard.css 查看文件

@@ -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;
}

Loading…
取消
儲存