14

I have found pdf to byte array and vice-versa in java,dotnet and python. But i want to convert pdf to byte array in php laravel. I am using "IMUIS" which is accounting software solution and need to sending journal entries from laravel lumen to "IMUIS" for processing.But it gives the error after converting.

"Foutmelding": "Kan een object van het type System.String niet converteren naar het type System.Byte[]."

In english that means

"Error message": "Can not convert a System.String object to the System.Byte [] type."

The documentation is given here:

doc link

Here is the code for it.

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;
}

and here is the response as well:

{
    "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[]."
    }
}
4

4 回答 4

1

To convert PDF to byte array you will have to read the document using file_get_contents() and then parse it by function 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;
    }
?>
于 2018-05-24T09:38:23.300 回答
0

I think the problem is that WsdlToPhp has constructed client code which is sending the PDF entity as a String, when it needs to be a byte[].

So I think the problem may be in code that is not shown here.

Can you take a look at the code generated by WsdlToPhp and see if you have any flexibility in how the $journaalpost is serialized to see if you can fix in there?

于 2018-05-25T13:27:55.003 回答
0
// 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);
于 2018-05-29T11:52:09.370 回答
0

There is a "bug" in the IMUIS software so it cant be possible to link a pdf file from php. Its may be done by Dotnet because its native language and the entire system built by it. Thanks to all of my SO friends for your efforts to helps me to find the issue, i have confirmed this information after call support. So in the future no one get stuck (afterall maybe end of 2018) :)

于 2018-06-06T07:19:31.227 回答