Я нашел pdf в байтовый массив и наоборот в java, dotnet и python. Но я хочу преобразовать PDF в массив байтов в php laravel. Я использую «IMUIS», программное решение для бухгалтерского учета, и мне нужно отправлять записи журнала из laravel lumen в «IMUIS» для обработки. Но после преобразования он выдает ошибку.
"Foutmelding": "Kan een object van het type System.String niet converteren naar het type System.Byte[]."
На английском это означает
"Error message": "Can not convert a System.String object to the System.Byte [] type."
Документация представлена здесь:
Вот код для этого.
public function saveJournal($values = '') {
//echo "adasd";dd();
$partnerKey = $values->input('Partnerkey');
$omgevingscode = $values->input('Environmentcode');
$file = file_get_contents($values->file('Pdffile'));
$str = base64_encode($file);
$options = array(
\WsdlToPhp\PackageBase\AbstractSoapClientBase::WSDL_URL => env('IMUIS_URL'),
\WsdlToPhp\PackageBase\AbstractSoapClientBase::WSDL_CLASSMAP => ClassMap::get(),
);
$login = new \mysdk\ImuisSDK\ServiceType\Login($options);
if ($login->Login(new \mysdk\ImuisSDK\StructType\Login($partnerKey, $omgevingscode)) !== false) {
$sessionid = $login->getResult()->SessionId;
}
$array = [
'BOE' => [
'JR' => '2018',
'PN' => '5',
'DAGB' => 20,
'REK' => 20032,
'TEGREK' => '40',
'FACT' => 0,
'BTW' => 4,
'BEDRBOEK' => 123.45,
'DAT' => '08-05-2018',
'OPM' => 'Anand testing from wsdl',
'BEDRBTW' => 21,
'FACT' => 0,
'OMSCHR' => 'Testing from wsdl api',
'BOEKSTUK' => 2018075
],
'DIGDOS' => [
'FILE' => $str
]
];
$journaalpost = ArrayToXml::convert($array, 'NewDataSet');//convert array to xml string
$create = new \mysdk\ImuisSDK\ServiceType\Create($options);
if ($create->CreateJournaalpost(new \mysdk\ImuisSDK\StructType\CreateJournaalpost($partnerKey, $omgevingscode, $sessionid, $journaalpost)) !== false) {
$jsonResponse = $create->getResult();
} else {
$jsonResponse = $create->getLastError();
}
return $jsonResponse;
}
и вот ответ:
{
"success": true,
"result": {
"CreateJournaalpostResult": false,
"Journaalpost": "<?xml version=\"1.0\"?>\n<NewDataSet><BOE><JR>2018</JR><PN>5</PN><DAGB>20</DAGB><REK>20032</REK><TEGREK>40</TEGREK><FACT>0</FACT><BTW>4</BTW><BEDRBOEK>123.45</BEDRBOEK><DAT>08-05-2018</DAT><OPM>Anand testing from wsdl</OPM><BEDRBTW>21</BEDRBTW><OMSCHR>Testing from wsdl api</OMSCHR><BOEKSTUK>2018075</BOEKSTUK></BOE><DIGDOS><FILE>JVBERi0xLjMKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyAyIDAgUgovQ29udGVudHMgNCAwIFI+PgplbmRvYmoKNCAwIG9iago8PC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMzg2Pj4Kc3RyZWFtCniclZNPb9pAEMXvfIp3TA8Zdme93jE3G0xFJWgKJtdolbhICTYU6L9v3zWEGKnUVeST1++9+b2xzfjUU2QdfvayAv2xRkJKofiKvOh9g00ssUCFS0xMzFDNY0uxw2OF/kRjtMGXxms06QSOLUnwP+Fmkd+lyMr9wddP+9r7aoDxfFE8NOfaKqtZO+PoV7X+gOK5mdekSBhg/opJfb0qK+9fDthsB2Cl5VbZWx1D80DZAbtzhiIX2iiSJGBTIoLd6mo1hRXesGMRSuxx3ixNpxjl2aRY5vPX1NDwzcASk1GXjnE6LJbL+Ww5nV51RCykokvHZDZMF5+R5aN5+rF1BJ2xcDoiY1DBSmBT5/s1FqceDPl3D8fEpxmj8schLB/DTbX19e+OJq1Hc+Q6CrTCJBzwFeUrhQ1fTfROitYTs+mAaHVamU4KI8TmnRStJ+Zr0WeKVvefVbBu/prjS6/333e+fiwx9bVflbs9MrqnDpjWq7WRDpoLYSTOUXyxwD9RUucvCmVuZHN0cmVhbQplbmRvYmoKMSAwIG9iago8PC9UeXBlIC9QYWdlcwovS2lkcyBbMyAwIFIgXQovQ291bnQgMQovTWVkaWV5s7I11RFTyPO/t9OL74tl5/das6enN0bXwr//AKZ629kqeo76x9P/AOOs4y+N/wDK6nJuq/7nerWTI6zQrTReVjEVir+fVST/AF1m6Wrf7W+uMQ+o/D744dNdW2I8fKx2Ny8nCOrKu5j18zJOGq/JoeLX9ndp47YfR9t7+zUmmy59IPG9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuIAowMDAwMDc2NDgzIDAwMDAwIG4gCjAwMDAwNzY1NTkgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMQovUm9vdCAxMCAwIFIKL0luZm8gOSAwIFIKPj4Kc3RhcnR4cmVmCjc2NjA5CiUlRU9GCg0KCiAgICAgIA==</FILE></DIGDOS></NewDataSet>\n",
"Primarykey": null,
"Foutmelding": "Kan een object van het type System.String niet converteren naar het type System.Byte[]."
}
}
Здесь чего-то не хватает. Показанное вами сообщение об ошибке является сообщением об ошибке C#, но весь ваш код - это PHP. Какая система возвращает эту ошибку?
Это исходит из ответа Api от "IMUIS"
Их API должен быть сломан, потому что вы делаете это правильно в соответствии с их документами. cswdoc.imuisonline.com/wp-content/uploads/2015/05/…
да, думаю, что-то сломано. Но тысячи людей этим пользуются. Как мы можем решить эту ошибку? Я не нашел ни одного разработчика, который уже использовал бы IMUIS.






Чтобы преобразовать PDF в байтовый массив, вам нужно будет прочитать документ с помощью file_get_contents(), а затем проанализировать его с помощью функции unpack().
<?php
public function saveJournal($values = '') {
$partnerKey = $values->input('Partnerkey');
$omgevingscode = $values->input('Environmentcode');
$file = file_get_contents($values->file('Pdffile'));
$byte_array = unpack("C*",$file);
$base64_encode = base64_encode(serialize($byte_array));
$options = array(
\WsdlToPhp\PackageBase\AbstractSoapClientBase::WSDL_URL => env('IMUIS_URL'),
\WsdlToPhp\PackageBase\AbstractSoapClientBase::WSDL_CLASSMAP => ClassMap::get(),
);
$login = new \mysdk\ImuisSDK\ServiceType\Login($options);
if ($login->Login(new \mysdk\ImuisSDK\StructType\Login($partnerKey, $omgevingscode)) !== false) {
$sessionid = $login->getResult()->SessionId;
}
$array = [
'BOE' => [
'JR' => '2018',
'PN' => '5',
'DAGB' => 20,
'REK' => 20032,
'TEGREK' => '40',
'FACT' => 0,
'BTW' => 4,
'BEDRBOEK' => 123.45,
'DAT' => '08-05-2018',
'OPM' => 'Anand testing from wsdl',
'BEDRBTW' => 21,
'FACT' => 0,
'OMSCHR' => 'Testing from wsdl api',
'BOEKSTUK' => 2018075
],
'DIGDOS' => [
'FILE' => $base64_encode
]
];
$journaalpost = ArrayToXml::convert($array, 'NewDataSet');//convert array to xml string
$create = new \mysdk\ImuisSDK\ServiceType\Create($options);
if ($create->CreateJournaalpost(new \mysdk\ImuisSDK\StructType\CreateJournaalpost($partnerKey, $omgevingscode, $sessionid, $journaalpost)) !== false) {
$jsonResponse = $create->getResult();
} else {
$jsonResponse = $create->getLastError();
}
return $jsonResponse;
}
?>
Итак, как преобразовать его в base64 encode (), потому что мы не можем преобразовать массив из base64_encode () только в строку преобразования. Вы это знаете?
Я обновил ответ и добавил исправленный код. Попытайся. Больше нет необходимости использовать функцию base64_encode(). Функция unpack() должна работать.
{"success": false, "error": "DOMDocument :: loadXML (): StartTag: недопустимое имя элемента в Entity, строка: 2"}
base64_encode требуется, см. документ cswdoc.imuisonline.com/?page_id=382
Я обновил код в ответ. Попробуйте получить файл с помощью file_get_contents(), затем используйте unpack() для скрытого преобразования в байтовый массив и base64_encode(serialize($byte_array)) для получения закодированного массива.
$ img_src = 'C: \ Users \ getpdf.pdf'; $ file = file_get_contents ($ img_src); $ byte_array = распаковать ("C *", $ file); $ data = сериализовать ($ byte_array); $ str = base64_encode ($ данные);
Ошибка теперь: «Произошла внутренняя ошибка при создании записи журнала. Обратитесь в программное обеспечение MOUSE».
Я думаю, проблема в том, что WsdlToPhp создал клиентский код, который отправляет объект PDF как String, когда это должен быть byte[].
Поэтому я думаю, что проблема может заключаться в коде, который здесь не показан.
Можете ли вы взглянуть на код, сгенерированный WsdlToPhp, и посмотреть, есть ли у вас какая-либо гибкость в том, как сериализовать $journaalpost, чтобы увидеть, можно ли там исправить?
Я не думаю, что настолько богатый bcoz, что я также отправил простой php.
// Convert the Base64 string back to text.
var byteString = atob(data.reportBase64Bytes);
// Convert that text into a byte array.
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
// Blob for saving.
var blob = new Blob([ia], { type: "application/pdf" });
// Tell the browser to save as report.pdf.
saveAs(blob, "report.pdf");
// Alternatively, you could redirect to the blob to open it in the browser.
//document.location.href = window.URL.createObjectURL(blob);
Это материал jquery, и я хочу его на php.
В программном обеспечении IMUIS есть "ошибка", поэтому невозможно связать файл pdf с php. Это может быть сделано с помощью Dotnet, потому что это его родной язык и вся система, построенная на нем. Спасибо всем моим друзьям ТАК за ваши усилия, которые помогли мне найти проблему, я подтвердил эту информацию после звонка в службу поддержки. Так что в будущем никто не застрянет (возможно, конец 2018 года) :)
Его документы на голландском языке, поэтому, пожалуйста, сначала переведите его на английский, переведя страницу :)