python 转pdf
时间: 2025-01-03 17:27:55 浏览: 7
### 使用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('example.html')
html.write_pdf('output_from_file.pdf')
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='records'))
# 转换成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, 'report.pdf')
```
这段程序首先读取了一个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]。
阅读全文