【发布时间】:2020-06-12 01:10:02
【问题描述】:
我正在创建一个包含大量引号的 PDF,这些引号是我使用 docx2python 导入到 python 中的,使用 html=True 以便它们有一些标签。我已经对它们进行了一些处理,因此它们实际上只有粗体、斜体、下划线或中断标签。我已经对它们进行了排序,并尝试使用fpdf library,特别是pdf.write_html(quote) 方法将它们写入PDF。问题在于我有几个特殊字符,所以我希望将 PDF 编码为 UTF-8。要使用.write_html() 编写代码,我必须创建一个新类,如他们的 readthedocs 所示,位于左侧最底部的.write_html() 方法下:
from fpdf import FPDF, HTMLMixin
class htmlFPDF(FPDF, HTMLMixin):
pass
pdf = htmlFPDF()
pdf.add_page()
#set the overall PDF to utf-8 to preserve special characters
pdf.set_doc_option('core_fonts_encoding', 'utf-8')
pdf.write_html(quote) #[![a section of quote giving trouble with quotations][2]][2]
我进入 pdf 的引号列表都出现在调试器中,并带有它们的特殊字符和 html 标签(<u> 或 <i>),但在 .write_html() 步骤之后,它们会出现在使用 mojibake 生成 pdf 文件,即使在保存之前,也可以通过调试器看到。一个例子是“dayâ€ÂTMs requirements”,它应该是“day's requirements”(引号中的撇号顺时针卷曲,但此文本框不支持)。
我尝试过更新我使用的字体
pdf.add_font('NotoSans', '', 'NotoSans-Regular.ttf', uni=True)
pdf.set_font('NotoSans', '', size=12)
在.add_page() 方法之后添加,但这不会更改PDF 上的当前字体(或修复mojibake),除非我使用更常见的.write(text_height, quote) 方法,它将下划线/斜体标签呈现为PDF文本。 .write() 方法确实保留了特殊字符。我并没有真正尝试更改字体,但请确保写入 PDF 的内容保留特殊字符而不是 mojibake 它们。
在进入.write_html() 之前,我还尝试了一些 .encode/.decode 操作,并尝试了 ftfy 库中的一些方法。并尝试在每个引号的开头添加 '' 无效。
如果有人对遍历 PDF 上每一行的方法有想法,那会很棒,从那时起,我可以使用 ftfy 来修复 mojibake。但理想情况下,它会是每个引用开头的其他 html 标记,或者是更改 .write_html() 方法的字体/编码的方法,也许在类声明中?
或者,如果我处于死胡同,应该将每个引号拆分为 '.write() 方法。
【问题讨论】:
标签: html python-3.6 fpdf