2014-10-19 7 views
1

У меня есть сервлет, потоки в формате PDF, как, например:Отображение поточное PDF в IFRAME

ServletOutputStream out = response.getOutputStream(); 
byte[] pdfByteArray = JasperExportManager.exportReportToPdf(jasperPrintObject);     
response.reset(); 
response.setContentType("application/pdf"); 
response.addHeader("Content-Disposition","inline;filename=temp.pdf"); 
out.write(pdfByteArray, 0, pdfByteArray.length); 
out.flush(); 
out.close(); 

Это прекрасно работает, когда я называю сервлет. Теперь я использую ajax для вызова сервлета и отображения pdf в iframe. Я пытаюсь сделать это так:

$('#form1').on('submit', function(e) { 
    $form = $(this);               
    $.post($form.attr('action'), $form.serialize(), function(responseText) { 
     $('#frm').attr('srcdoc', responseText); 
    }); 
    return false; 
}); 

Функция Iframe однако заканчивается следующими данными: % PDF-1.4% 4 0 OBJ <> поток xKo7 P @ >, I W {襐 m "K I S (C { p ۝ Yv z ~ [ W U7 - QT Uw M K hDpѷ , V ݓ 8 ` { Z ( ((QX % A \ E _ X] wj ^M Q'j nԭ ( ' + . < Fa Jx ~ T < .¸ ( } g Bx ~ ! 0ɟR g i , o' ( >: I Bpt 捎 J5.kR 㢪 В] и {Oj : jT f) Lj X \ IKN63 o T 4g n 9 \ dhI'ss} @

и его заканчивается% EOF. В сервлете я сбросил ответ и установил тип содержимого. Что еще я должен сделать, чтобы PDF отображался правильно?

+0

Похоже, что это может не работать в iframe. См. [This] (http://stackoverflow.com/a/12974315/206883) ответ – ponomandr

+0

Спасибо. Я буду смотреть в него. – user3245747

ответ

1

Я нашел решение вышеуказанной проблемы. Я держал код сервлета, как это, но изменил запрос на следующее:

$('#form1').on('submit', function(e) { 
    $form = $(this); 
    $.post($form.attr('action'), $form.serialize(), function(responseText) { 
     $('#processing2').fadeOut(); 
     $('#frm').attr('src', 'theServlet?x=' + $('#x').val() + '&y=' + $('#y').val());          
    }); 
    return false; 
}); 

Так в основном, вместо того, чтобы использовать данные в responseText, я вновь вызвать сервлет при прохождении параметров. Конечно, это означает, что фактический код должен быть в методе doGet сервлета.

Смежные вопросы