-
Новые сообщения
-
Ну в общем получилось:
Подключаем composer require tecnickcom/tcpdf
Если нет composer, то устанавливаем его.
В корне проекта создаём generate_pdf.php<?php require_once '/vendor/tecnickcom/tcpdf/tcpdf.php'; $pdf = new TCPDF(); // Вертикальный отступ после шапки $pdf->Ln(5); $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('Название сайта'); $pdf->SetTitle('Информация о продукте'); $pdf->SetSubject('Экспорт информации о товаре в PDF'); $pdf->SetFont('dejavusans', '', 10, '', true); $pdf->AddPage(); $pdf->SetY(15); // Логотип $logoFile = 'https://прямой_путь_до/logo.png'; $logoWidth = 70; $pdf->Image($logoFile, $pdf->GetX(), $pdf->GetY(), $logoWidth, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false); $productData = [ 'url' => $_POST['url'] ?? 'Недоступно', ]; // Информация о компании $companyInfo = '<h3>Название проекта</h3> <p>Сайт: <a href="ссылка">название</a></p> <p>Ссылка на товар: <a href="https://прямой_путь_до/products/' . $productData['url'] . '">смотреть</a></p>'; $pdf->writeHTMLCell(0, 0, $pdf->GetX() + $logoWidth - 10, $pdf->GetY(), $companyInfo, 0, 1, 0, true, 'L', true); // Добавление горизонтальной линии $pdf->SetDrawColor(0, 0, 0); $pdf->SetLineWidth(0.5); $yPosition = $pdf->GetY() + 10; $pdf->Line($pdf->GetX(), $yPosition, $pdf->GetPageWidth() - $pdf->GetX(), $yPosition); // Установка новой Y-позиции после линии для начала контента $pdf->SetY($yPosition + 5); // Извлечение данных из POST $productData = [ 'name' => $_POST['name'] ?? 'Недоступно', 'description' => $_POST['description'] ?? 'Недоступно', ]; // Формирование HTML-контента для PDF $htmlContent = ""; // Имя продукта if (!empty($_POST['name'])) { // Очистка строки от нежелательных символов и сокращение до 50 символов $safeName = mb_substr(trim($_POST['name']), 0, 50); $safeName = preg_replace('/[^A-Za-z0-9А-Яа-яёЁ\s\-]/u', '', $safeName); $safeName = str_replace(' ', '_', $safeName); } else { $safeName = 'Недоступно'; } // Описание if (!empty($productData['description'])) { $htmlContent .= "<p><strong>Описание:</strong> {$productData['description']}</p>"; } // Вывод HTML-контента в PDF $pdf->writeHTML($htmlContent, true, false, true, false, ''); // Вывод каждого изображения после текста $pageWidth = $pdf->GetPageWidth() - $pdf->getMargins()['left'] - $pdf->getMargins()['right']; // ширина страницы минус поля $imageWidth = $pageWidth * 1; $marginTop = 4; $marginBottom = 4; foreach ($_POST['images'] as $imageFilename) { $imageUrl = 'https://прямой_путь_до/files/originals/' . $imageFilename; if (@getimagesize($imageUrl)) { // Добавление отступа сверху $pdf->Ln($marginTop); // Получение размеров изображения $sizes = getimagesize($imageUrl); // Вычисление высоты изображения, сохраняя пропорции $imageHeight = $imageWidth * $sizes[1] / $sizes[0]; // Добавление изображения и выравнивание его по центру $pdf->Image($imageUrl, ($pageWidth - $imageWidth) / 2, '', $imageWidth, $imageHeight, 'JPG', '', 'T', false, 300, 'C', false, false, 1, false, false, false); // Добавление отступа снизу $pdf->Ln($imageHeight + $marginBottom); } } // После добавления всего контента, футер на последней странице $pdf->lastPage(); // Установка Y-позиции для футера $footerY = $pdf->GetPageHeight() - 24; $pdf->SetY($footerY); // Установка шрифта для футера $pdf->SetFont('dejavusans', '', 9); // Текст футера и ссылки $footerContent = 'Посетите наш сайт: <a href="ссылка">ссылка</a>'; // Добавление футера на страницу $pdf->writeHTMLCell(0, 0, '', '', $footerContent, 0, 1, 0, true, 'C', true); $fileName = "SITE_экспорт_информации_о_товаре_{$safeName}.pdf"; // Вывод документа $pdf->Output($fileName, 'I');
Необходимо прописать относительный путь до файлов (https://прямой_путь_до) и вставить ссылки на свой проект
И в product.tpl воткнуть форму сбора информации<form action="generate_pdf.php" method="post" target="_blank"> <input type="hidden" name="url" value="{$product->url|escape}"> <input type="hidden" name="name" value="{$product->name|escape}"> <input type="hidden" name="description" value="{$product->body|escape}"> <!-- Для фотографий: предполагаем, что у вас есть массив $product->images с URL-адресами --> {foreach from=$product->images item=image} <input type="hidden" name="images[]" value="{$image->filename|escape}"> {/foreach} <button type="submit">Скачать PDF</button> </form>
-
Названия файлов уже получает)
В .tpl{foreach from=$product->images item=image} <input type="hidden" name="images[]" value="{$image->filename|escape}"> {/foreach}
и в php
// Добавление названий изображений if (!empty($_POST['images'])) { $htmlContent .= "<h2>Изображения товара:</h2><ul>"; foreach ($_POST['images'] as $image) { $filename = basename($image); // Извлекаем имя файла из полного пути $htmlContent .= "<li>{$filename}</li>"; // Добавляем только имя файла в список } $htmlContent .= "</ul>"; }
-
Как бы получить изображение в pdf, хотя бы первое, подскажете плиз)
-
generate_pdf
<?php require_once '/vendor/tecnickcom/tcpdf/tcpdf.php'; // Путь к файлу TCPDF $productData = [ 'id' => $_POST['id'], 'url' => $_POST['url'], 'name' => $_POST['name'], // Заполните остальные данные ]; $pdf = new TCPDF(); $pdf->AddPage(); $pdf->SetFont('dejavusans', '', 12); $htmlContent = "<h1>{$productData['name']}</h1> <p><strong>ID:</strong> {$productData['id']}</p> <p><strong>URL:</strong> {$productData['url']}</p> $pdf->writeHTML($htmlContent, true, false, true, false, ''); $pdf->Output('product_info.pdf', 'I');
и кнопка в tpl
<form action="generate_pdf.php" method="post" target="_blank"> <input type="hidden" name="id" value="{$product->id|escape}"> <input type="hidden" name="url" value="{$product->url|escape}"> <input type="hidden" name="name" value="{$product->name|escape}"> <button type="submit">Скачать PDF</button> </form>
Начал выводить ID, url и name поля
Изменено пользователем Chudo -
Создаю я значит generate_pdf.php в корне проекта
<?php require_once '/vendor/tecnickcom/tcpdf/tcpdf.php'; // Путь к файлу TCPDF // Создание нового PDF документа $pdf = new TCPDF(); // Добавление страницы $pdf->AddPage(); // Установка шрифта $pdf->SetFont('dejavusans', '', 12); // Формирование HTML-контента $htmlContent = <<<EOD <h1>{$product['name']}</h1> EOD; // Вывод HTML-контента в PDF $pdf->writeHTML($htmlContent, true, false, true, false, ''); // Вывод PDF $pdf->Output('product_info.pdf', 'I');
И кнопку в product.tpl
<a href="generate_pdf.php?product_id={$product->id}" target="_blank">Скачать PDF</a>
В итоге данные не передаются из карточки товара =(
Изменено пользователем Chudo
-
-
Новые темы
-
Генерация и скачивание PDF на основе данных из карточки товара
От Chudo, в Общие вопросы по функционалу и дизайну
- 5 ответов
- 116 просмотров
-
Как сделать фильтр товара на главной по 3 свойствам?
От megauser, в Общие вопросы по функционалу и дизайну
- 4 ответа
- 390 просмотров
-
- 1 ответ
- 713 просмотра
-
- 1 ответ
- 593 просмотра
-
- 4 ответа
- 618 просмотров
-
Форумы
-
Simpla CMS
-
- 1.2т
- сообщения
-
- 534
- сообщения
-
- 60.6т
- сообщение
-
- 10.7т
- сообщения
-
- 6.8т
- сообщения
-
-
Дизайн и шаблоны
-
- 455
- сообщений
- Smartyflower
- От Noxter,
-
- 1.9т
- сообщений
-
-
Платные модули и услуги
-
- 4т
- сообщение
-
- 1.4т
- сообщений
-
- 510
- сообщений
- От Dmitry86,
-
-
Разное
-
- 447
- сообщений
-
- 309
- сообщений
-
- 143
- сообщения
-
-
Кто в онлайне 0 пользователей, 0 анонимных, 113 гостя (Посмотреть всех)
Зарегистрированных пользователей в онлайне нет
-
Статистика пользователей