복붙노트

[SPRING] 새 창에서 pdf 스트림보기

SPRING

새 창에서 pdf 스트림보기

나는 클라이언트에서 보여주고 싶은 PDF 문서를 서버에 생성하고있다. 서버 측은 다음과 같습니다.

ByteArrayOutputStream baos = generatePDF();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=file.pdf");
response.setContentLength(baos.size());
baos.writeTo(response.getOutputStream());

클라이언트에서 PDF를 가져 오려면 다음 코드를 사용합니다.

$.ajax({
    type: "POST",
    url: url,
    data: {"data": JSON.stringify(myData)},
    success: function(data, textStatus, jqXHR) {
        window.open("data:application/pdf," + escape(data));
    },
    error: function(jqXHR) {
        showError("...");
    }
});

새로운 창은 열렸지만 PDF는 표시되지 않습니다. 항상 빈 문서로 보입니다.

그럼에도 불구하고 클라이언트가 다음과 같이 보이는 경우 제대로 작동합니다.

var form = $("<form target='_blank'>").attr({
    action : myURL,
    method : "POST"
});
var input1 = $("<input type='hidden'>").attr({
    "name": "data",
    value: JSON.stringify(myData)
});

form.append(input1);
$("body").append(form);
form.submit();
form.remove();

하지만 나는 오류를 관리해야하기 때문에 두 번째 방법을 사용할 수 없으며 form.submit ()을 사용하여이를 수행 할 수 없다.

PDF에 어떤 일이 일어나고 있는지 알고 싶습니까?

해결법

  1. ==============================

    1.pdf 스트림의 base64 문자열을 가져와 응답에 전달할 수 있습니다.

    pdf 스트림의 base64 문자열을 가져와 응답에 전달할 수 있습니다.

    그리고 방법 변경

    $.ajax({
        type: "POST",
        url: url,
        data: {"data": JSON.stringify(myData)},
        success: function(data, textStatus, jqXHR) {
            var pdfWin= window.open("data:application/pdf;base64, " + data, '', 'height=650,width=840');
            // some actions with this win, example print...
        },
        error: function(jqXHR) {
            showError("...");
        }
    });
    
  2. ==============================

    2.다음을 사용하여 시도해보십시오.

    다음을 사용하여 시도해보십시오.

    dataType: "application/pdf",
    success: function(data, textStatus, jqXHR) {
        window.open(escape(data), "Title", "");
    },
    
  3. ==============================

    3.이 비동기를 수행 할 수 없지만이 js는 첨부 파일을 반환합니다.

    이 비동기를 수행 할 수 없지만이 js는 첨부 파일을 반환합니다.

    $ ( '