Как я могу создать собственный PDF прямо из Jupyter? - PullRequest
2 голосов
/ 12 марта 2019

Я работаю над проектом в своей компании, где я провожу рутинные эксперименты в рамках контроля качества продукции (QC).Мы используем специализированные инструменты, которые получают данные из данного эксперимента и хранят эти данные в базе данных на сервере компании.Наш текущий интерфейс для анализа этих данных - это запуск Jupyter Notebook, в значительной степени основанный на коде Python, который генерирует различные таблицы и графики с помощью matplotlib на основе данных из данного эксперимента.В настоящее время мы в значительной степени полагаемся на ручное создание отчетов об этих данных, таких как экспорт некоторых результатов из Jupyter Notebook в виде CSV, импорт в Excel и т. Д. Конечная цель в конце каждого эксперимента - создать красиво отформатированный формат.многостраничный PDF со всей необходимой информацией и результатами.

Нам действительно нужен лучший и более автоматизированный способ создания отчетов непосредственно из ноутбука Jupyter в формате PDF, чтобы мы могли легко прикрепить отчет к другимPDF-файлы, такие как записи о серийных / производственных работах.

Мне нужно в четкой и краткой форме сообщить обо всем оборудовании, которое я использую для эксперимента, а также данные этого эксперимента.Мне также нужно включить резюме того, как эксперимент проводился с каждым экспериментом.В идеале я мог бы ввести идентификаторы оборудования непосредственно в Jupyter, создать информационный кадр со всеми экспериментальными данными (изображения, массивы и т. Д.) И экспортировать эту информацию в шаблон PDF.

PDF в том виде, в каком он был представлен, будет иметь несколько страниц / разделов, которые практически не изменятся в ходе последовательных экспериментов, но будет содержать разделы, которые необходимо обновлять для каждого нового набора данных и используемого оборудования.Я также хотел бы, чтобы PDF имел коммерческое качество, поскольку в нем есть название и логотип моей компании, верхний и нижний колонтитулы.

Мы немного поигрались с PyFPDF, но, похоже, это может бытьслишком ограничен для наших нужд.Мы рассмотрели некоторые другие инструменты, но есть много вариантов, и неясно, что будет работать лучше всего для наших целей и будет легче всего кодировать.У кого-нибудь есть предложения, которые могли бы указать нам правильное направление? Изображение одной из страниц с желаемым выводом PDF

1 Ответ

1 голос
/ 12 марта 2019

Мне бы также хотелось, чтобы PDF-документ имел коммерческое качество, поскольку в нем есть название и логотип моей компании, верхний и нижний колонтитулы.

Я уверен, что вы могли бы сделатьмногое напрямую связано с библиотеками Python, но если вы действительно хотите получить высококачественный вывод, просто используйте соответствующий инструмент, такой как латекс, особенно если вы уже знакомы с ним.Если нет, это не трудно учиться.Я иногда использую python для генерации латексного вывода, а затем обрабатываю результаты.Конечно, вы также можете вызывать pdflatex из скрипта Python.

Я бы рекомендовал сначала написать латексный документ отдельно для одного набора данных, поскольку его легче настроить.Затем напишите скрипт для генерации и обработки этого файла для различных наборов данных.

См. https://tex.stackexchange.com/questions/885/how-can-i-use-latex-from-python для получения дополнительных предложений по использованию латекса с python.

Вот пример, который генерируетцифры, латексный файл, а затем вызывает pdflatex для его обработки.Запустите это, и результат будет в report.pdf

import numpy as np
import matplotlib.pyplot as plt
import subprocess

# Generate plots
x = np.arange(0,5,.1)
for i in [2,3,4] :
    plt.plot(x,x**i)
    plt.savefig('Fig{}.png'.format(i))

# Start latex document
f = open('report.tex', 'w')
f.write("""
\\documentclass[]{report}
\\nonstopmode
\\usepackage{lipsum}
\\usepackage{graphicx}
\\begin{document}
\lipsum[1-3]
""")

# Make latex figure
f.write("\\begin{figure}[h]\n")
f.write("    \centering\n")
for i in [2,3,4] :
    f.write("    \\includegraphics[width=.3\\textwidth]{{{}}}\n".format('Fig{}.png'.format(i)))

f.write("    \\caption{Polynomials of power 2,3,4}")
f.write("\end{figure}\n")

# End latex document
f.write("\\end{document}\n")
f.close()

# Compile latex document
subprocess.call('ls')
subprocess.call(['pdflatex', 'report.tex'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...