单个 pdf 文件中的一系列 graphviz 图

A series of graphviz diagrams in a single pdf file

我创建了一个 graphviz 图。使用以下代码。

  network1 = G.Digraph(
        graph_attr={...},
        node_attr={...},
        edge_attr={..} )

我添加节点

network1.node("node_edge_name",...)

... 和边缘

network1.edge("A", "B")

... 然后调用下面的代码。它为我创建了一个 pdf 文件和一个点文件。

network1.view(file_name).

这样我的图就变得很复杂了。我想要的是,创建一系列网络对象而不是一个网络对象,并逐页在单个 pdf 文件中可视化它们。最后,我希望有多个点文件和一个pdf文件。 有人可以描述是否有办法做到这一点以及如何做到这一点?

非常感谢, 费尔达

Graphviz 似乎不直接支持这一点(也许 postscript 输出格式支持)。但是有几种工具可以让您将多个 pdf 合并到一个文件中。 这个 ghostscript 命令有效:

 gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=combined.pdf -dBATCH  f1.pdf   f2.pdf  f3.pdf

另请参阅:https://sites.astro.caltech.edu/observatories/coo/solicit/mergePDF.html

我使用 PdfFileReader、PdfFileWriter 库将多个 pdf 文件合并为一个。这就是我想要的。

pdf1File = open(file_name1, 'rb')
pdf2File = open(file_name2, 'rb')
pdf3File = open(file_name3, 'rb')
pdf4File = open(file_name4, 'rb')

# Read the files that you have opened
pdf1Reader = PyPDF2.PdfFileReader(pdf1File)
pdf2Reader = PyPDF2.PdfFileReader(pdf2File)
pdf3Reader = PyPDF2.PdfFileReader(pdf3File)
pdf4Reader = PyPDF2.PdfFileReader(pdf4File)

# Create a new PdfFileWriter object which represents a blank PDF document
pdfWriter = PyPDF2.PdfFileWriter()

# Loop through all the pagenumbers for the first document
for pageNum in range(pdf1Reader.numPages):
    pageObj = pdf1Reader.getPage(pageNum)
    pdfWriter.addPage(pageObj)

# Loop through all the pagenumbers for the second document
for pageNum in range(pdf2Reader.numPages):
    pageObj = pdf2Reader.getPage(pageNum)
    pdfWriter.addPage(pageObj)

# Loop through all the pagenumbers for the third document
for pageNum in range(pdf3Reader.numPages):
    pageObj = pdf3Reader.getPage(pageNum)
    pdfWriter.addPage(pageObj)

# Loop through all the pagenumbers for the fourth document
for pageNum in range(pdf4Reader.numPages):
    pageObj = pdf4Reader.getPage(pageNum)
    pdfWriter.addPage(pageObj)

# Now that you have copied all the pages in both the documents, write them into the a new document
pdfOutputFile = open(file_name5+"_Merged_Files.pdf", 'wb')
pdfWriter.write(pdfOutputFile)

一个可能的问题是节点位置可能会从一个图形更改为下一个图形。 layers 功能将防止节点改变位置 (https://graphviz.org/faq/#FaqOverlays)