2015-11-03 59 views
0

我使用qweb打印我的发票,当报告有很多页面时,我想计算在页面末尾打印它的小计的总和。 我可以使用生成的报告pdf与python做到这一点,但在QWEB我不能。 任何人都可以帮忙,即使从RML如何在odoo发票报告上打印页面小计?

+0

你可以展示你的方法,你卡在哪里? (SO不是代码交付...) – jkalden

+0

可以附加截图吗? – Bhanukiran

回答

1

您只需在将PDF发送到浏览器之前捕获PDF。 如果你不使用附件的修改create_single_pdf()report_sxw.py/usr/lib/python2.7/openerp/report/下,return pdf, report_xml.report_type之前,做pdf = generateMyPDF(s.getvalue(title(report_xml.name), pdf))。如果不是在create_source_pdf() 改变过去的if语句return s.getvalue(), results[0][1]应该 pdf = generateMyPDF(report_xml.name, s.getvalue()) return pdf, results[0][1]

如果您正在使用RML报道:

import StringIO 
from reportlab.pdfgen import canvas 
from reportlab.lib.pagesizes import letter 
from pyPdf import PdfFileReader, PdfFileWriter 


def generateMyPDF(titles, pdf) 
    if title in titles:#title is used here to check if this is the right document to modify (by default title is the string argument in your report action) 
     input = PdfFileReader(cStringIO.StringIO(pdf)) 
     #calculate your subtotals 
     #parse pages to calculate subtotals, you can use regex to calculate subtotal,because it depend on your modified invoice. 

     for index in range(len(subtotals)): 
      packet = StringIO.StringIO() 
      can = canvas.Canvas(packet, pagesize=letter) 

      #draw your subtotal 

      can.save() 
      packet.seek(index) 
      new_pdf = PdfFileReader(packet) 
      page = input.getPage(index) 
      page.mergePage(new_pdf.getPage(0)) 
      output.addPage(page) 

    output.write(s) 
    return s.getvalue() or pdf, , report_xml.report_type 

如果您使用的是QWEB,我想您必须修改get_pdf,report.py,addons/report/models/采用相同的方法。

如果您发现QWEB解决方案,请分享。

+0

您的解决方案适用于openerp 7,谢谢。 – Zety