Reportlab:加密启用时亚洲字体无法使用

1 投票
1 回答
1629 浏览
提问于 2025-04-16 14:09

我一直在使用亚洲字体(简体中文、繁体中文、日文和韩文)生成的pdf文件,之前没有遇到什么问题。不过最近我们决定启用一些加密选项,代码如下:

from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
pdfmetrics.registerFont(UnicodeCIDFont("STSong-Light"))

enc = pdfencrypt.StandardEncryption( 
    "", canPrint=1, canModify=0, canCopy=0, canAnnotate=0 
) 

self._Report = SimpleDocTemplate( 
    save_file, 
    topmargin=0.75*inch, bottommargin=0.75*inch, 
    rightmargin=0.70*inch, leftmargin=0.70*inch, 
    showBoundary=0, 
    author="xxx", 
    title="xxx", 
    subject=xxx", 
    encrypt=enc 
) 

对于非亚洲语言,加密功能正常。但是当我们使用亚洲字体并启用加密时,pdf文件在Adobe Reader中无法打开。例如,使用简体中文时,Adobe Reader会报错“找不到字体‘STSong-Light’”。

有没有人知道是什么原因导致加密功能不兼容,导致这个问题的出现?

1 个回答

1

我也遇到过同样的问题。这可能不能完全解决你的问题。
不过,如果我把它设置成日语,
你可以通过安装 TTFont(在这个例子中是 IPA gothic 字体)来解决它,记得设置字体。
所以,通过安装其他语言的字体,你可以解决这个问题,虽然这样做不是特别好。

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter,A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

fontname = 'IPA Gothic'
pdfmetrics.registerFont(TTFont(fontname,'{directory that you put the font}/ipag.ttf'))
p = canvas.Canvas(response,pagesize=A4)
p.setFont(fonatname,13)
p.drawString(100,100,u'日本語,中国語,韓国語')
p.showPage()
p.save() 

撰写回答