Я использую Reportlab для создания PDF-файлов.Я создаю два PDF-файла, которые я хочу объединить после того, как я их создал.Reportlab предоставляет способ сохранить pycanvas (исходный код) (который по сути является моим pdf-файлом в памяти) в виде файла python, а вызов метода doIt (filename) для этого файла python создаст файл pdf заново.,Это замечательно, так как вы можете объединить два PDF-файла на основе исходного кода и создать один PDF-файл слияния.
Это делается так:
from reportlab.pdfgen import canvas, pycanvas
#create your canvas
p = pycanvas.Canvas(buffer,pagesize=PAGESIZE)
#...instantiate your pdf...
# after that, close the PDF object cleanly.
p.showPage()
p.save()
#now create the string equivalent of your canvas
source_code_equiv = str(p)
source_code_equiv2 = str(p)
#merge the two files on str. basis
#not shown how it is exactly done, to make it more easy to read the source
#actually one just have to take the middle part of source_code_equiv2 and add it into source_code_equiv
final_pdf = source_code_equiv_part1 + source_code_equiv2_center_part + source_code_equiv_part2
#write the source-code equivalent of the pdf
open("n2.py","w").write(final_pdf)
from myproject import n2
p = n2.doIt(buffer)
# Get the value of the StringIO buffer and write it to the response.
pdf = buffer.getvalue()
buffer.close()
response.write(pdf)
return response
Это отлично работает, но я хочу пропуститьшаг, который я сохраняю n2.py на диск.Таким образом, я ищу способ создания экземпляра из строки final_pdf соответствующего класса python и использования его непосредственно в исходном коде.Возможно ли это?
Это должно работать как-то так ..
n2 = instantiate_python_class_from_source(final_pdf)
p = n2.doIt(buffer)
Причина этого заключается главным образом в том, что на самом деле нет необходимости сохранять источник на диск, и, во-вторых,что это абсолютно не нить сохранить.Я мог бы назвать созданный файл во время выполнения, но тогда я не знаю, что импортировать !?Если нет способа предотвратить сохранение файла, есть ли способ определить импорт на основе имени файла, которое определяется во время выполнения!?
Кто-то может спросить, почему я не создаю один pdfзаранее, но это невозможно, поскольку они поступают из разных приложений.