(这篇不涉及pandoc用法,默认你会,不会就去比站大学找个视频看两眼)
- 当时是为了批量转换程序帮助文档的格式,将docx转为html,开始是通过bat脚本调用pandoc的ps1脚本文件进行转换,代码如下:
.bat文件:
.ps1文件:
因为docx文件中有表格,为了转换后表格显示正常,添加了styles.css的层叠样式,如下:
.css文件:
以上文件内容都可让AI生成(本人不懂前端,所以css这些都是AI的)。
=================那么问题来了: - 后面要求用CMake进行实现,让AI给出了代码,下面只给出出问题的代码:
execute_process(
COMMAND ${PANDOC_EXECUTABLE}
"${CMAKE_CURRENT_SOURCE_DIR}/${DOCX_FILE}"
-o "${HTML_FILE}"
--embed-resources
--standalone
--css="${STYLESHEET}"
RESULT_VARIABLE RESULT
)
此时styles.css被CMake定义为${STYLESHEET},以为会跟之前脚本一样正常调用执行,结果运行正常,但是生成的html文件中表格不见了。中间调整了很多遍行不通,后面实在没办法了,想着不要脚本了,试试将样式直接写进去,如下:
###先说明这部分代码运行结果有问题
execute_process(
COMMAND ${PANDOC_EXECUTABLE}
"${CMAKE_CURRENT_SOURCE_DIR}/${DOCX_FILE}"
-o "${HTML_FILE}"
--from=docx
--to=html5
--embed-resources
--standalone
--metadata pagetitle="Generated Document"
--metadata css="<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
}
th {
background-color: #f2f2f2;
text-align: left;
}
</style>"
RESULT_VARIABLE RESULT
)
还是没有表格,失败!说这个就是希望懂这个或者有这个想法的大佬帮忙看看为啥会失败,下面看不失败的:
#这个成功了
execute_process(
COMMAND ${PANDOC_EXECUTABLE}
"${CMAKE_CURRENT_SOURCE_DIR}/${DOCX_FILE}"
-o "${HTML_FILE}"
--embed-resources
--standalone
--template "${CMAKE_CURRENT_SOURCE_DIR}/custom_template.html"
RESULT_VARIABLE RESULT
)
其中custom_template.html为当前脚本同路径下的一个html模版文件,如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>$pagetitle$</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
}
th {
background-color: #f2f2f2;
text-align: left;
}
</style>
</head>
<body>
$body$
</body>
</html>
=====================我还是想摆脱额外的文件调用,方便代码移植,即有了下面的临时文件的方法,即用的时候生成模版文件,用完就删,如下:
# 定义模板内容
set(CUSTOM_TEMPLATE_CONTENT "<!DOCTYPE html>
<html>
<head>
<meta charset=\"utf-8\">
<title>$pagetitle$</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
}
th {
background-color: #f2f2f2;
text-align: left;
}
</style>
</head>
<body>
$body$
</body>
</html>")
# 将模板内容写入临时文件
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/temp_template.html" "${CUSTOM_TEMPLATE_CONTENT}")
# 执行 Pandoc 命令
execute_process(
COMMAND ${PANDOC_EXECUTABLE}
"${CMAKE_CURRENT_SOURCE_DIR}/${DOCX_FILE}"
-o "${HTML_FILE}"
--from=docx
--to=html5
--embed-resources
--standalone
--template "${CMAKE_CURRENT_BINARY_DIR}/temp_template.html"
RESULT_VARIABLE RESULT
)
# 删除临时模板文件(可选)
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/temp_template.html")