【问题标题】:write_html() method in fpdf not using font/encoding specifiedfpdf 中的 write_html() 方法未使用指定的字体/编码
【发布时间】: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


    【解决方案1】:

    使用 docx2python 将 docx 提取到 html 效果非常糟糕。我几个月前就这样做了。我推荐 PyDocX。 docx2python 适合提取 docx 文件内容,而不是将其转换为 html。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多