name: pdf-generator-vtcode description: 使用Python库生成PDF文档(VTCode兼容的Anthropic容器技能替代方案) version: 1.0.0 author: VTCode Team
VTCode的PDF生成器
使用Python库(reportlab, fpdf2)生成专业PDF文档。这是VTCode兼容的Anthropic容器技能替代方案。
要求
安装所需的Python库:
pip install reportlab fpdf2
使用方法
当需要生成PDF时,我将:
- 使用reportlab或fpdf2编写Python代码
- 通过VTCode的execute_code工具执行
- 提供生成的PDF文件
示例
示例1:简单文本PDF
用户:创建一个带有大文本“Hello World”的PDF
代理:我将使用fpdf2生成一个简单的PDF。
execute_code with Python:
```python
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 24)
pdf.cell(0, 20, 'Hello World', 0, 1, 'C')
pdf.output('hello_world.pdf')
result = {"status": "PDF created", "filename": "hello_world.pdf"}
示例2:带表格的报告
用户:生成季度销售报告PDF
代理:我将使用reportlab创建一个带表格的专业报告。
execute_code with Python:
```python
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Table, TableStyle, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib import colors
doc = SimpleDocTemplate("sales_report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
content = []
# 标题
content.append(Paragraph("Q4 2024 Sales Report", styles['Title']))
content.append(Spacer(1, 20))
# 执行摘要
content.append(Paragraph("Executive Summary", styles['Heading1']))
content.append(Paragraph("This quarter exceeded targets by 15% with strong performance across all regions.", styles['Normal']))
content.append(Spacer(1, 12))
# 销售数据表
data = [
['Region', 'Q3 Sales', 'Q4 Sales', 'Growth'],
['North America', '$450,000', '$520,000', '+15.6%'],
['Europe', '$380,000', '$440,000', '+15.8%'],
['Asia Pacific', '$320,000', '$380,000', '+18.8%'],
['Total', '$1,150,000', '$1,340,000', '+16.5%']
]
table = Table(data)
table.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), colors.HexColor('#4472C4')),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 12),
('BOTTOMPADDING', (0,0), (-1,0), 12),
('BACKGROUND', (0,1), (-1,-1), colors.HexColor('#E7E6E6')),
('GRID', (0,0), (-1,-1), 1, colors.black)
]))
content.append(table)
doc.build(content)
result = {"status": "Sales report generated", "filename": "sales_report.pdf"}
示例3:发票
用户:为客户“ABC Corp”创建5000美元的发票PDF
代理:我将生成一个专业发票。
execute_code with Python:
```python
from fpdf import FPDF
from datetime import date
class InvoicePDF(FPDF):
def header(self):
self.set_font('Arial', 'B', 16)
self.cell(0, 10, 'INVOICE', 0, 1, 'C')
self.ln(5)
def footer(self):
self.set_y(-15)
self.set_font('Arial', 'I', 8)
self.cell(0, 10, f'Page {self.page_no()}', 0, 0, 'C')
pdf = InvoicePDF()
pdf.add_page()
# 发票详情
pdf.set_font('Arial', '', 12)
pdf.cell(0, 10, f'Date: {date.today().strftime("%B %d, %Y")}', 0, 1, 'R')
pdf.ln(5)
# 账单对象
pdf.set_font('Arial', 'B', 12)
pdf.cell(0, 10, 'Bill To:', 0, 1)
pdf.set_font('Arial', '', 12)
pdf.cell(0, 10, 'ABC Corp', 0, 1)
pdf.cell(0, 10, '123 Business Ave', 0, 1)
pdf.cell(0, 10, 'City, State 12345', 0, 1)
pdf.ln(10)
# 表格表头
pdf.set_font('Arial', 'B', 12)
pdf.cell(100, 10, 'Description', 1)
pdf.cell(30, 10, 'Quantity', 1)
pdf.cell(30, 10, 'Rate', 1)
pdf.cell(30, 10, 'Amount', 1)
pdf.ln()
# 表格行
pdf.set_font('Arial', '', 12)
pdf.cell(100, 10, 'Software Development Services', 1)
pdf.cell(30, 10, '100', 1, 0, 'C')
pdf.cell(30, 10, '$50.00', 1, 0, 'R')
pdf.cell(30, 10, '$5,000.00', 1, 0, 'R')
pdf.ln(20)
# 总计
pdf.set_font('Arial', 'B', 14)
pdf.cell(160, 10, 'Total:', 0, 0, 'R')
pdf.cell(30, 10, '$5,000.00', 0, 0, 'R')
pdf.output('invoice_abc_corp.pdf')
result = {"status": "Invoice generated", "filename": "invoice_abc_corp.pdf"}
代码模板
模板:使用fpdf2的基本PDF
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
# 您的内容在这里
pdf.cell(0, 10, 'Title', 0, 1, 'C')
pdf.set_font('Arial', '', 12)
pdf.multi_cell(0, 10, 'Your text content goes here...')
pdf.output('output.pdf')
result = {"status": "PDF created", "filename": "output.pdf"}
模板:使用reportlab的专业报告
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import letter
doc = SimpleDocTemplate("report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
content = []
# 添加标题
content.append(Paragraph("Report Title", styles['Title']))
content.append(Spacer(1, 20))
# 添加部分
content.append(Paragraph("Section 1", styles['Heading1']))
content.append(Paragraph("Content for section 1...", styles['Normal']))
# 构建PDF
doc.build(content)
result = {"status": "Report generated", "filename": "report.pdf"}
故障排除
错误:“No module named ‘reportlab’”
- 解决方案:在终端中运行
pip install reportlab
错误:“No module named ‘fpdf’”
- 解决方案:在终端中运行
pip install fpdf2
PDF未出现?
- 检查代码是否成功执行(exit_code = 0)
- 验证结果中的文件名是否匹配您查找的内容
- 确保检查正确的工作空间目录