我有一个大型DOT脚本,其中定义了多个图形:
digraph Tree0 {
...
}
digraph Tree1 {
...
{
...
我可以将其呈现为postscript文件,其中每个图表都通过调用dot -Tps forest.dot -o forest.ps
在单独的页面上。但是,出于性能原因,我更喜欢PDF而不是postscript(滚动和缩放更加平滑)。但是如果我使用PDF而不是PS使用相同的命令,则生成的文件只包含其中一个图形,看起来其余部分写入stdout。
使用ps2pdf
将PS转换为PDF不起作用,因为图形以及PS文件的页面具有不同的大小,但生成的PDF文件将具有固定的页面大小,从而切掉部分图形。
有没有一种简单的方法可以从dot获取多图PDF,就像它可以与PS文件一起使用?如果没有,我如何将PS转换为PDF并保持不同的页面大小?
答案 0 :(得分:5)
这个怎么样:dot -Tps2 forest.gv -o forest.ps | ps2pdf forest.ps
主要区别在于它使用-Tps2
。根据文件:
ps2 使用PDF表示法生成PostScript输出。假设输出将直接转换为PDF格式。符号包括PDF边界框信息,因此生成的PDF文件可以正确地与pdf工具一起使用,例如pdflatex。此外,如果节点具有URL属性,则将其转换为PDF代码,使得当在PDF查看器(例如,acroread)中查看时,节点是到给定URL的链接。如果URL附加到图形,则将其作为基础,以便节点上的相对URL从中派生。
答案 1 :(得分:4)
我自己找到了一个解决方案,使用csplit
和pdftk
:
dot -Tpdf forest.dot | csplit --quiet --elide-empty-files --prefix=tmpforestfile - "/%%EOF/+1" "{*}" && pdftk tmpforestfile* cat output forest.pdf && rm -f tmpforestfile*
csplit
并将其拆分为单独的文件pdftk
有点难看,但它正在发挥作用。
答案 2 :(得分:1)
我有一个类似的问题,要将多个图形导出为单个图像(PNG或SVG或......)。使用PS / PS2输出并转换为PDF并不令人满意,因为它有时会错误地放置组件图像(或裁剪它们),并且没有简单的方法来查看整个结果。
我最终将imagick与简单的胶水组件PNG图像并排使用。
这是一个简单的解决方案: https://gist.github.com/drmalex07/1088544cfc121acab0463691f71fef0a