我必须将大量的 python 脚本打印为 PDF。代码应该以文本形式包含,而不是图像,因为它必须通过反剽窃机制进行检查(我不必处理这个,只是要求pdf不是由图像制作的,仅此而已)。语法高亮也是必要的。
您对此有什么具体工具的建议吗?
关于反抄袭部分,我帮不了你。要打印带有语法突出显示的 py 脚本,传统工具是
enscript
:
enscript -E -q -Z -p - -f Courier10 readmaya.py | ps2pdf - out.pdf
这里,
enscript
进行语法高亮并生成后记。如果您想要颜色,请将 --color
选项添加到 enscript
命令。您可以使用几种可能的工具中的任何一种来进行将 postscript 转换为 pdf 的第二步。我在这里展示了 ps2pdf
,它来自 Ghostscript 包。
-E
选项告诉enscript
猜测源代码语言。如果它没有正确猜测您的文件,您可以明确指定一种语言,例如 -Epython
。
在类似 Debian 或 Unbuntu 的系统上,
enscript
可以安装:
apt-get install enscript
在类似 Debian 或 Unbuntu 的系统上,
ps2pdf
是可能已经安装的 ghostscript
软件包的一部分。如果不是的话。运行:
apt-get install ghostscript
如果你使用 vim,那么你可以这样做:
vim abc.py -c ":hardcopy > abc.ps" -c ":q"
您将得到带语法高亮的 abc.ps,然后
ps2pdf abc.ps abc.pdf
对于反剽窃检查,您可以使用 urllib2 进行谷歌搜索,包括您要检查的内容的引用文本:
import urllib2
response = urllib2.urlopen('https://www.google.co.in/search?q="python+curl"')
html = response.read()
阅读thisSO链接了解更多详情。
对于 pdf 打印部分,我通常做的是创建文本/文档的 html 模板,然后使用 xhtml2pdf python 库生成 pdf:
f=open('template.htm','r')
sourceHtml = unicode(f.read(), errors='ignore')
f.close()
sourceHtml = template.render(tvals)
sourceHtml = sourceHtml.replace('__name__',sname)
sourceHtml = sourceHtml.replace('__address__',saddress)
sourceHtml = sourceHtml.replace('__occupation__',soccupation)
packet = StringIO.StringIO() #write to memory
pisa.CreatePDF(sourceHtml,dest=packet)
在 html 模板中,您可以使用
<code>
或 <pre>
标签来格式化脚本。阅读我完整的文章,了解有关在 python 中生成 pdf 的方法的更多信息。