Сохранение и организация нескольких файлов.svg в многостраничный PDF, PNG или другие распространенные типы файлов изображений в Python
Цель: я хочу иметь возможность систематизировать многие SVG-изображения структур Льюиса / Кекуле в единый список реакций, отображаемый в каком-то обычном файле просмотра, например PDF или PNG; то есть каждая реакция может занимать одну строку с реагентами и продуктами, разделенными стрелкой или каким-либо другим делителем, и на таком количестве страниц PDF будет столько строк, сколько необходимо для отображения каждой реакции в данной базе данных.
Контекст: я читаю канонические представления SMILES молекул с моего локального компьютера с помощью pybel.readstring(), преобразую эту строку в строку SVG с помощью molSVG = mol._repr_svg_(), а затем отображаю результаты в блокноте Jupyter с дисплеем (SVG(molSVG)) при сохранении строки SVG в список и файл.svg. Например:
import pybel as pb
from IPython.display import display, SVG
molecules = []
# Read in canonical SMILES to some tractable object.
mol = pb.readstring('smi', '[O-][C]([C]1[CH][CH][CH][O]1)[O]')
# Convert it to an SVG string
molSVG = mol._repr_svg_()
# Display the SVG.
display(SVG(molSVG))
# Save the SVG to an .svg file and a list
with open('out.svg', 'w+') as result:
result.write(molSVG)
molecules.append(result)
Что бы я хотел сделать вместо их отображения, это сохранить их в какой-нибудь отдельный файл изображения.
Попытки решения: за последние шесть или семь недель я пробежал довольно много, поэтому я забыл кое-что, но я попробовал класс pyf's Outfile, но я не думаю, что он создавал какие-либо изображения, как это было, вероятно, сделано для хранить исключительно объекты класса OBAtom и OBMol. PdfPages Matplotlib из matplotlib.backends.backend_pdf выглядел как первый шаг к получению более чем одного SVG в одном файле, но я думаю, что это не удалось, потому что он требует графиков в качестве входных данных, а не файлов SVG. Я также видел такие модули, как svgwrite и тому подобное, но не смог заставить их работать.
Например, страница готового продукта может иметь структуру, подобную этой, хотя и без некоторых расцветок, таких как линии между ними и метки на стрелках.
Кроме того, просто примечание: я крайне неопытен во всех формах кодирования, особенно в Python, поэтому, пожалуйста, сделайте это как можно более простым для меня. Любые предложения с благодарностью!