Doc Converter

Polar Sponsor
爱发电 赞助
.NET 9.0

文档格式转换器。用于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 .pdf python-docx + fpdf2
.md .pdf markdown + fpdf2
.md .docx markdown + python-docx
.html .pdf 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 字体

相关专题

更多
DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

2026.11.04

0

15

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

0

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习