# Word/Markdown 转 PDF API 使用指南 ## API 端点 ``` POST /api/pdf/convert ``` ## 支持的输入方式 ### 1. 上传文件 支持上传 `.doc`, `.docx`, `.md` 文件: ```javascript // 上传 Word 文件 const formData = new FormData(); formData.append('file', fileInput.files[0]); // .doc 或 .docx // 可选参数 formData.append('toc', 'true'); // 生成目录 formData.append('header_text', '文档标题|页码'); // 页眉 formData.append('footer_text', '版权信息'); // 页脚 formData.append('filename_text', '我的文档'); // 文件名 const response = await fetch('/api/pdf/convert', { method: 'POST', body: formData }); const blob = await response.blob(); const url = URL.createObjectURL(blob); ``` ### 2. 指定本地文件路径 ```javascript const formData = new FormData(); formData.append('file_path', '/path/to/document.docx'); formData.append('toc', 'true'); const response = await fetch('/api/pdf/convert', { method: 'POST', body: formData }); ``` ### 3. 直接提交 Markdown 内容 ```javascript const formData = new FormData(); formData.append('markdown_content', '# 标题\n\n这是内容'); formData.append('filename_text', '我的文档'); const response = await fetch('/api/pdf/convert', { method: 'POST', body: formData }); ``` ## 完整参数列表 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | file | File | 否* | 上传的文件 | | file_path | string | 否* | 本地文件路径 | | markdown_content | string | 否* | Markdown 内容 | | toc | boolean | 否 | 是否生成目录,默认 false | | header_text | string | 否 | 页眉文本,可用 `\|` 分隔左右 | | footer_text | string | 否 | 页脚文本 | | logo_url | string | 否 | Logo 图片 URL | | copyright_text | string | 否 | 版权声明 | | filename_text | string | 否 | 显示的文件名 | | cover_src | string | 否 | 封面图片 URL | | product_name | string | 否 | 产品名称(封面) | | document_name | string | 否 | 文档名称(封面) | | product_version | string | 否 | 产品版本 | | document_version | string | 否 | 文档版本 | | css_name | string | 否 | CSS 样式名称 | | css_text | string | 否 | 自定义 CSS | | download | boolean | 否 | 是否直接下载,默认 true | *注:file、file_path、markdown_content 三者必选其一 ## 完整示例代码 ### React 示例 ```jsx import { useState, useRef } from 'react'; function PdfConverter() { const [loading, setLoading] = useState(false); const fileInput = useRef(null); const convertToPdf = async () => { const file = fileInput.current.files[0]; if (!file) return; setLoading(true); const formData = new FormData(); formData.append('file', file); formData.append('toc', 'true'); formData.append('header_text', '我的文档|第 {page} 页'); formData.append('footer_text', '© 2024 公司名称'); formData.append('filename_text', file.name.replace(/\.[^/.]+$/, '')); try { const response = await fetch('/api/pdf/convert', { method: 'POST', body: formData }); if (!response.ok) { const error = await response.json(); throw new Error(error.detail || '转换失败'); } const blob = await response.blob(); const url = URL.createObjectURL(blob); // 下载 PDF const a = document.createElement('a'); a.href = url; a.download = file.name.replace(/\.[^/.]+$/, '') + '.pdf'; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } catch (error) { console.error('转换失败:', error); alert('转换失败: ' + error.message); } finally { setLoading(false); } }; return (