2010-08-19 99 views
3

我正在寫一個django應用程序,並且有些事情我不知道該怎麼做。假設你有一個數據庫,包含用戶和幾個你可能想要發送給這些用戶的.doc文件(郵政信件,而不是電子郵件)。我想知道是否有一種方法可以使用我的用戶數據庫自動創建模板中的這些字母以填充某些標記? (即姓名,地址等)如何:使用django/python模板創建.doc文件

我聽說過「pod」python庫,但我從來沒有使用它。該文檔似乎說使用openoffice模板,但我的MS Word格式。由於它們經常由僅使用MS Office的人員更新,所以我被卡住了。

任何幫助,將不勝感激。

J.

+0

這是理論上可能的,雖然我從來沒有看到它被完成。爲了使它工作,你需要一個Python庫(最好)或者訪問一個外部API來暴露操作Word模板的方法。您很可能最終會在API調用之前使用Django的模板工具來填寫Word模板。 – 2010-08-19 12:36:16

回答

3

有許多不同的方法可以做到這一點,取決於上下文。以下是一些想法,按照難度順序排列。

  • Microsoft Word中包括這個設施,稱爲郵件合併。通過安裝pywin32,您可以使用COM鉤子控制Python中的Word。這與通過打開Microsoft Word來調用郵件合併完全相同。這必須在安裝了Office的Windows計算機上完成,可能不是您的服務器。請參閱http://bytes.com/topic/python/answers/165364-ms-word-mail-merge-automation或Google「python郵件合併」。

  • OpenOffice使用Python作爲宏語言(我相信)並使用Python-UNO公開API。您可以使OpenOffice將文件轉換爲其格式,然後使用pod執行郵件合併。

  • 您可以告訴您的用戶以更好的格式爲您提供數據,例如OpenOffice模板。

  • 您可以導出用戶的數據 Django,給寫模板的人,並告訴他們做他們自己的郵件合併。

無論您選擇什麼,這都不會輕鬆。

+0

因爲它將是郵政信件,我將不得不在模板中唯一的東西將是名稱和地址,我想我會要求以.pdf格式的模板,然後用名稱和地址覆蓋那些pdf在正確的位置。你認爲這會更容易實現嗎?我從來沒有使用過ReportLab。 – jlibioul 2010-08-19 13:10:37

+0

@jlibioul:不,那會很難; PDF修改非常困難。我仍然認爲導出用戶數據並將其提供給編寫模板的人員是最容易的,然後他們可以執行郵件合併或他們想要的任何操作。 – katrielalex 2010-08-19 13:31:32

0

使用mailmerge很容易,您可以從單詞doc修改模板。

http://pbpython.com/python-word-template.html

您可以將郵件合併,以期爲好。這裏是一個例子,其中my_template1是我的word文檔模板,並且裏面有名爲name和title的字段。

def TestDocument2(request): 
    template = os.path.join(os.path.dirname(__file__), 
    'templates/my_template1.docx') 

    document = MailMerge(template) 
    document.merge(name='testcoy', 
       title = 'My title', 
       ) 
    f = io.BytesIO() 
    document.write(f) 
    length = f.tell() 
    f.seek(0) 
    response = HttpResponse(
     f.getvalue(), 
     content_type='application/vnd.openxmlformats- 
     officedocument.wordprocessingml.document' 
     ) 
    response['Content-Disposition'] = 'attachment; filename=example.docx' 
    response['Content-Length'] = length 
    return response