使用 Pandoc 的简单解决方法。
- 首先导入几个必要的库。
import os
import numpy as np
import matplotlib.pyplot as plt
- 画一些图。
def draw_fig():
# a simple case of plotting matplotlib figures.
if not os.path.exists('fig'):
os.mkdir('fig')
x = np.linspace(0, 5, 100)
for i in range(1, 6):
y = x + i
plt.figure()
plt.plot(x, y)
plt.savefig(f'fig/fig{i}.png')
- 创建一个 Markdown 模板。在这个玩具示例中,每一页都包含一个由 matplotlib 导出的图形。您可以根据自己的需求定制
render函数。
class PdfTemplate():
def __init__(self, figs, filename="output", toc=True):
self.figs = figs
self.toc = toc
self.filename = filename
self.text = []
def render(self):
self._pagebreak()
for fig in self.figs:
self._h1(fig.split(".")[0])
self._img(os.path.join("fig", fig))
self._pagebreak()
self.text = "\n\n".join(self.text)
def export(self):
md_file = f"{self.filename}.md"
pdf_file = f"{self.filename}.pdf"
pandoc = ["pandoc", f"{md_file}", f"-o {pdf_file}"]
with open(md_file, "w") as f:
f.write(self.text)
if self.toc:
pandoc.append("--toc")
os.system(" ".join(pandoc))
def _pagebreak(self):
self.text.append("\pagebreak")
def _h1(self, text):
self.text.append(f"# {text}")
def _img(self, img):
self.text.append(f"")
- 最后,运行代码并导出 pdf。
draw_fig()
pdf = PdfTemplate(figs=os.listdir("fig"))
pdf.render()
pdf.export()
内容页面:
图页: