FPDF / FPDI и Microsoft Internet Explorer и Edge

В настоящее время я использую FPDF впервые, и пока все отлично работает в Chrome, Firefox, Safari, Mobile Chrome, Mobile Safari, но и Internet Explorer, и Microsoft Edge вызывают у меня проблемы.

У меня есть страница, где пользователь может заполнить форму со своим названием компании и адресом.
Они также обязаны загрузить логотип своей компании.

я использую FPDF в сочетании с FPDI для использования шаблонов / PDF-файлов
Наши дизайнеры сделали PDF в InDesign, и это все хорошо.
Я начинаю с объявления нового FPDI и импорта в базовый PDF (он имеет 8 страниц) в качестве первого источника и шаблона.

Первые 5 страниц в PDF следующие

  • Обложка 1
  • Обложка 2
  • Обложка 3
  • Обложка 4
  • Обложка 5

В моей 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');

который решил эту проблему.

Если кто-то это понимает, это было бы здорово, ха-ха.
Спасибо, что нашли время посмотреть!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]