Bagaimana cara memasukkan Gambar dalam PDF menggunakan iText dan mengunduh ke mesin klien?

Saya menggunakan jdbc untuk mengambil data dari database dan kemudian menggunakan iText saya membuat file PDF yang dapat diunduh di mesin klien. Aplikasi dikodekan dalam html/jsp dan berjalan di Apache Tomcat.

Saya menggunakan response.getOutputStream untuk segera membuat file PDF keluaran.

Masalahnya adalah sekarang, saya tidak dapat menyisipkan gambar ke dalam dokumen ini karena ada kesalahan yang terjadi

getOutputStream() telah dipanggil untuk respons ini

Saya memahami bahwa saya memanggil Outputstream lagi saat memasukkan gambar dan karena itu terjadi kesalahan

Bagaimana cara menyisipkan gambar ke dalam dokumen dan tetap menghasilkan file PDF dinamis yang dapat diunduh oleh mesin klien?

Kode yang relevan:

response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment; filename=\"LicenseInfo.pdf\""); // Code 1
Document document = new Document();

PdfWriter.getInstance(document, response.getOutputStream()); // Code 2

Image image = Image.getInstance("logo.jpg");

document.open();

document.add(image);

person Sahil Sharma    schedule 13.06.2013    source sumber


Jawaban (1)


Maaf, Anda tidak menampilkan kode apa pun yang relevan, karena kode yang Anda salin/tempel tidak bertanggung jawab atas pengecualian yang Anda sebutkan.

Bagian yang relevan adalah Anda menggunakan JSP, dan Anda tidak membaca peringatan penting mengenai JSP yang tercantum dalam bab 9 dari my buku.

Saat Anda menulis JSP, Anda mungkin menyukai spasi dan lekukan, misalnya:

<% //a line of code %>
<%
   // some more code
%>
<% // another line of code %>
<%
   response.getOutputStream();
%>

Ini akan selalu menyebabkan pengecualian "getOutputStream() has already been called for this response" terlepas dari apakah Anda menggunakan iText atau tidak. Metode getOutputStream() dipanggil saat Anda memperkenalkan karakter spasi putih pertama di skrip JSP Anda.

Untuk memperbaikinya, Anda perlu menghapus semua spasi:

<% //a line of code %><%
   // some more code
%><% // another line of code %><%
   response.getOutputStream();
%>

Tidak ada satu karakter pun yang diterima di luar penanda <% dan %>. Seperti yang dijelaskan dalam manual JSP yang lebih baik, Anda tidak boleh menggunakan JSP untuk membuat file biner. Mengapa tidak? Karena JSP memperkenalkan karakter spasi di tempat sembarang dalam file biner Anda. Itu menghasilkan file yang rusak. Gunakan Servlet sebagai gantinya!

person Bruno Lowagie    schedule 13.06.2013
comment
terima kasih atas saran Anda Bruno, namun saya harus menggunakan JSP (tidak ada pilihan) kedua saya mencoba menghilangkan spasi. Ketika saya melakukan itu, file pdf saya dibuat tetapi saya tidak dapat membukanya karena dikatakan datanya rusak. - person Sahil Sharma; 13.06.2013
comment
saya menggunakan yang berikut ini untuk menghilangkan spasi ‹%@ halaman trimDirectiveWhitespaces=true %› - person Sahil Sharma; 13.06.2013
comment
Eh... itu sepenuhnya salah; Anda perlu menghapus spasi secara manual dari file JSP Anda! - person Bruno Lowagie; 13.06.2013