使用多个图形将DOT脚本渲染为PDF每页一个图形

lua*_*tor 5 pdf dot graphviz

我有一个大型DOT脚本,其中定义了多个图形:

digraph Tree0 {
  ...
}

digraph Tree1 {
  ...
{
...
Run Code Online (Sandbox Code Playgroud)

我可以将其呈现为postscript文件,其中每个图表都通过调用在单独的页面上dot -Tps forest.dot -o forest.ps.但是,出于性能原因,我更喜欢PDF而不是postscript(滚动和缩放更加平滑).但是如果我使用PDF而不是PS使用相同的命令,则生成的文件只包含其中一个图形,看起来其余部分写入stdout.

将PS转换为PDF ps2pdf不起作用,因为图形以及PS文件的页面具有不同的大小,但生成的PDF文件将具有固定的页面大小,从而切掉部分图形.

有没有一种简单的方法可以从dot获取多图PDF,就像它可以与PS文件一起使用?如果没有,我如何将PS转换为PDF并保持不同的页面大小?

lua*_*tor 5

我自己找到了一个解决方案,使用csplitand pdftk

dot -Tpdf forest.dot | csplit --quiet --elide-empty-files --prefix=tmpforestfile - "/%%EOF/+1" "{*}" && pdftk tmpforestfile* cat output forest.pdf && rm -f tmpforestfile*
Run Code Online (Sandbox Code Playgroud)
  1. dot 将所有单独的 pdf 文件写入一个输出中
  2. csplit使用 %%EOF 标记将此输出通过管道传输并将其拆分为单独的文件
  3. 将 pdf 文件连接成一个,使用pdftk
  4. 删除临时文件

有点难看,但它正在工作。


Aug*_*tin 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从中派生.