python3 csv,txt,html转成pdf(windows)

一,安装 pdfkit

pip install pdfkit

二,安装 wkhtmltopdf

pip install wkhtmltopdf,可以安装成功,但是无法添加路径,运行程序依旧会报错
OSError: No wkhtmltopdf executable found: "b''"
If this file exists please check that this process can read it. Otherwise please install wkhtmltopdf - https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf
推荐github下载安装包,手动安装,网址如下:
https://wkhtmltopdf.org/downloads.html

三,代码段

import pdfkit
import os
def csvToPdf():
    #这样就不需要添加环境变量了
    path_wk = r"D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe"  
    #wkhtmltopdf包 安装位置
    config = pdfkit.configuration(wkhtmltopdf=path_wk)
    options = {
        'page-size': 'A2',   #页面大小
        'minimum-font-size': 15,
        'margin-top': '0.75in',  #边框填充(inch,基本单位)
        'margin-right': '0.75in',
        'margin-bottom': '0.75in',
        'margin-left': '0.75in',
        'encoding': "UTF-8",   #编码 
    }

        file = xxx.csv
        filename = os.path.splitext(file)[0]
        # 方法一
        pdfkit.from_file(file,filename + '.pdf',configuration=config,options=options)
        os.remove(abspath)
        #方法二
        with open("file","r") as f:
            content = f.readlines
            f.close()
        a = ""
        for i in content:
           a = a + i
        pdfkit.from_string(a,filename + '.pdf',configuration=config,options=options)
        os.remove(abspath)

四,中文识别问题

尽量避免文件名,路径名带有中文
本人的csv,txt文件,均是从数据库导出的,公司统一要求,数据库不会存储中文,故未处理中文问题
csv转html,请参考本人另外一篇博客
### 使用Python文件或内容换为PDF格式 #### 利用WeasyPrint库实现HTML和CSS至PDF换 对于希望将动态生成的内容,比如HTML页面存为PDF的情况,可以采用`weasyprint`这一强大的工具。此方法适用于那些需要保留网页样式并将其固定化为文档形式的应用场景。 ```python from weasyprint import HTML # 加载HTML字符串或URL,并指定输出路径 html_content = "<h1>Hello World</h1><p>This is a test document.</p>" HTML(string=html_content).write_pdf("output_from_html_string.pdf") # 如果是从文件读取,则如下操作 html = HTML(&#39;example.html&#39;) html.write_pdf(&#39;output_from_file.pdf&#39;) print("PDF 文件生成成功!") ``` 上述代码展示了两种方式:一是直接由HTML字符串构建;二是从现有的HTML文件中读入内容再进行换[^4]。 #### CSV数据化为表格化的PDF报告 当面对结构化数据集如CSV时,先解析该类文件获取其中的数据,之后借助模板引擎(例如Jinja2)或是简单的字符串拼接形成带有样式的HTML表单,最后调用前述提到过的`weasyprint`完成最终渲染过程。 ```python import pandas as pd from jinja2 import Template from weasyprint import HTML def csv_to_pdf(csv_filepath, template_str, output_pdf): df = pd.read_csv(csv_filepath) # 创建一个简单的HTML模板用于呈现DataFrame对象 rendered_template = Template(template_str).render(data=df.to_dict(orient=&#39;records&#39;)) # 换成PDF HTML(string=rendered_template).write_pdf(output_pdf) if __name__ == "__main__": sample_data = "data.csv" simple_table_template = """ <table border="1"> {% for row in data %} <tr> {% for key,value in row.items() %} <td>{{ value }}</td> {% endfor %} </tr> {% endfor %} </table> """ csv_to_pdf(sample_data, simple_table_template, &#39;report.pdf&#39;) ``` 这段程序首先读取了一个CSV文件中的信息,接着应用了一段简易的HTML模板来布局这些记录,从而实现了更加美观易读的结果输出[^2]。 #### 文档编辑器内嵌图表与文字混排后的导出方案 针对含有复杂元素组合而成的工作簿——即Excel文件而言,在Windows环境下可通过COM接口控制Microsoft Office组件执行特定任务,像下面这样: ```python import os from win32com.client import DispatchEx excel_path = r"D:\path\to\your\file.xlsx" # Excel文件的位置 pdf_output = r"D:\desired\location\of\exported\document.pdf" xlApp = DispatchEx("Excel.Application") workbook = xlApp.Workbooks.Open(excel_path) try: workbook.ExportAsFixedFormat( Format=0, # 表示PDF格式 Filename=pdf_output, Quality=0, # 默认质量设置 IncludeDocProperties=True, IgnorePrintAreas=False, OpenAfterPublish=False ) finally: workbook.Close(SaveChanges=False) xlApp.Quit() ``` 这里的关键在于使用了`DispatchEx()`函数实例化一个新的Excel应用程序进程,并通过其公开的方法完成了整个换流程[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值