odoo8打印pdf

odoo8打印pdf报表

    • 1.py文件
    • 2.xml文件
  • 注意

提示:以下是本篇文章正文内容,下面案例可供参考

1.py文件

代码如下(示例):

# -*- coding: utf-8 -*-

from openerp import models, api
class PrintClass(models.AbstractModel):
    _name = 'report.module.print_pdf'(report.模块名.模板id)
    
    @api.multi
    def render_html(self, data=None):
        report_obj = self.env['report']
        docargs = self._get_doc_args(self.ids, 'module.print_pdf')
        	# module.print_pdf为(模块名.模板id)
        return report_obj.render('module.print_pdf', docargs)

    @api.model
    def _get_doc_args(self, ids, report_name):
        report_obj = self.env['report']
        obj = self.env['model.table.name']
        	# model.table.name为打印数据所在模型的名称
        report = report_obj._get_report_from_name(report_name)
        values= obj.browse(ids)
        return {
            'doc_ids': self._ids,
            'doc_model': report.model,
            'docs': self,
            'values': values,
        }

2.xml文件

代码如下(示例):

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
    	1.菜单
        <report id="action_print_pdf"(对应动作id)
                model="model.table.name"(打印数据所在模型的名称)
                string="按钮名称"
                report_type="qweb-pdf"
                name="module.print_pdf"(模块名.模板id)
                file="module.print_pdf"/>
		
		2.纸张格式
        <record id="paperformat_type" model="report.paperformat">
            <field name="name">纸张名称</field>
            <field name="default" eval="True"/>
            <field name="format">custom</field>
            <field name="page_height">100</field>(纸张高100毫米)
            <field name="page_width">100</field>(纸张宽100毫米)
            <field name="orientation">Portrait</field>
            	# 报表距离纸张边界上下左右分别为1234毫米
            <field name="margin_top">1</field>
            <field name="margin_bottom">2</field>
            <field name="margin_left">3</field>
            <field name="margin_right">4</field>
            <field name="header_line" eval="False"/>
            <field name="header_spacing">0</field>
            <field name="dpi">80</field>
        </record>

		3.动作
		# action_print_pdf(对应菜单id)
		# module.paperformat_type(模块名.纸张id)
        <record id="action_print_pdf" model="ir.actions.report.xml">
            <field name="paperformat_id" ref="module.paperformat_type"/>
        </record>
        
        4.pdf模板
        <template id="print_pdf">
            <t t-foreach="values" t-as="a">
                <div class="page">
	                <table>
		                <tr>
		                    <td>姓名</td>
		                    <td><span t-field="a.name"/></td>
		                </tr>
	                </table>
                </div>
            </t>
        </template>
        
    </data>
</openerp>

注意

  1. py文件在对应的__init__文件引入
  2. xml在__openerp__中data列表引入

初次学习写,不足之处还请见谅,缺少的细节请大家提出,看的会补充。

你可能感兴趣的:(python)