使用PowerShell+Ghostscript将TXT转PDF遇错求助
解决方案:PowerShell下将TXT转换为PDF
错误原因分析
你当前的PowerShell脚本直接将格式化后的纯文本传入Ghostscript,但Ghostscript仅支持处理PostScript或PDF格式的输入,无法直接解析纯文本,这就是触发/undefined in NameOperand错误的原因。你的bash脚本之所以可行,是因为通过pr格式化文本后,用enscript将其转换为PostScript,最后再通过ps2pdf(Ghostscript的封装工具)生成PDF。
可行方案
方案1:移植bash脚本逻辑(依赖Windows版工具)
在Windows环境中安装与bash脚本对应的工具,直接复用原有逻辑:
- 安装工具:
- 通过Chocolatey包管理器快速安装:
choco install enscript coreutils -y - 或从GNUWin32官网手动下载
enscript和coreutils(包含pr工具)并添加到系统PATH。
- 通过Chocolatey包管理器快速安装:
- 在PowerShell中执行转换命令:
$pdf_file = "C:\table.pdf" pr -t -e20 "C:\Projekt\erg\table.txt" | enscript -B -o - | ps2pdf - $pdf_file
方案2:使用Pandoc(跨平台简便工具)
Pandoc是一款强大的文档转换工具,支持直接将TXT转PDF,无需复杂管道:
- 安装Pandoc:
- 通过Chocolatey安装:
choco install pandoc -y - 或从Pandoc官网下载安装包手动安装。
- 通过Chocolatey安装:
- 基础转换命令:
pandoc "C:\Projekt\erg\table.txt" -o "C:\table.pdf" - 自定义格式(可选):如果需要调整字体、行距等,添加参数:
pandoc "C:\Projekt\erg\table.txt" ` -V fontfamily=courier ` -V fontsize=12pt ` -V linestretch=1.5 ` -o "C:\table.pdf"
方案3:纯Ghostscript实现(无需额外工具,适合简单文本)
手动将纯文本封装为PostScript后传入Ghostscript,适合格式简单的文本:
$txt_path = "C:\Projekt\erg\table.txt" $pdf_path = "C:\table.pdf" $gs_path = "C:\Program Files\gs\gs10.01.1\bin\gswin64c.exe" # 生成简单的PostScript内容(处理换行和基础排版) $raw_text = (Get-Content $txt_path -Raw) -replace "`n", "\n" -replace "`r", "" $ps_content = @" %!PS /Courier 12 selectfont 72 750 moveto 0 -18 setleading ($raw_text) show showpage "@ # 传入Ghostscript转换为PDF $ps_content | & $gs_path -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$pdf_path" -
内容的提问来源于stack exchange,提问作者ZoniK
相关产品推荐
相关产品推荐

