Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中从二进制流中打开和读取PDF_Javascript_Php_Url_Pdf - Fatal编程技术网

如何在javascript中从二进制流中打开和读取PDF

如何在javascript中从二进制流中打开和读取PDF,javascript,php,url,pdf,Javascript,Php,Url,Pdf,我在用JavaScript读取二进制数据流时遇到了一些困难 目前,弹出一个窗口,显示无法加载PDF文档。 我将在下面发布我的回复和代码,任何帮助都将不胜感激 以下是我的后端PHP: function getPDF() { $file = __DIR__.'\..\pdf\FAS_HeadedPaper.pdf'; header("Content-Length: " . filesize ( $file ) ); header("Content-ty

我在用JavaScript读取二进制数据流时遇到了一些困难

目前,弹出一个窗口,显示无法加载PDF文档。 我将在下面发布我的回复和代码,任何帮助都将不胜感激

以下是我的后端PHP:

function getPDF() {
        $file = __DIR__.'\..\pdf\FAS_HeadedPaper.pdf';
        header("Content-Length: " . filesize ( $file ) );
        header("Content-type: application/octet-stream");
        header("Content-disposition: attachment; filename=".basename($file));
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        ob_clean();
        flush();

        readfile($file);
    }
这是我的前端JavaScript控制器:

$scope.sendRef = function(ref){

        $http({
            method: 'GET',
            url: $scope.endpoint + 'attachments/PDF',
            async: true,
            headers: {
                'Authorization': 'MyToken'
            },
            params: {
                ref: ref
            },
            dataType:'blob'
        })
            .success(function (data) {
                console.log(data);


                var file = new Blob([(data['response'])], {type: 'application/pdf'});
                //var file = data['response'];
                var fileURL = URL.createObjectURL(file);
                window.open(fileURL);
                $scope.content = $sce.trustAsResourceUrl(fileURL);

            })
            .error(function (data, status) {
                console.log('Error: ' + status);
                console.log(data);
            });

    }
这只是我在浏览器控制台中得到的响应的一个片段:

%PDF-1.5
%����
1 0 obj
<</Type/Catalog/Pages 2 0 R/Lang(en-GB) /StructTreeRoot 14 0 R/MarkInfo<</Marked true>>>>
endobj
2 0 obj
<</Type/Pages/Count 1/Kids[ 3 0 R] >>
endobj
3 0 obj
<</Type/Page/Parent 2 0 R/Resources<</Font<</F1 5 0 R/F2 7 0 R/F3 9 0 R>>/XObject<</Image11 11 0 R>>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 595.32 841.92] /Contents 4 0 R/Group<</Type/Group/S/Transparency/CS/DeviceRGB>>/Tabs/S/StructParents 0>>
endobj
4 0 obj
<</Filter/FlateDecode/Length 917>>
stream
x��V[O�X~���p�V>��eUU[B
�J�B���J�-�S�H����  -��Y�������'۴�E1k����۶-f7��]��z�%�~ߔ�E�\UE���7o��ɘO����dR�0l�$�'�v,
V��z8 �PL�����e�r����pp�E6.�6�0L�`�*<�}�5   Q��)ӗ��.k�Hgu�m���dc|h����&���x�ߞ��{GIY�L��d
��e��LMd�ڛb�i��~e%��X���\�l:C~)P%=������\g7+14)^��} ����~�+.m��2"-�w�Q��?   KZKP��Su�=���
%PDF-1.5
%����
10 obj
endobj
20 obj
endobj
30 obj
endobj
40 obj
流动
x��V[O�X~���P�V>��eUU[B
�J�B���J�-�s�H����  -��Y�������'۴�E1k����۶-f7��]��Z�%�~ߔ�E�\UE���7o��ɘO����博士�0l�$�'�v

v��z8�PL�����E�R����聚丙烯�E6。�6.�0L�`�*<我认为你不能只是“打开和阅读”<代码> PDF< /Case>这样的文件。你应该考虑使用<代码> PDF渲染和解析库,例如

< P>我认为你不能只是“打开和阅读”。<代码> PDF< /COD>这样的文件。你应该考虑使用<代码> PDF渲染和解析库。例如:

< P>我实际上已经修复了它,以便它能按照我的需要工作。

我在blob之前添加了
responseType:'arraybuffer',
,然后在success中将其作为应用程序/pdf调用,效果很好

$scope.sendRef = function(ref){

        $http({
            method: 'GET',
            url: $scope.endpoint + 'attachments/PDF',
            async: true,
            headers: {
                'Authorization': 'MyToken'
            },
            params: {
                ref: ref
            },
            responseType: 'arraybuffer',
            dataType:'blob'
        })
            .success(function (data) {
                console.log(data);


                var file = new Blob([(data['response'])], {type: 'application/pdf'});
                //var file = data['response'];
                var fileURL = URL.createObjectURL(file);
                window.open(fileURL);
                $scope.content = $sce.trustAsResourceUrl(fileURL);

            })
            .error(function (data, status) {
                console.log('Error: ' + status);
                console.log(data);
            });

    }

我真的把它修好了,这样它就可以在我需要的时候工作了

我在blob之前添加了
responseType:'arraybuffer',
,然后在success中将其作为应用程序/pdf调用,效果很好

$scope.sendRef = function(ref){

        $http({
            method: 'GET',
            url: $scope.endpoint + 'attachments/PDF',
            async: true,
            headers: {
                'Authorization': 'MyToken'
            },
            params: {
                ref: ref
            },
            responseType: 'arraybuffer',
            dataType:'blob'
        })
            .success(function (data) {
                console.log(data);


                var file = new Blob([(data['response'])], {type: 'application/pdf'});
                //var file = data['response'];
                var fileURL = URL.createObjectURL(file);
                window.open(fileURL);
                $scope.content = $sce.trustAsResourceUrl(fileURL);

            })
            .error(function (data, status) {
                console.log('Error: ' + status);
                console.log(data);
            });

    }

你能阅读PDF数据流并使用该库显示/下载它吗?当然!我在我的公司和个人项目中使用了它。这里有一个官方演示:。此外,这里还有一些示例/演练:你能阅读PDF数据流并使用该库显示/下载它吗?当然!我在我的公司和个人项目中使用了它。这里有这里有一个官方演示:。此外,这里还有一些示例/演练: