簡體   English   中英

BytesIO Python 的克羅地亞語編碼

[英]Croatian encoding for BytesIO Python

所以我制作了一個 Python 程序,可以將文本添加到 PDF 模板,但是我在顯示像 č,ć,š,ž,đ 等字符時遇到了問題。

該文本首先放在畫布上:

packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=A4)

然后將數據包放入新的 PDF 中:

can.drawString(100, 100, "Kopačka")
    can.save()    
    packet.seek(0)  
    new_pdf = PdfFileReader(packet)

之后我將空的 PDF 模板和新的 PDF 與關鍵文本合並。

問題是特殊的變音符號顯示為這樣的黑框:⬛

我嘗試將 UTF-8 編碼添加到定義函數中:

def __init__(self, e='utf-8')

在像這樣的 drawString 函數中:

can.drawString(100, 100, "Kopačka".encode('utf-8'))

但它仍然沒有正確顯示。

有沒有辦法以其他方式顯示這些特殊字符?

使用 UTF-8 編碼的腳本應以以下注釋開頭:

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

您也可以通過這種方式設置 utf-8 的使用:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

在您的腳本中,Unicode 字符串可以用 'u' 前綴定義

can.drawString(100, 100, u"Kopačka")

於是我找到了解決辦法:

我添加了@Aleksey 所說的評論: # -*- coding: utf-8 -*-

我按照@usr2564301 的建議將字體從 Arial 更改為 Calibri:

一、導入模塊:

from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

然后我在文件夾中下載了 Calibri Regualr.ttf 並在應用程序中注冊了它:

pdfmetrics.registerFont(TTFont('Calibri', 'Calibri Regular.ttf'))

然后更改畫布中的字體:

can.setFont("Calibri", 11)

除此之外,我在定義函數和 drawString 函數中保留了 UTF-8 編碼。

謝謝大家的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM