Multi Page Images

Multi-page images can be generated by the usage of the OEMultiPageImageFile class. After generating a multi-page object by specifying the orientation and the size of its pages, the individual pages can be accessed by calling the OEMultiPageImageFile.NewPage method. The returned OEImage then can be used to depict molecule(s) as demonstrated in the previous chapters. The image created by Listing 1 is shown in Figure: Example multi-page depiction.

Listing 1: Example of multi-page depiction

smiles = ["C1CC(C)CCC1", "C1CC(O)CCC1", "C1CC(Cl)CCC1",
          "C1CC(F)CCC1", "C1CC(Br)CCC1", "C1CC(N)CCC1"]


multi = oedepict.OEMultiPageImageFile(oedepict.OEPageOrientation_Landscape,
                                      oedepict.OEPageSize_US_Letter)
image = multi.NewPage()

opts = oedepict.OE2DMolDisplayOptions()

rows, cols = 2, 2
grid = oedepict.OEImageGrid(image, rows, cols)
grid.SetCellGap(20)
grid.SetMargins(20)
citer = grid.GetCells()

for smi in smiles:
    if not citer.IsValid():
        # go to next page
        image = multi.NewPage()
        grid = oedepict.OEImageGrid(image, rows, cols)
        grid.SetCellGap(20)
        grid.SetMargins(20)
        citer = grid.GetCells()

    cell = citer.Target()
    mol = oechem.OEGraphMol()
    oechem.OESmilesToMol(mol, smi)
    oedepict.OEPrepareDepiction(mol)
    opts.SetDimensions(cell.GetWidth(), cell.GetHeight(), oedepict.OEScale_AutoScale)
    disp = oedepict.OE2DMolDisplay(mol, opts)
    oedepict.OERenderMolecule(cell, disp)
    oedepict.OEDrawBorder(cell, oedepict.OEPen(oedepict.OERedPen))
    citer.Next()

oedepict.OEWriteMultiPageImage("MultiPage.pdf", multi)
Example multi-page depiction (The pages are reduced here for visualization convenience)

page 1

page 2

../_images/MultiPage-1.png ../_images/MultiPage-2.png

The Listing 1 example creates a PDF multi-page image file, the multi-page image types supported by OEDepict TK can be accessed by calling the OEGetSupportedMultiPageImageFileExtensions function. It returns an iterator over the file extensions that can be used when writing a multi-page image file by the OEWriteMultiPageImage function.

Multi Page Reports

The Listing 1 example illustrates how depict a set of molecules in a multi-page PDF using the OEImageGrid and OEMultiPageImageFile classes. OEDepict TK also provides the OEReport class to do this task in a more convenient way. The OEReport class is a multi-page layout manager that handles the page generation and the positioning of information (such as text and molecule depiction).

In the Listing 2 example, first a OEReportOptions object is created that stores all properties that determine the layout of a documentation. After generating the OEReport object a molecule can be positioned on a cell that is returned by the OEReport.NewCell method. The OEReport.NewCell method creates cells from left to right and top to bottom order on each page. If no more cells are left on the page, then a new page is created before returning the first cell of this new page.

After the document is generated, i.e all molecule are depicted, the OEWriteReport function writes the multi-page documentation into into a file with the given name. The image created by the Listing 2 example is the same as depicted in Figure: Example multi-page depiction.

Listing 2: Example of multi-page depiction using OEReport

smiles = ["C1CC(C)CCC1", "C1CC(O)CCC1", "C1CC(Cl)CCC1",
          "C1CC(F)CCC1", "C1CC(Br)CCC1", "C1CC(N)CCC1"]

rows, cols = 2, 2
reportopts = oedepict.OEReportOptions(rows, cols)
reportopts.SetPageOrientation(oedepict.OEPageOrientation_Landscape)
reportopts.SetCellGap(20)
reportopts.SetPageMargins(20)
report = oedepict.OEReport(reportopts)

opts = oedepict.OE2DMolDisplayOptions(report.GetCellWidth(),
                                      report.GetCellHeight(), oedepict.OEScale_AutoScale)

for smi in smiles:
    mol = oechem.OEGraphMol()
    oechem.OESmilesToMol(mol, smi)
    oedepict.OEPrepareDepiction(mol)

    cell = report.NewCell()
    disp = oedepict.OE2DMolDisplay(mol, opts)
    oedepict.OERenderMolecule(cell, disp)
    oedepict.OEDrawBorder(cell, oedepict.OERedPen)

oedepict.OEWriteReport("MultiPageReport.pdf", report)

See also