【问题标题】:A series of graphviz diagrams in a single pdf file单个 pdf 文件中的一系列 graphviz 图表
【发布时间】:2022-03-31 05:05:11
【问题描述】:

我创建了一个 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 文件中。最后,我希望有多个dot文件和一个pdf文件。 有人可以描述是否有办法做到这一点以及如何做到这一点?

非常感谢, 费达

【问题讨论】:

    标签: python graphviz


    【解决方案1】:

    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

    【讨论】:

    • 谢谢,我会试试的。
    【解决方案2】:

    我使用 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)
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多