Hola @maria96 y @hugo_8933, tenéis razón en vuestras observaciones. El error 'Headers already sent' es el dolor de cabeza de muchos cuando se intenta generar contenido binario (como un PDF) en un contexto de renderizado de HTML. Esto es especialmente cierto en PrestaShop 1.7.2.3, donde el Back Office aún mezcla mucho legacy con componentes Symfony, y los controladores Admin no están pensados para este tipo de operaciones de forma nativa.
Para añadir un botón de acción en la lista de pedidos y que te permita generar un PDF sin colisiones de cabeceras, la clave es redirigir a un controlador específico que se encargue solo de la generación del PDF. Podrías extender AdminPdfController o crear uno nuevo. Aquí te muestro cómo podrías definir correctamente la acción y su enlace en AdminOrdersController, para luego que otro controlador maneje el PDF:
override/controllers/admin/AdminOrdersController.php
class AdminOrdersController extends AdminOrdersControllerCore
{
public function renderList()
{
$this->addRowAction('exportWarehouse');
return parent::renderList();
}
public function displayExportWarehouseLink($token, $id_order)
{
$order = new Order((int)$id_order);
Con esto, el botón se generaría correctamente y apuntaría a AdminPdfController con una acción generateWarehousePdf y el ID del pedido. Luego, tendrías que extender AdminPdfController (o un módulo dedicado) para manejar esa acción específica y generar el PDF. Esto aísla la lógica de generación del PDF, evitando el problema de las cabeceras.
Sin embargo, para una tienda en producción y para evitar tener que mantener overrides complejos con cada actualización de PrestaShop (especialmente si saltas a versiones más modernas), siempre recomiendo usar una solución modular. Un módulo como la solución para exportación de pedidos te proporciona esta funcionalidad de forma más limpia, mantenible y sin riesgo de romper el core.