У меня проблема с сгенерированным php файлом PDF. Генерация PDF работает очень хорошо. После того, как я сохранил файл на своем веб-сервере, я могу загрузить его и открыть его с помощью моего Ma c или с помощью браузеров, таких как Edge Chrome и Firefox. Только если я открою файл в Adobe Acrobat Reader, он не откроет файл.
Ошибка: при открытии этого файла произошла ошибка. Файл поврежден и не может быть восстановлен.
Я создал файл с javascript и небольшим php. В JS я использовал библиотеку pdfLib для создания файла PDF.
const existingPdfBytes = await fetch(url).then(res => res.arrayBuffer());
const pdfDoc = await PDFDocument.load(existingPdfBytes);
.
.
...changes in the pdf File...
.
.
const pdfBytes = await pdfDoc.save();
const dateOfToday = getDateofToday();
const dateTimeStamp = new Date().getTime();
const fileName = "Vertrag_von_" + dateOfToday + "_ID_" + dateTimeStamp + ".pdf";
sendWithAjax(pdfBytes, studio[4], answers["email"], fileName, answers["telenummer"]);
function sendWithAjax(pdfBytes, studioMail, customerMail , fileName, customerPhoneNumber) {
pdfBytes = bytesToBase64(pdfBytes);
if (window.XMLHttpRequest) {
// AJAX nutzen mit IE7+, Chrome, Firefox, Safari, Opera
xmlhttp=new XMLHttpRequest();
}
else {
// AJAX mit IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST", "sendContractEmail.php", true);
var data = new FormData();
data.append("byte", JSON.stringify(pdfBytes));
data.append("studioMail", JSON.stringify(studioMail));
data.append("customerMail", JSON.stringify(customerMail));
data.append("fileName", JSON.stringify(fileName));
data.append("customerPhoneNumber", JSON.stringify(customerPhoneNumber));
xmlhttp.send(data);
}
После создания файла PDF в JS я отправляю UInt8_Array и другую информацию с помощью ajax в мой php файл.
В php .файле я использовал следующий код для декодирования массива Uint8_Array в строку Base64 и сохранил его в файле на моем веб-сервере.
if(!empty($_POST['byte'])){
$data = json_decode($_POST['byte']);
$fileName = json_decode($_POST['fileName']);
$studioMail = json_decode($_POST['studioMail']);
$customerMail = json_decode($_POST['customerMail']);
$customerPhoneNumber = json_decode($_POST['customerPhoneNumber']);
if (!empty($data)) {
// Detects if there is base64 encoding header in the string.
// If so, it needs to be removed prior to saving the content to a phisical file.
if (strpos($data, ',') !== false) {
@list($encode, $data) = explode(',', $data);
}
$base64data = base64_decode($data, true);
$pdf = fopen ('contractPDFs/'.$fileName ,'w');
fwrite ($pdf,$base64data);
fclose ($pdf);
}
echo "Contract saved";
sendEMailToStudio($fileName, $studioMail, $customerMail, $customerPhoneNumber);
sendEMailToCustomer($customerMail);
} else {
echo "No Data Sent";
}
Может ли кто-нибудь помочь мне в моей проблеме и объяснить, почему я не могу открыть PDF-файл с помощью Adobe Acrobat Reader?
Спасибо