Markdown适合写技术文档、项目说明和工作笔记,但打印、归档或对外交付时,通常需要固定分页和页面布局的PDF。本文围绕Spire.Doc for Python,整理Markdown直接转PDF以及导出前设置纸张大小、页面方向和页边距的实现方式,便于把转换脚本落到实际项目中。
一、依赖安装与测试文件准备
Spire.Doc for Python用于读取、创建和转换文档。示例通过它加载Markdown文件,再导出为PDF。终端执行安装命令:
准备一个Sample.md文件,放在Python脚本工作目录,并建议保存为UTF-8编码。示例脚本会自动创建output文件夹存放生成的PDF,因此源文件和输出目录需要区分清楚,避免路径写错导致加载或保存失败。
二、Markdown直接转换为PDF
如果没有特殊纸张和页边距要求,可以直接加载Markdown文件,再以PDF格式保存。完整代码如下:
- from pathlib import Path
- from spire.doc import *
- from spire.doc.common import *
- # 创建输出文件夹
- Path("output").mkdir(parents=True, exist_ok=True)
- # 创建文档对象
- doc = Document()
- # 加载 Markdown 文件
- doc.LoadFromFile("Sample.md", FileFormat.Markdown)
- # 保存为 PDF 文件
- doc.SaveToFile("output/MarkdownToPDF.pdf", FileFormat.PDF)
- # 释放文档资源
- doc.Dispose()
复制代码
这段流程主要涉及两个方法:LoadFromFile("Sample.md", FileFormat.Markdown)按Markdown格式加载源文件;SaveToFile("output/MarkdownToPDF.pdf", FileFormat.PDF)将加载后的文档导出为PDF。最后调用Dispose()释放文档资源。
需要明确的是,转换并不是把Markdown源码当作普通文本写入PDF,而是先解析文档结构,再生成排版后的页面。标题、段落、列表和强调标记会参与文档排版,因此转换结果更接近排版后的文档,而不是源码的纯文本转储。运行脚本后,可以在output文件夹中找到MarkdownToPDF.pdf。
三、导出前自定义页面设置
Markdown主要描述内容结构,通常不会在源文件中指定A4纸张、横向页面或打印页边距。需要控制这些参数时,可以在加载文件后、导出PDF前修改文档的PageSetup。下面的示例将页面设置为A4、横向,四周页边距均为50磅:
- from pathlib import Path
- from spire.doc import *
- from spire.doc.common import *
- # 创建输出文件夹
- Path("output").mkdir(parents=True, exist_ok=True)
- # 创建文档对象
- doc = Document()
- # 加载 Markdown 文件
- doc.LoadFromFile("Sample.md", FileFormat.Markdown)
- # 获取文档的第一个节
- section = doc.Sections.get_Item(0)
- # 获取页面设置
- page_setup = section.PageSetup
- # 设置纸张大小、页面方向和页边距
- page_setup.PageSize = PageSize.A4()
- page_setup.Orientation = PageOrientation.Landscape
- page_setup.Margins.All = 50
- # 保存为 PDF 文件
- doc.SaveToFile("output/MarkdownToPDFPageSetup.pdf", FileFormat.PDF)
- # 释放文档资源
- doc.Dispose()
复制代码
与基础转换相比,这段代码增加了获取文档节和设置页面布局的操作。各项设置的含义如下:PageSize使用PageSize.A4()表示A4纸张;Orientation使用PageOrientation.Landscape表示横向页面;Margins.All设置为50,表示统一设置上、下、左、右页边距。
这里容易忽略单位问题:页边距的单位是磅(pt),不是毫米。1英寸等于72磅,因此50磅约为17.64毫米。如果需要使用20毫米页边距,可以将其换算为磅,例如:
- page_setup.Margins.All = 20 * 72 / 25.4
复制代码
页面设置会影响内容的可用宽度和分页结果。横向页面可提供更大的横向排版空间,适合包含较宽内容的文档;普通说明文档则可以根据打印需求选择纵向布局。
还需要注意,doc.Sections.get_Item(0)获取的是文档的第一个节,并不是第一页。页面设置作用于该节内的页面。如果处理的文档包含多个节,并且希望统一布局,需要对各个节分别设置,而不是只处理第一个节。
四、转换后重点检查哪些内容
完成导出后,建议检查中文字体:确保运行环境中安装了文档需要的中文字体,并确认导出的文字正常显示。如果Markdown引用了图片,应确保资源可访问,并检查导出结果中是否包含对应图片。对于表格或较长的代码行,需要额外检查换行和页面边界,必要时调整页面方向或页边距。不同Markdown解析器对扩展语法的支持可能不同,包含公式、内嵌HTML或特殊图表时,应使用实际文件验证转换效果。
页面设置控制的是纸张与内容区域,无法代替对具体内容排版的检查。尤其是在批量转换前,先用一份有代表性的文件确认效果,更容易发现字体、资源路径和分页问题。这个排查顺序也有助于区分问题来自页面参数、源文件资源,还是Markdown扩展语法兼容性。
五、实现流程小结
使用Spire.Doc for Python将Markdown转换为PDF,基本流程是创建文档对象、加载Markdown、按需设置页面、导出PDF,最后释放资源。普通笔记和说明文档可以先采用基础转换;需要打印或统一交付格式的材料,则在同一流程中加入PageSetup,并检查最终分页效果。这样既能保留Markdown的编辑和版本管理优势,也能得到适合归档与交付的PDF文件。 |