小能豆

使用 pypandoc 将 Markdown 转换为 docx

python

我在使用 pypandoc 将 markdown 文件转换为 docx 文件时遇到问题。当我尝试使用命令转换文件时:

pypandoc.convert_file('container.md', to='docx', outputfile='result.docx'),

我收到一个没有图片的文件和一条消息:[警告]无法获取资源 image.png:PandocResourceNotFound“image.png”。我的问题的第二部分是表格的边框根本不可见。

当我将同一个文件转换为 pdf 时,没有遇到任何问题。谢谢您的帮助。


阅读 136

收藏
2023-07-25

共1个答案

小能豆

问题可能出在两个方面:一是 Pandoc 无法正确处理图片资源,二是表格边框在转换为 docx 格式时不可见。

  1. 图片资源问题:

确保你的 Markdown 文件中的图片链接是正确的,并且图片文件在同一目录下或者在正确的路径下。如果图片链接是相对路径,那么请确保在转换过程中程序能够正确找到这些图片文件。

  1. 表格边框问题:

Pandoc 在将 Markdown 转换为 docx 格式时,对表格的边框处理有一些问题。这可能导致表格边框在转换后不可见。为了解决这个问题,你可以考虑使用一个 workaround,即使用 Pandoc 的 raw Word 格式输出,然后使用一个支持自定义表格样式的 Python 库(如 python-docx)来重新设置表格的样式。

首先,确保你已经安装了 python-docx 库:

pip install python-docx

然后,修改你的代码如下:

import pypandoc
from docx.shared import Pt
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import nsdecls
from docx.oxml import parse_xml

# Convert markdown to raw Word format
output = pypandoc.convert_file('container.md', to='docx', format='docx', outputfile='temp_raw.docx')

# Use python-docx to process the raw Word file and set table style
from docx import Document

doc = Document('temp_raw.docx')

for table in doc.tables:
    # Set table border to be visible
    tcPr = table._element.xpath('.//w:tcPr', namespaces=nsdecls)[0]
    tcBorders = parse_xml(r'<w:tcBorders xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:top w:val="single" w:sz="4" w:space="0" w:color="000000"/><w:left w:val="single" w:sz="4" w:space="0" w:color="000000"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="000000"/><w:right w:val="single" w:sz="4" w:space="0" w:color="000000"/></w:tcBorders>')
    tcPr.append(tcBorders)

# Save the modified document
doc.save('result.docx')

这样,你就可以通过使用 python-docx 库来重新设置表格的样式,包括边框可见性。

注意:在这里,我们先将 Markdown 文件转换为 Pandoc 的原始 Word 格式,然后再用 python-docx 库对其进行处理,因为 python-docx 库对表格样式的处理更加灵活,可以更好地控制表格边框的可见性。

关于图片资源问题,还请确保图片文件在正确的路径下,并在 Markdown 文件中使用正确的图片链接。

2023-07-25