В настоящее время я использую FPDF впервые, и пока все отлично работает в Chrome, Firefox, Safari, Mobile Chrome, Mobile Safari, но и Internet Explorer, и Microsoft Edge вызывают у меня проблемы.
У меня есть страница, где пользователь может заполнить форму со своим названием компании и адресом.
Они также обязаны загрузить логотип своей компании.
я использую FPDF в сочетании с FPDI для использования шаблонов / PDF-файлов
Наши дизайнеры сделали PDF в InDesign, и это все хорошо.
Я начинаю с объявления нового FPDI и импорта в базовый PDF (он имеет 8 страниц) в качестве первого источника и шаблона.
Первые 5 страниц в PDF следующие
В моей HTML-форме у меня есть выборочный ввод, где пользователь может выбирать между пятью.
Который я тогда беру в PHP и загружаю правильную страницу следующим образом:
$pdf = new FPDI();
$pagecount = $pdf->setSourceFile('../pdf/source-brochure.pdf');
// Add the Cover
$tplCover = $pdf->importPage($cover_versie, '/MediaBox');
$pdf->addPage();
$pdf->useTemplate($tplCover, 0, 0, 210);
$pdf->Image($newFile, $baseOffsetX, $baseOffsetY);
$cover_versie; // Outputs the integer 1, 2, 3, 4 or 5 for the covers
$newFile; // Is the uploaded logo resised and uploaded to the server
Размер логотипа изменяется и редактируется через скрипт php
Теперь 5-й вариант — это пользовательская обложка, где пользователь может загрузить свое собственное изображение обложки в форму (это поле ввода отображается, когда выбрана обложка 5)
Так что в моем заявлении о переключении, где я проверяю, какое покрытие выбрал пользователь, у меня есть следующий код:
if ($custimg->uploaded) {
$custimg->image_resize = true;
$custimg->image_x = 741;
$custimg->image_y = 792;
$custimg->image_ratio = true;
$custimg->image_ratio_fill = true;
$custimg->image_ratio_crop = 'TL';
$custimg->image_ratio_no_zoom_in = false;
$custimg->image_ratio_no_zoom_out = false;
$custimg->image_convert = 'png';
$custimg->process('uploads/');
if ($custimg->processed) {
$customcoverimage = $custimg->file_dst_pathname;
$custimg->clean();
}
}
Остальная часть формы не обязательна и отступает с использованием троичных операторов, например, так:
$filename = (!empty($companyname)) ? $companyname : time();
Поэтому после того, как обложка выбрана и сделана, я добавляю 6-ю страницу из исходного PDF-файла, которая является страницей спреда и не требует редактирования, поэтому я импортирую ее как новую страницу:
// Add the content of the brochure
$tplContent = $pdf->importPage(6, '/MediaBox');
$pdf->addPage('L', 'A4');
$pdf->useTemplate($tplContent, 0, 0, 297);
Хорошо, ничего сложного здесь нет.
Далее идет последняя страница.
Для этого у меня также есть опция выбора ввода в моей форме.
Есть 2 вкуса на выбор.
// Add the Back
$tplBack = $pdf->importPage($achter_versie, '/MediaBox');
$pdf->addPage();
$pdf->useTemplate($tplBack, 0, 0, 210);
$achter_versie; // Outputs the integer 7 or 8 based on the chosen back
Теперь здесь мы немного усложнились.
На последней странице есть место, где мне нужно перебрать 5 флажков в форме, чтобы увидеть, каких спонсоров использует компания, и вывести их соответствующий логотип рядом друг с другом:
Поэтому я сначала посчитал количество флажков.
Я получаю значения флажков в цикле и через цикл for добавляю логотипы (которые загружаются в папку по умолчанию) на страницу:
// Get the checkbox values
if ($nrofkeurmerken != 1) {
for ($x1 = 0; $x1 <= $nrofkeurmerken-1; $x1++) {
$brandBaseX = 10;
$baseImgWidth = 29.897916667;
if ($keurmerken[$x1] != 'eigen') {
$keurmerkname[] = "../img/keurmerken/logo-" . $keurmerken[$x1] . ".png";
$pdf->Image($keurmerkname[$x1], $brandBaseX + ($baseImgWidth * $x1) + 5, 270);
} else {
$keurimg = new upload($_FILES['keurmerkfile']);
if ($keurimg->uploaded) {
$keurimg->image_resize = true;
$keurimg->image_x = 113;
$keurimg->image_y = 71;
$keurimg->image_ratio = true;
$keurimg->image_ratio_no_zoom_in = true;
$keurimg->image_ratio_no_zoom_out = false;
$keurimg->image_convert = 'png';
$keurimg->process('uploads/');
if ($keurimg->processed) {
$customkeurmerkimage = $keurimg->file_dst_pathname;
$pdf->Image($customkeurmerkimage, $brandBaseX + ($baseImgWidth * $x1) + 5, 270);
$keurimg->clean();
}
}
}
}
} else if ($nrofkeurmerken == 1) {
$brandBaseX = 10;
$baseImgWidth = 29.897916667;
$keurmerkname = "../img/keurmerken/logo-snf.png";
$pdf->Image($keurmerkname, $brandBaseX + ($baseImgWidth * 0) + 5, 270);
}
Теперь во всех современных браузерах (кроме IE11 и MS Edge) это работает.
Но IE11 и Edge имеют ошибку, что PDF не начинается с% PDF
Сначала моя ошибка была неправильным типом файла, но я добавил
header('Content-type: application/pdf');
который решил эту проблему.
Если кто-то это понимает, это было бы здорово, ха-ха.
Спасибо, что нашли время посмотреть!
Задача ещё не решена.
Других решений пока нет …