如何将markdown转换为PDF

typora + pandoc

长图只截取了第一页,长图的后半部分在pdf中完全看不到

md2pdf

md2pdf
usage: md2pdf [-h] [–theme THEME] [–output OUTPUT] filename
md2pdf: error: the following arguments are required: filename

md2pdf mulu.md --output mulu.pdf

cat mulu.md
![face](face.jpeg)

遇到的问题:
生成的pdf只有face这个词,没有图片

pandoc

通过 Pandoc + Latex 来将内容转为 PDF

需要安装miktex和一系列的库
pandoc input.md -o output.pdf
如果图片小的话,可以正常生成图片。
但是图片大的话,就会报错。

pandoc mulu.md -o mulu.pdf

1
2
3
4
5
Error producing PDF.
! Dimension too large.
<argument> \ht \@tempboxa

l.74 ...hics{/tmp/tex2pdf.-b86c1369a9864264/1.jpg}

html 2 pdf

“C:\Program Files\Pandoc\pandoc.exe” input.md -o 1.html

“C:\Program Files\Pandoc\pandoc.exe” 1.html -o 1.pdf

通过markdown格式转换为html,可以正常显示。
然后html转换为pdf,也可以显示。但是pdf里面的图片字太小了。


尝试放大图片

“C:\Program Files\Pandoc\pandoc.exe” 1.html -o 2.pdf –pdf-engine=xelatex –variable geometry:”top=2cm, bottom=2cm, left=2cm, right=2cm”
结果并没有放大,长图还是放在同一页的pdf里的。

WeasyPrint

python3 html2pdf.py

1
2
3
4
5
6
7
8
9
10
11
#coding=utf-8
from weasyprint import HTML

# 指定HTML文件路径
html_file = '/home/kali/mulu.html'

# 指定输出PDF文件路径
pdf_file = '/home/kali/mulu.pdf'

# 使用WeasyPrint将HTML转换为PDF
HTML(html_file).write_pdf(pdf_file)

成功生成了pdf,但是图片太大了,导致pdf只有图片的左上角。

python jpg 2 pdf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Image

def convert_image_to_pdf(image_path, output_path):
doc = SimpleDocTemplate(output_path, pagesize=letter)
story = []
img = Image(image_path)
img.drawHeight = 500 # 设置图像的高度
img.drawWidth = 500 # 设置图像的宽度
story.append(img)
doc.build(story)

# 示例用法
image_path = "1.jpg"
output_path = "output.pdf"
convert_image_to_pdf(image_path, output_path)

可以是可以,但是图片的长度和宽度不知道怎么设置。只能慢慢调整。
一不小心生成的pdf中的图片就是乱的。比例不对。
如果图片多的话,这种方法效率太低。