Я использую следующую библиотеку для генерации PDF -> https://mpdf.github.io/
Версия MPDF -> 7.1.7 (обновлена до 8.0.0)
Я сгенерировал довольно много PDF-файлов, а затем написал сценарий, чтобы объединить их в один скомпилированный PDF-файл. Все прошло хорошо, и PDF составляет 655 страниц.
Проблема возникает всякий раз, когда я пытаюсь добавить оглавление в pdf. Программа сталкивается с бесконечной ошибкой, говорящей о том, что feof (), ftell (), fseek () и fread () имеют ошибку «предоставленный ресурс не является допустимым потоковым ресурсом». Это происходит, только если я пытаюсь добавить в оглавление.
Ниже приведен код слияния. Он сканирует конкретный каталог, определяет, является ли он файлом или подкаталогом, затем захватывает pdf и импортирует его.
function import_page($pdf, $path) {
$page_count = $pdf -> SetSourceFile($path);
for($j = 1; $j <= $page_count; $j++) {
$page_id = $pdf -> ImportPage($j);
$pdf -> UseTemplate($page_id);
if($j < $page_count) {
$pdf -> AddPage();
}
}
}
$pdf = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'format' => 'Letter-P'
]);
$pdf -> SetImportUse();
$pdf -> WriteHTML('<tocpagebreak links="1" toc-preHTML="<h2>Table of Contents</h2>" toc-resetpagenum="1" />');
$files = scandir('../../output/');
natsort($files);
foreach($files as $file) {
if(strpos($file, ".pdf") !== false) { // File
$title = substr($file, strpos($file, '.') + 2, -4);
$pdf -> TOC_Entry(htmlspecialchars($title, ENT_QUOTES), 0);
import_page($pdf, '../../output/' . $file);
$pdf -> WriteHTML('<pagebreak>');
} elseif($file !== "." && $file !== "..") { // Directory
$title = substr($file, strpos($file, '.') + 2);
$pdf -> TOC_Entry(htmlspecialchars($title, ENT_QUOTES), 0);
$sub_files = scandir('../../output/' . $file . '/');
natsort($sub_files);
foreach($sub_files as $sub_file) {
if(strpos($sub_file, ".pdf") !== false) { // File
$sub_title = substr($sub_file, strpos($sub_file, '.') + 2, -4);
$pdf -> TOC_Entry(htmlspecialchars($sub_title, ENT_QUOTES), 1);
import_page($pdf, '../../output/' . $file . '/' . $sub_file);
$pdf -> WriteHTML('<pagebreak>');
}
}
}
}
$pdf -> Output();
Этот код отлично работает, пока строка tocpagebreak закомментирована. Как только я попытаюсь добавить это, весь ад разрушится.
Надеюсь ... Я тупой и упустил что-то простое. Спасибо заранее за все ответы, я ценю это.
Исправить попытки
-Двигаясь по оглавлению writehtml в конец документа или добавляя страницу раньше. Результат: неудача.
-Удалить все настройки из tocpagebreak, пробовать методы tocpagebreak и tocpagebreakarray. Результат: неудача.
-Commenting либо один раздел блока if, либо другой (один файл или подкаталоги). Результат: Пасс.
-Завершить цикл после одной итерации подкаталога. Результат: Пасс.
-Сохранить скомпилированный PDF. Напишите быстрый импорт только этой страницы и попробуйте добавить оглавление. Результат: Fail.
- Обновлена версия MPDF до 8.0.0. Результат: Fail.