Django - Создание excel-файла из ответа с помощью openpyxl и преобразование его в pdf в той же функции

В приложении Django (ubuntu server online) я знаю, как создать xlsx файл из HttpResponse с помощью openpyxl, используя этот кусок кода :

views.py

def export_to_excel(request):
    movie_queryset = models_bdc.objects.all()

    response = HttpResponse(
        content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    )
    response['Content-Disposition'] = 'attachment; filename={date}-movies.xlsx'.format(
        date=datetime.now().strftime('%Y-%m-%d'),
    )
    workbook = Workbook()

    # Get active worksheet/tab
    worksheet = workbook.active
    worksheet.title = 'Movies'

    # Define the titles for columns
    columns = [
        'ID',
        'Title',
        'Description',
        'Length',
        'Rating',
        'Price',
    ]
    row_num = 1

    # Assign the titles for each cell of the header
    for col_num, column_title in enumerate(columns, 1):
        cell = worksheet.cell(row=row_num, column=col_num)
        cell.value = column_title

    # Iterate through all movies

    #try to sort by index here and ignore empty rows
    # apply a save to DB before export to excel to get the latest changes

    for movie in movie_queryset:
        row_num += 1

        # Define the data for each cell in the row
        row = [
            movie.bdc_description_1,
            movie.bdc_description_2,
            movie.bdc_description_3,
            movie.bdc_description_4,
            movie.bdc_description_5,
            movie.bdc_description_1,
        ]

        # Assign the data for each cell of the row
        for col_num, cell_value in enumerate(row, 1):
            cell = worksheet.cell(row=row_num, column=col_num)
            cell.value = cell_value

    workbook.save(response)
    

    return response

Но я также хотел бы преобразовать сгенерированный .xlsx в файл .pdf.

Я не знаю, какой подход лучше всего выбрать :

  • Прямое сохранение ответа в виде файла .pdf
  • Подождите, пока xlsx будет создан и сохранен, а затем конвертируйте его в pdf-файл.

Я пытался использовать :

subprocess.run(["libreoffice", "--headless", "--convert-to", "pdf", response])

после строки

workbook.save(response)

но это дало мне эту ошибку :

expected str, bytes or os.PathLike object, not HttpResponse

Спасибо за помощь

Вернуться на верх