복붙노트

[JQUERY] 어떻게 바이너리 문자열에서 빌드 PDF 파일에 자바 스크립트를 사용하여 웹 서비스에서 반환

JQUERY

어떻게 바이너리 문자열에서 빌드 PDF 파일에 자바 스크립트를 사용하여 웹 서비스에서 반환

해결법


  1. 1..pdf 파일로 XMLHttpRequest의에서 응답의 다운로드를 허용하는 window.open의 요소에서 다운로드 속성을 대체 방울에 XMLHttpRequest의의 responseType을 설정하십시오

    .pdf 파일로 XMLHttpRequest의에서 응답의 다운로드를 허용하는 window.open의 요소에서 다운로드 속성을 대체 방울에 XMLHttpRequest의의 responseType을 설정하십시오

    var request = new XMLHttpRequest();
    request.open("GET", "/path/to/pdf", true); 
    request.responseType = "blob";
    request.onload = function (e) {
        if (this.status === 200) {
            // `blob` response
            console.log(this.response);
            // create `objectURL` of `this.response` : `.pdf` as `Blob`
            var file = window.URL.createObjectURL(this.response);
            var a = document.createElement("a");
            a.href = file;
            a.download = this.response.name || "detailPDF";
            document.body.appendChild(a);
            a.click();
            // remove `a` following `Save As` dialog, 
            // `window` regains `focus`
            window.onfocus = function () {                     
              document.body.removeChild(a)
            }
        };
    };
    request.send();
    

  2. 2.나는이 다소 오래된 질문이다 실현, 그러나 여기 오늘 함께했다 솔루션입니다 :

    나는이 다소 오래된 질문이다 실현, 그러나 여기 오늘 함께했다 솔루션입니다 :

    doSomethingToRequestData().then(function(downloadedFile) {
      // create a download anchor tag
      var downloadLink      = document.createElement('a');
      downloadLink.target   = '_blank';
      downloadLink.download = 'name_to_give_saved_file.pdf';
    
      // convert downloaded data to a Blob
      var blob = new Blob([downloadedFile.data], { type: 'application/pdf' });
    
      // create an object URL from the Blob
      var URL = window.URL || window.webkitURL;
      var downloadUrl = URL.createObjectURL(blob);
    
      // set object URL as the anchor's href
      downloadLink.href = downloadUrl;
    
      // append the anchor to document body
      document.body.append(downloadLink);
    
      // fire a click event on the anchor
      downloadLink.click();
    
      // cleanup: remove element and revoke object URL
      document.body.removeChild(downloadLink);
      URL.revokeObjectURL(downloadUrl);
    }
    

  3. 3.나는이 변경 :

    나는이 변경 :

    var htmlText = '<embed width=100% height=100%'
                     + ' type="application/pdf"'
                     + ' src="data:application/pdf,'
                     + escape(pdfText)
                     + '"></embed>'; 
    

    ...에

    var htmlText = '<embed width=100% height=100%'
                     + ' type="application/pdf"'
                     + ' src="data:application/pdf;base64,'
                     + escape(pdfText)
                     + '"></embed>'; 
    

    그리고 그것은 나를 위해 일했습니다.


  4. 4.나는 PHP에서 일을하고 바이너리 데이터를 다시 서버에서 전송 디코딩 기능을 사용합니다. 나는 정보를 간단한의 file.php에 입력을 추출하고 내 서버를 통해 파일과 모든 브라우저 화면 PDF로의 유물을 볼 수 있습니다.

    나는 PHP에서 일을하고 바이너리 데이터를 다시 서버에서 전송 디코딩 기능을 사용합니다. 나는 정보를 간단한의 file.php에 입력을 추출하고 내 서버를 통해 파일과 모든 브라우저 화면 PDF로의 유물을 볼 수 있습니다.

    <?php
       $data = 'dfjhdfjhdfjhdfjhjhdfjhdfjhdfjhdfdfjhdf==blah...blah...blah..'
    
       $data = base64_decode($data);
        header("Content-type: application/pdf");
        header("Content-Length:" . strlen($data ));
        header("Content-Disposition: inline; filename=label.pdf");
        print $data;
        exit(1);
    
    ?>
    

  5. 5.64 기수와 @alexandre의 대답은 트릭을 수행합니다.

    64 기수와 @alexandre의 대답은 트릭을 수행합니다.

    즉 IE 작동 왜 설명은 여기

    https://en.m.wikipedia.org/wiki/Data_URI_scheme

    그것이 말하는 헤더 '형식'에서


  6. 6.나는 (dataurl에만 크롬에서 작동을 사용은 iframe에 PDF 파일을 스트리밍)는 최근 단지이 주제에 대한 또 다른 질문을 보았다.

    나는 (dataurl에만 크롬에서 작동을 사용은 iframe에 PDF 파일을 스트리밍)는 최근 단지이 주제에 대한 또 다른 질문을 보았다.

    나는 AST에서 PDF 파일을 제작하고 브라우저로 스트리밍했습니다. 나는 나 자신을 쓴 PDF 클래스와 다음, FDF 먼저 그들을 창조했다 - 각각의 경우에서 PDF는 URL을 통해 전달 GET의 PARAMS의 몇을 기반으로 COM 개체에서 검색된 데이터에서 만들었습니다.

    데이터를보고하는 것은 아약스 호출에 받았다 보냈에서 당신은 거의 거기있는 거처럼, 그것은 보인다. 지금은 몇 년의 코드로 연주 해본 적이 없어뿐만 아니라 I가 걱정 한 것으로 문서,하지만하지 않았다 - 당신이 할 필요가 URL로 iframe을의 목표를 설정 생각 당신은에서 PDF를 얻을. oututs이 PDF는 먼저 HTML 응답 헤더 outut해야하는 파일 -하지만이 작업은하지 않을 수 있습니다.

    간단히 말해서, 이것은 내가 사용하는 출력 코드는 다음과 같습니다

    //We send to a browser
    header('Content-Type: application/pdf');
    if(headers_sent())
        $this->Error('Some data has already been output, can\'t send PDF file');
    header('Content-Length: '.strlen($this->buffer));
    header('Content-Disposition: inline; filename="'.$name.'"');
    header('Cache-Control: private, max-age=0, must-revalidate');
    header('Pragma: public');
    ini_set('zlib.output_compression','0');
    echo $this->buffer;
    

    내가 출력이 요구하고있는 PDF가 마지막에 해당 도이 될 수있는 코드라고 생각하는 경향거야하지만 그래서, AJAX 호출 이리저리 전체 응답 텍스트를 보지 않고 정말, 그것이 무엇인지 확신 할 수 없다 위의 코드에 라인. 브라우저가 바로 응답 텍스트를 해결할 수있는 다음이 방법 - - 당신이 그것의 코드를 제어 할 경우에, 나는 헤더를 설정하려고 할 것입니다 당신이 그것을에 일을 귀찮게 할 필요가 없습니다.

    나는 단순히 다음의 SRC로 구성된 URL을 사용하여 원하는 SIE, ID 등의 iframe을위한 HTML을 표현하는 문자열을 만든 내가 (시간표)을 원하는 PDF 파일에 대한 URL을 건설했다. 최대한 빨리 구축 된 HTML 문자열에 사업부의 내부 HTML을 설정 한 브라우저가 PDF 파일을 요청하고이를받은 때를 표시.

    function  showPdfTt(studentId)
    {
        var url, tgt;
        title = byId("popupTitle");
        title.innerHTML = "Timetable for " + studentId;
        tgt = byId("popupContent");
        url = "pdftimetable.php?";
        url += "id="+studentId;
        url += "&type=Student";
        tgt.innerHTML = "<iframe onload=\"centerElem(byId('box'))\" src='"+url+"' width=\"700px\" height=\"500px\"></iframe>";
    }
    

    편집 : 언급하는 것을 잊었다 -이 방법으로 바이너리의 PDF의를 보낼 수 있습니다. 에 포함 된 스트림 인코딩 ASCII85 또는 16 진수가 될 필요가 없습니다. 나는 PDF의 모든 스트림에 flate를 사용하고는 벌금을했다.


  7. 7.브라우저를 검색 및 다른 브라우저 아래로 크롬과 사용 PDF.js에 대한 데이터-URI를 사용합니다.

    브라우저를 검색 및 다른 브라우저 아래로 크롬과 사용 PDF.js에 대한 데이터-URI를 사용합니다.

    PDFJS.getDocument(url_of_pdf)
    .then(function(pdf) {
        return pdf.getPage(1);
    })
    .then(function(page) {
        // get a viewport
        var scale = 1.5;
        var viewport = page.getViewport(scale);
        // get or create a canvas
        var canvas = ...;
        canvas.width = viewport.width;
        canvas.height = viewport.height;
    
        // render a page
        page.render({
            canvasContext: canvas.getContext('2d'),
            viewport: viewport
        });
    })
    .catch(function(err) {
        // deal with errors here!
    });
    

  8. 8.당신은 자바 스크립트에서 PDF 파일을 만들 수 PDF.js을 사용할 수 있습니다 ...이 코드에 쉽게 ... 이것이 당신의 의심을 해결하기를 바란다!

    당신은 자바 스크립트에서 PDF 파일을 만들 수 PDF.js을 사용할 수 있습니다 ...이 코드에 쉽게 ... 이것이 당신의 의심을 해결하기를 바란다!

    문안 인사!

  9. from https://stackoverflow.com/questions/12876000/how-to-build-pdf-file-from-binary-string-returned-from-a-web-service-using-javas by cc-by-sa and MIT license