文档格式转换器。用于Word、PDF、Markdown、HTML格式间的转换。支持docx转pdf、md转pdf、md转docx、html转pdf等。
文档转换器
功能概述
文档转换器是一项面向实际任务的技能,主要用于高纯度文档格式转换器 支持Word, PDF, Markdown, 和 HTML 格式.;Features QQ Word → PDF: 转换.docx 到 PDF + Markdown → PDF : 转换.md 到 PDF + M。
核心要点
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
结果检查与注意事项
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
文档转换器
高保真文档格式转换工具,支持 Word、PDF、Markdown 和 HTML 格式。
功能特性
- 📄 Word → PDF:将 .docx 文件转换为 PDF
- 📝 Markdown → PDF:将 .md 文件转换为 PDF
- 📝 Markdown → Word:将 .md 文件转换为 .docx
- 🌐 HTML → PDF:将 .html 文件转换为 PDF
- 🎨 高保真度:保留原始排版、字体及图片
- 🌍 多语言支持:中文、英文等
- ✅ 跨平台兼容:Windows、macOS、Linux
支持的转换类型
| 源格式 | 目标格式 | 实现方式 |
|---|---|---|
| .docx | python-docx + fpdf2 | |
| .md | markdown + fpdf2 | |
| .md | .docx | markdown + python-docx |
| .html | pdfkit / wkhtmltopdf | |
| .docx | .md | python-docx 提取 |
触发条件
- “转换文档格式” / “Convert document format”
- “Word转PDF” / “Convert Word to PDF”
- “Markdown转Word” / “Convert Markdown to Word”
- “HTML转PDF” / “Convert HTML to PDF”
- “doc-converter”
步骤 1:明确需求
请提供以下信息: 源文件路径: 目标格式:(pdf/docx/md) 特殊要求:(保持格式/压缩/水印等)
步骤 2:转换脚本
Word → PDF
python3 << 'PYEOF'
import os
import sys
from docx import Document
from fpdf import FPDF
class DocxToPdf:
def __init__(self):
self.pdf = FPDF()
self.pdf.set_auto_page_break(auto=True, margin=15)
def convert(self, docx_path, output_path):
"""Convert Word document to PDF"""
doc = Document(docx_path)
self.pdf.add_page()
for para in doc.paragraphs:
if not para.text.strip():
continue
# Determine style
style = para.style.name
if 'Heading 1' in style:
self.pdf.set_font('Helvetica', 'B', 18)
self.pdf.ln(5)
self.pdf.multi_cell(0, 10, para.text)
self.pdf.ln(3)
elif 'Heading 2' in style:
self.pdf.set_font('Helvetica', 'B', 14)
self.pdf.ln(3)
self.pdf.multi_cell(0, 8, para.text)
self.pdf.ln(2)
elif 'Heading 3' in style:
self.pdf.set_font('Helvetica', 'B', 12)
self.pdf.ln(2)
self.pdf.multi_cell(0, 7, para.text)
self.pdf.ln(2)
else:
self.pdf.set_font('Helvetica', '', 11)
self.pdf.multi_cell(0, 6, para.text)
self.pdf.ln(2)
# Handle tables
for table in doc.tables:
self.pdf.ln(5)
self._add_table(table)
self.pdf.output(output_path)
return output_path
def _add_table(self, table):
"""Add table to PDF"""
# Get column widths
num_cols = len(table.columns)
col_width = 190 / num_cols
# Header
self.pdf.set_font('Helvetica', 'B', 10)
self.pdf.set_fill_color(49, 130, 206)
self.pdf.set_text_color(255, 255, 255)
for cell in table.rows[0].cells:
self.pdf.cell(col_width, 8, cell.text, 1, 0, 'C', True)
self.pdf.ln()
# Data rows
self.pdf.set_font('Helvetica', '', 9)
self.pdf.set_text_color(0, 0, 0)
for row in table.rows[1:]:
for cell in row.cells:
self.pdf.cell(col_width, 7, cell.text, 1, 0, 'L')
self.pdf.ln()
# Convert
converter = DocxToPdf()
converter.convert('input.docx', 'output.pdf')
PYEOF
Markdown → PDF
python3 << 'PYEOF'
import os
import markdown
from fpdf import FPDF
class MarkdownToPdf:
def __init__(self):
self.pdf = FPDF()
self.pdf.set_auto_page_break(auto=True, margin=15)
def convert(self, md_path, output_path):
"""Convert Markdown to PDF"""
with open(md_path, 'r', encoding='utf-8') as f:
content = f.read()
# Parse markdown
lines = content.split('\n')
self.pdf.add_page()
for line in lines:
line = line.strip()
if not line:
self.pdf.ln(3)
continue
# Headers
if line.startswith('# '):
self.pdf.set_font('Helvetica', 'B', 20)
self.pdf.ln(5)
self.pdf.multi_cell(0, 10, line[2:])
self.pdf.ln(3)
elif line.startswith('## '):
self.pdf.set_font('Helvetica', 'B', 16)
self.pdf.ln(4)
self.pdf.multi_cell(0, 8, line[3:])
self.pdf.ln(2)
elif line.startswith('### '):
self.pdf.set_font('Helvetica', 'B', 14)
self.pdf.ln(3)
self.pdf.multi_cell(0, 7, line[4:])
self.pdf.ln(2)
# Lists
elif line.startswith('- ') or line.startswith('* '):
self.pdf.set_font('Helvetica', '', 11)
self.pdf.cell(10, 6, '', 0, 0)
self.pdf.multi_cell(0, 6, line[2:])
elif line.startswith('1. '):
self.pdf.set_font('Helvetica', '', 11)
self.pdf.cell(10, 6, '', 0, 0)
self.pdf.multi_cell(0, 6, line[3:])
# Code blocks
elif line.startswith('```'):
self.pdf.set_font('Courier', '', 9)
# Skip code block content
continue
# Regular text
elif not line.startswith('|') and not line.startswith('>'):
self.pdf.set_font('Helvetica', '', 11)
self.pdf.multi_cell(0, 6, line)
self.pdf.ln(1)
self.pdf.output(output_path)
return output_path
# Convert
converter = MarkdownToPdf()
converter.convert('input.md', 'output.pdf')
PYEOF
Markdown → Word
python3 << 'PYEOF'
import os
import markdown
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
class MarkdownToDocx:
def __init__(self):
self.doc = Document()
def convert(self, md_path, output_path):
"""Convert Markdown to Word"""
with open(md_path, 'r', encoding='utf-8') as f:
content = f.read()
lines = content.split('\n')
in_code_block = False
for line in lines:
line = line.strip()
if not line:
continue
# Code blocks
if line.startswith('```'):
in_code_block = not in_code_block
continue
if in_code_block:
p = self.doc.add_paragraph()
run = p.add_run(line)
run.font.name = 'Courier New'
run.font.size = Pt(9)
continue
# Headers
if line.startswith('# '):
self.doc.add_heading(line[2:], level=1)
elif line.startswith('## '):
self.doc.add_heading(line[3:], level=2)
elif line.startswith('### '):
self.doc.add_heading(line[4:], level=3)
# Lists
elif line.startswith('- ') or line.startswith('* '):
self.doc.add_paragraph(line[2:], style='List Bullet')
elif line.startswith('1. '):
self.doc.add_paragraph(line[3:], style='List Number')
# Bold/Italic
elif '**' in line:
p = self.doc.add_paragraph()
parts = line.split('**')
for i, part in enumerate(parts):
if part:
run = p.add_run(part)
if i % 2 == 1:
run.bold = True
# Regular text
else:
self.doc.add_paragraph(line)
self.doc.save(output_path)
return output_path
# Convert
converter = MarkdownToDocx()
converter.convert('input.md', 'output.docx')
PYEOF
HTML → PDF
python3 << 'PYEOF'
import os
import subprocess
class HtmlToPdf:
def convert(self, html_path, output_path):
"""Convert HTML to PDF using wkhtmltopdf"""
# Check if wkhtmltopdf is installed
try:
subprocess.run(['wkhtmltopdf', '--version'],
capture_output=True, check=True)
except FileNotFoundError:
print("❌ wkhtmltopdf not installed")
print("Install: brew install wkhtmltopdf (macOS)")
print(" sudo apt install wkhtmltopdf (Linux)")
return None
# Convert
cmd = [
'wkhtmltopdf',
'--enable-local-file-access',
'--page-size', 'A4',
'--margin-top', '20mm',
'--margin-bottom', '20mm',
'--margin-left', '20mm',
'--margin-right', '20mm',
html_path,
output_path
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == 0:
return output_path
else:
print(f"❌ Conversion failed: {result.stderr}")
return None
# Convert
converter = HtmlToPdf()
converter.convert('input.html', 'output.pdf')
PYEOF
自动识别
def detect_conversion_type(source_path, target_path):
"""Detect conversion type from file extensions"""
source_ext = os.path.splitext(source_path)[1].lower()
target_ext = os.path.splitext(target_path)[1].lower()
conversions = {
('.docx', '.pdf'): 'docx_to_pdf',
('.md', '.pdf'): 'md_to_pdf',
('.md', '.docx'): 'md_to_docx',
('.html', '.pdf'): 'html_to_pdf',
('.docx', '.md'): 'docx_to_md',
}
return conversions.get((source_ext, target_ext))
质量设置
PDF 质量参数
PDF_SETTINGS = {
'high': {
'dpi': 300,
'quality': 95,
'compress': False
},
'medium': {
'dpi': 150,
'quality': 85,
'compress': True
},
'low': {
'dpi': 72,
'quality': 70,
'compress': True
}
}
安全说明
- ✅ 不发起任何网络请求或调用外部端点
- ✅ 无需提供凭据或 API 密钥
- ✅ 仅在本地处理文件
- ✅ 所有依赖均为开源组件
- ✅ 不向任何外部服务器上传数据
注意事项
- Word 转 PDF 需要安装 python-docx 和 fpdf2
- HTML 转 PDF 需要系统级依赖 wkhtmltopdf
- 保持格式的最佳实践是使用相同字体
- 中文支持需配置 Unicode 字体
热门AI工具
相关专题
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。
0
2026.11.04
本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。
0
2026.11.03
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章