2015年2月8日日曜日

JSPでPDF出力

JSPで、印刷をきれいに行いたいときはPDF出力が便利だ.itextというライブラリが使える。
いくつか、注意点があるようだ。
・%>と<%の間に、文字が入るとだめなようだ。
・全角表示のためには、Font font=new Font( BaseFont.createFont( "HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED ),40 );といったfontの用意が必要。
・UTF-8を扱うための文字コード処理は、よくわからなかったが、以下のようにしたら、うまくいったようだ。 POSTで受け取ったnaiyoというデータを処理している。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%@ page import="java.net.*,java.io.*, com.itextpdf.text.Document,com.itextpdf.text.DocumentException,com.itextpdf.text.Font,com.itextpdf.text.PageSize, com.itextpdf.text.Paragraph,com.itextpdf.text.pdf.BaseFont,com.itextpdf.text.pdf.PdfWriter"%><%

response.setContentType( "application/pdf" );

Font font=new Font( BaseFont.createFont( "HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED ),40 );

Document document = new Document();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
PdfWriter.getInstance( document, buffer );
document.open();

request.setCharacterEncoding("UTF-8");
String naiyo=new String(request.getParameter("naiyo").getBytes("UTF-8"),"UTF-8");

Paragraph preface = new Paragraph();
preface.add( new Paragraph(naiyo, font));
document.add(preface);
document.close();

DataOutput output = new DataOutputStream( response.getOutputStream() );
byte[] bytes = buffer.toByteArray();
response.setContentLength(bytes.length);
for( int i = 0; i < bytes.length; i++ ) { output.writeByte( bytes[i] ); }
%>

以下のリンクを参照させていただきました。
http://atmarkplant-dj.blogspot.jp/2012/04/java-pdf-itext2.html
http://okwave.jp/qa/q7682351.html

0 件のコメント:

コメントを投稿