xhtml2pdf为本地html文件生成空白pdf

2024-03-28 21:29:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用Bokeh生成的交互式html文件。我正在尝试使用xhtml2pdf将html文件转换为pdf,但是html文件上的图像不会显示在使用xhtml2pdf或pdfkit的pdf上

我试着用PyQt生成PDF,它工作得很好,但在转换为可执行文件时遇到了问题,pdfcrowd也工作了,但它是一个付费库。我在网上查看了所有其他解决方案,但似乎都不起作用

这是html文件生成:

    source = ColumnDataSource(data=dict(x=xx, y=yy, z=val))
    
    surface1 = Surface3d1(x="x", y="y", z="z", data_source=source, width=600, height=600)
    surface2 = Surface3d2(x="x", y="y", z="z", data_source=source, width=600, height=600)
    surface3 = Surface3d3(x="x", y="y", z="z", data_source=source, width=600, height=600)
    surface4 = Surface3d4(x="x", y="y", z="z", data_source=source, width=600, height=600)
    
    l1 = gridplot([[Div(text = 'Side View 1'), Div(text = 'Front View')], [surface1, surface2]])
    l2 = gridplot([[Div(text = 'Side View 2'), Div(text = 'Top View')], [surface3, surface4]])

    filename = filename_out.split("\\")
    
    layout = column(Div(text = str(filename[-1].replace('_', ' '))),Div(text = 'Absolute Warpage = ' + str(warpage)),l1,l2)
    output_file(filename_out[:-1]+'.html', title = 'CMM Scan', mode = 'inline')
    save(layout)

这是转换为pdf的代码

def convert_html_to_pdf(source_html, output_filename):
from xhtml2pdf import pisa 
# open output file for writing (truncated binary)
result_file = open(output_filename, "w+b")

# convert HTML to PDF
pisa_status = pisa.CreatePDF(
        source_html,                # the HTML to convert
        dest=result_file)           # file handle to recieve result

# close output file
result_file.close()                 # close output file

# return True on success and False on errors
return pisa_status.err

convert_html_to_pdf(str(filename_out+'.html'),str(filename_out+'.pdf'))

Tags: 文件totextdivviewsourceoutputdata
1条回答
网友
1楼 · 发布于 2024-03-28 21:29:02

标准Bokeh绘图是一种JavaScript程序,可渲染为HTML光栅画布。听说任何东西都可以转换成PDF,我有点惊讶。任何只查看基本HTML内容而不实际执行JS代码的转换工具肯定无法工作。最有可能的是,PyQt之所以能够工作,是因为它嵌入了一个真正的浏览器引擎,而其他工具则没有

通过在绘图上设置output_backend="svg",您可能会有更好的运气(但是请注意,Bokeh的SVG支持仍然存在一些已知问题,所以YMMV)。然而,我怀疑这可能也会遇到上述相同的问题,运行JS代码就是生成SVG的原因,如果没有JS引擎,就不会显示任何绘图

最终,唯一的选择可能是将Bokeh图(例如,使用export_svgsexport_png)分别导出为静态PNG或SVG,这些PNG或SVG可以包含在PDF中(或HTML文档中,然后可以在不运行JS代码的情况下天真地转换为PDF)

相关问题 更多 >