Я использую Reportlab для создания PDF-файлов. Я создаю два PDF-файла, которые я хочу объединить после создания. Reportlab обеспечивает способ сохранения pycanvas (source) (который в основном является моим файлом PDF в памяти) в виде файла python и вызовом метода doIt (filename) в этом файле python, воссоздает файл pdf. Это здорово, так как вы можете объединить два PDF-файла на основе исходного кода и создать одно слияние pdf.экземпляр класса python из класса, доступного как строка, только в памяти!
Это делается так:
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 заранее, но это невозможно, поскольку они происходят из разных приложений.
ли код вы предоставили действительно минимально необходимую для объясните вопрос? Это довольно долго. – allyourcode
должно быть лучше сейчас .. –