自用脚本¶
约 42 个字 218 行代码 2 张图片 预计阅读时间 3 分钟
Pdf2Png¶
将 PDF 文件每一页转换为 PNG 格式的高质量图像文件,主要用于Beamer制作的幻灯片转换至PPT。
"""
PDF 转 PNG 高质量图像脚本(适用于 Beamer 幻灯片转 PPT)
------------------------------------------------------
功能说明:
本脚本基于 PyMuPDF(fitz),将指定 PDF 文件中的每一页转换为高分辨率的 PNG 图像,
适用于将 LaTeX Beamer 制作的幻灯片导出为图片,用于插入 PowerPoint 或其他展示工具。
核心功能:
- 遍历 PDF 文件的所有页
- 使用自定义缩放倍数(默认 zoom=8,相当于 576 DPI 渲染)
- 每页渲染为清晰的 PNG 图像,文件命名为 output_001.png、output_002.png 等
- 特别适用于高质量展示,如学术报告、讲座、教学课件等场景
使用方法:
1. 将待转换的 PDF 文件放在脚本所在目录,并修改 pdf_path 变量为目标路径
2. 运行脚本后,会在同目录下生成逐页命名的 PNG 文件
3. 可将这些图片插入到 PowerPoint 等工具中进行进一步排版或美化
依赖环境:
- Python 3.x
- 第三方库:PyMuPDF(即 fitz)
安装命令:
pip install pymupdf
示例输出:
- output_001.png
- output_002.png
- ...
建议:
- 若输出图像过大,可适当降低 zoom 值(推荐范围 4~8)
- 可扩展为批量转换、图像裁剪、加水印等功能
作者:易公子
"""
import fitz # PyMuPDF
# 输入 PDF 路径
pdf_path = "PyMFEA软件介绍.pdf"
# 打开 PDF 文件
doc = fitz.open(pdf_path)
for page_num in range(len(doc)):
page = doc.load_page(page_num)
# 渲染页面为图像(设置缩放倍数)
zoom = 8 # 缩放倍数(1=72 DPI,4=288 DPI)
mat = fitz.Matrix(zoom, zoom)
pix = page.get_pixmap(matrix=mat, alpha=False)
# 保存为 PNG
output_path = f"output_{page_num + 1:03d}.png"
pix.save(output_path)
print(f"已保存:{output_path}")
doc.close()
Obsidian2Mkdoc¶
"""
Obsidian → MkDocs Markdown 格式转换脚本
概述:
--------
本脚本旨在将 Obsidian 风格的 Markdown 文件自动转换为兼容 MkDocs 的语法格式,
用于内容迁移、文档规范化或部署到 MkDocs 静态文档系统中。
核心功能:
--------
1. ✅ 块环境(Callout)转换:
- 自动识别 Obsidian 的块引用语法 `> [!type]`,并转换为 MkDocs 的 `!!! type` 块格式
- 支持可选标题,如:
> [!tip] 自定义标题 → !!! tip "自定义标题"
2. ✅ 加粗样式转换:
- 将 Obsidian 中的 `**加粗**` 文本转换为 MkDocs 风格的 `==高亮==`
3. ✅ 超链接转换为脚注(Footnotes):
- 自动识别 Markdown 中非图片的 `[文本](http链接)` 格式
- 替换为 `文本[^n]` 并在文末添加对应脚注 `[^{n}]: 链接地址`
- 保留相对路径、本地锚点及图片链接(`![]()`)不做处理
支持的块类型(自动映射):
--------
note, tip, info, todo → question, success, warning,
failure, danger, bug, example, quote 等 MkDocs 标准块
使用说明:
--------
1. 将原始 Obsidian 导出的 Markdown 文件重命名为 `input.md`
2. 运行脚本后,会自动生成 `output.md`,其中包含所有格式替换结果
3. 可根据需要进行批处理扩展或集成到构建流程中
适用场景:
--------
- 将 Obsidian 笔记发布到 MkDocs 系统
- 统一 Markdown 风格标准
- 支持构建跨平台、模块化文档体系
作者:易公子
"""
import re
from collections import OrderedDict
# 块类型映射(大小写敏感,Obsidian 到 MkDocs)
block_types = {
"note": "note",
"tip": "tip",
"info": "info",
"todo": "question",
"success": "success",
"warning": "warning",
"failure": "failure",
"danger": "danger",
"bug": "bug",
"example": "example",
"quote": "quote",
}
def convert_bold_to_highlight(text_line):
"""
将 Obsidian 的加粗语法 **内容** 替换为 MkDocs 的高亮语法 ==内容==
"""
return re.sub(r"\*\*(.+?)\*\*", r"==\1==", text_line)
def convert_block_env(text):
"""
将 Obsidian 的块环境(> [!type] 可选标题)转换为 MkDocs 的 !!! type "标题" 格式
"""
pattern = re.compile(r"^> \[!(\w+)\](?:\s+(.*))?$", re.IGNORECASE)
lines = text.splitlines()
output = []
i = 0
while i < len(lines):
match = pattern.match(lines[i])
if match:
block_type_raw = match.group(1).lower()
block_title = match.group(2)
mkdocs_type = block_types.get(block_type_raw, block_type_raw)
if block_title:
output.append(f'!!! {mkdocs_type} "{block_title}"')
else:
output.append(f"!!! {mkdocs_type}")
i += 1
while i < len(lines) and lines[i].startswith(">"):
content = lines[i][1:].lstrip()
output.append(" " + content)
i += 1
else:
output.append(lines[i])
i += 1
return "\n".join(output)
def convert_links_to_footnotes(text):
"""
将 Markdown 中非图片且 http/https 开头的链接 [文本](https://...) 转换为脚注:
文本[^1]
并在末尾追加:[1]: 链接
不处理:
- 图片链接 
- 相对链接、锚点 [文本](doc.md#部分)
"""
link_pattern = re.compile(r"(?<!\!)\[(.*?)\]\((https?://[^\)]+)\)")
footnotes = OrderedDict()
current_index = 1
def replace_link(match):
nonlocal current_index
label, url = match.group(1), match.group(2)
if url not in footnotes:
footnotes[url] = current_index
current_index += 1
return f"{label}[^{footnotes[url]}]"
# 替换正文中的 http 链接
converted_text = link_pattern.sub(replace_link, text)
# 构建脚注区域
footnote_lines = [f"[^{idx}]: {url}" for url, idx in footnotes.items()]
if footnote_lines:
converted_text += "\n\n" + "\n".join(footnote_lines)
return converted_text
def convert_obsidian_to_mkdocs(text):
"""
总转换器:执行块环境转换、加粗转高亮、链接转脚注
"""
text = convert_block_env(text)
lines = text.splitlines()
lines = [convert_bold_to_highlight(line) for line in lines]
text = "\n".join(lines)
text = convert_links_to_footnotes(text)
return text
# 示例:读取、转换、保存
if __name__ == "__main__":
with open("input.md", "r", encoding="utf-8") as f:
content = f.read()
converted = convert_obsidian_to_mkdocs(content)
with open("output.md", "w", encoding="utf-8") as f:
f.write(converted)