|
@@ -0,0 +1,55 @@
|
|
|
+import pypandoc
|
|
|
+import os
|
|
|
+from pathlib import Path
|
|
|
+
|
|
|
+def convert_md_to_pdf(input_path: str, output_path: str, template_path: str = None) -> None:
|
|
|
+ """
|
|
|
+ 将Markdown文件转换为PDF,支持中文
|
|
|
+
|
|
|
+ Args:
|
|
|
+ input_path: 输入的Markdown文件路径
|
|
|
+ output_path: 输出的PDF文件路径
|
|
|
+ template_path: 可选的LaTeX模板文件路径
|
|
|
+ """
|
|
|
+ # 验证输入文件是否存在
|
|
|
+ if not os.path.exists(input_path):
|
|
|
+ raise FileNotFoundError(f"输入文件 {input_path} 不存在")
|
|
|
+
|
|
|
+ # 准备额外参数
|
|
|
+ extra_args = ['--pdf-engine=xelatex']
|
|
|
+
|
|
|
+ # 如果提供了模板文件,验证并添加模板参数
|
|
|
+ if template_path:
|
|
|
+ if not os.path.exists(template_path):
|
|
|
+ raise FileNotFoundError(f"模板文件 {template_path} 不存在")
|
|
|
+ extra_args.append(f'--template={template_path}')
|
|
|
+
|
|
|
+ # 确保输出目录存在
|
|
|
+ output_dir = os.path.dirname(output_path)
|
|
|
+ if output_dir and not os.path.exists(output_dir):
|
|
|
+ os.makedirs(output_dir)
|
|
|
+
|
|
|
+ try:
|
|
|
+ # 执行转换
|
|
|
+ pypandoc.convert_file(
|
|
|
+ input_path,
|
|
|
+ 'pdf',
|
|
|
+ outputfile=output_path,
|
|
|
+ extra_args=extra_args
|
|
|
+ )
|
|
|
+ print(f"成功将 {input_path} 转换为 {output_path}")
|
|
|
+ except Exception as e:
|
|
|
+ print(f"转换失败: {str(e)}")
|
|
|
+ raise
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ # 使用示例
|
|
|
+ input_file = '开放接口文档.md'
|
|
|
+ output_file = 'output/example.pdf' # 可以指定子目录
|
|
|
+ template_file = 'template.tex' # 可选模板
|
|
|
+
|
|
|
+ # 使用Path处理路径更安全
|
|
|
+ input_file = str(Path(input_file).resolve())
|
|
|
+ output_file = str(Path(output_file).resolve())
|
|
|
+
|
|
|
+ convert_md_to_pdf(input_file, output_file, template_file)
|