DBから画像にアクセスしてPDFでレンダリングしようとしています。以下はDBから画像を取得するための私のサーブレットです。
public class ImageDownloadServlet extends HttpServlet
{
private Connection connection = null;
private Statement stmt = null;
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
try {
Integer imageId=Integer.parseInt(req.getParameter("imageId").toString());
connection = //creating connection
stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT IMG_BLOB FROM ImageTable WHERE img_id = "+imageId);
rs.next();
Blob b=rs.getBlob(1);
resp.setContentType("image/jpeg");
resp.setContentLength((int) b.length());
InputStream is = b.getBinaryStream();
OutputStream os = resp.getOutputStream();
byte buf[] = new byte[(int) b.length()];
is.read(buf);
os.write(buf);
os.close();
stmt.close();
connection.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
このコードは正常に機能しており、CKEditor で画像を取得しています。しかし、PDF を作成しようとしている間、このサーブレットは呼び出されていません。私のweb.xmlは
<servlet>
<description></description>
<display-name>ImageDownloadServlet</display-name>
<servlet-name>ImageDownloadServlet</servlet-name>
<servlet-class>test.ImageDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageDownloadServlet</servlet-name>
<url-pattern>/tesing/Image</url-pattern>
</servlet-mapping>
PDFを作成するための私のコードは
File file = new File(D:/satz/sat.pdf);
FileOutputStream fos=new FileOutputStream(file);
Document doc=new Document(PageSize.A4, 50, 50, 70, 130);
PdfWriter pdfWriter=PdfWriter.getInstance(doc, fos);
String pdfString="<html><body>hello<img src='/tesing/Image?imageId=1' alt='' /></body></html>";
doc.open();
XMLWorkerHelper worker=XMLWorkerHelper.getInstance();
ByteArrayInputStream is = new ByteArrayInputStream(pdfString.getBytes());
worker.parseXHtml(pdfWriter, doc, is);
doc.close();
私の問題は、PDF の作成中にこのサーブレットを呼び出さないことです。私はitextpdf-5.4.4.jar
andxmlworker-5.4.1.jar
とSpring MVCを使用しています。
更新RAD と Tomcat 7.0 サーバーを使用している場合、フル パスはサーブレットを呼び出し、画像付きの PDF を生成します。しかし、RAD と Websphere 8.5 を使用している場合、サーブレットはまったく呼び出されません。