使印地文显示在使用JSP创建的pdf上 [英] Getting hindi to display on pdf created with JSP

查看:82
本文介绍了使印地文显示在使用JSP创建的pdf上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page trimDirectiveWhitespaces="true" %>
    <%@page import="com.itextpdf.text.Document"%>
    <%@page import="com.itextpdf.text.Paragraph"%> 
   <%@page import="com.itextpdf.text.PageSize"%>
   <%@ page import="javax.servlet.http.*,javax.servlet.*,com.itextpdf.text.DocumentException" %>
   <%@page import="java.io.*,java.text.SimpleDateFormat"%>
   <%@page import="java.sql.*,java.nio.charset.Charset"%>
   <%@ page import="com.itextpdf.tool.xml.ElementHandler,java.util.List,java.util.Arrays,java.util.Collections,java.util.*,com.itextpdf.text.pdf.*,com.itextpdf.tool.xml.ElementList,com.itextpdf.text.Rectangle,com.itextpdf.text.Element,com.itextpdf.text.*,com.itextpdf.text.Font,java.awt.Color,com.itextpdf.text.Font.FontFamily,java.util.Date,java.text.*,com.itextpdf.tool.xml.XMLWorkerHelper" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 
String date=request.getParameter("user");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat myFormat = new SimpleDateFormat("EEE,dd MMM yyyy");
final java.util.Date dtt = df.parse(date);
final String ds = myFormat.format(df.parse(date));

class HeaderAndFooter extends PdfPageEventHelper {
   private String name = "";
   protected Phrase footer;
   protected Phrase header;
   Font headerFont = new Font(FontFamily.COURIER, 13, Font.UNDERLINE);
   Font footerFont = new Font(FontFamily.HELVETICA, 11, Font.BOLD);
   String date1;
   public HeaderAndFooter(String name) {
    super();
    this.name = name;
    header = new Phrase("***** Header *****");
    footer = new Phrase("**** Footer ****");
  }

  @Override
   public void onEndPage(PdfWriter writer, Document document) {
     PdfContentByte cb = writer.getDirectContent();
     //header content
     String headerContent =name;
     //header content
     String footerContent = headerContent;
  //date selection
     ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase("Date:"+ds,headerFont), document.leftMargin() - 1, document.top() + 18, 0);
     }
  }
OutputStream output=response.getOutputStream();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=details.pdf");
try{
    Document document = new Document(PageSize.A4);
PdfWriter writer=PdfWriter.getInstance(document, output);
document.open();
writer.setPageEvent(new HeaderAndFooter(date));
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yre", "root", "root");
Statement st=con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
List arrlist = new ArrayList();
ResultSet rsta=st.executeQuery("Select * from yu where date='"+date+"' ");
int interval=0;
while(rsta.next()){
interval=rsta.getInt("inter");
}  
System.out.println(interval);
ResultSet rs=st.executeQuery("SELECT * FROM ur_start2 where date='"+date+"' ");
 while(rs.next()){
 arrlist.add(rs.getString("data"));
 }  
for(int i=0;i<interval+1;i++){
  String str =(String) arrlist.get(i);
  worker.parseXHtml(writer, document, new StringReader("<html><head></head><body>"+str+"<br></br><br></br></body></html>"));
}
document.close();
writer.flush();
writer.close();
output.close();
}catch(IOException e){e.printStackTrace();} 
%>
</body>
</html>

这仅显示了pdf中的英文字符.而印地文字体不可见.

我在印地语中输入的所有内容也会在印地语的印地文中检索回来.但是在pdf上,我无法在印地语中检索它.

我应该怎么做才能在印地语中检索它?

解决方案

即使最新的iText版本也不支持Devanagari脚本,也请参考这里

使用以上引用输出:

新印地语中的PDF"在此处显示为文本

This is the code I have

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page trimDirectiveWhitespaces="true" %>
    <%@page import="com.itextpdf.text.Document"%>
    <%@page import="com.itextpdf.text.Paragraph"%> 
   <%@page import="com.itextpdf.text.PageSize"%>
   <%@ page import="javax.servlet.http.*,javax.servlet.*,com.itextpdf.text.DocumentException" %>
   <%@page import="java.io.*,java.text.SimpleDateFormat"%>
   <%@page import="java.sql.*,java.nio.charset.Charset"%>
   <%@ page import="com.itextpdf.tool.xml.ElementHandler,java.util.List,java.util.Arrays,java.util.Collections,java.util.*,com.itextpdf.text.pdf.*,com.itextpdf.tool.xml.ElementList,com.itextpdf.text.Rectangle,com.itextpdf.text.Element,com.itextpdf.text.*,com.itextpdf.text.Font,java.awt.Color,com.itextpdf.text.Font.FontFamily,java.util.Date,java.text.*,com.itextpdf.tool.xml.XMLWorkerHelper" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 
String date=request.getParameter("user");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat myFormat = new SimpleDateFormat("EEE,dd MMM yyyy");
final java.util.Date dtt = df.parse(date);
final String ds = myFormat.format(df.parse(date));

class HeaderAndFooter extends PdfPageEventHelper {
   private String name = "";
   protected Phrase footer;
   protected Phrase header;
   Font headerFont = new Font(FontFamily.COURIER, 13, Font.UNDERLINE);
   Font footerFont = new Font(FontFamily.HELVETICA, 11, Font.BOLD);
   String date1;
   public HeaderAndFooter(String name) {
    super();
    this.name = name;
    header = new Phrase("***** Header *****");
    footer = new Phrase("**** Footer ****");
  }

  @Override
   public void onEndPage(PdfWriter writer, Document document) {
     PdfContentByte cb = writer.getDirectContent();
     //header content
     String headerContent =name;
     //header content
     String footerContent = headerContent;
  //date selection
     ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase("Date:"+ds,headerFont), document.leftMargin() - 1, document.top() + 18, 0);
     }
  }
OutputStream output=response.getOutputStream();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=details.pdf");
try{
    Document document = new Document(PageSize.A4);
PdfWriter writer=PdfWriter.getInstance(document, output);
document.open();
writer.setPageEvent(new HeaderAndFooter(date));
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yre", "root", "root");
Statement st=con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
List arrlist = new ArrayList();
ResultSet rsta=st.executeQuery("Select * from yu where date='"+date+"' ");
int interval=0;
while(rsta.next()){
interval=rsta.getInt("inter");
}  
System.out.println(interval);
ResultSet rs=st.executeQuery("SELECT * FROM ur_start2 where date='"+date+"' ");
 while(rs.next()){
 arrlist.add(rs.getString("data"));
 }  
for(int i=0;i<interval+1;i++){
  String str =(String) arrlist.get(i);
  worker.parseXHtml(writer, document, new StringReader("<html><head></head><body>"+str+"<br></br><br></br></body></html>"));
}
document.close();
writer.flush();
writer.close();
output.close();
}catch(IOException e){e.printStackTrace();} 
%>
</body>
</html>

This gives me only english characters in the displayed pdf.Whereas the hindi font is invisible.

What ever I have typed in hindi is also retrieved back in hindi on textareas.But on pdf I am not able to retrieve it in hindi.

What should I do to retrieve it in Hindi?

解决方案

In all possibility even the latest iText version does not support Devanagari script, reference here.

However, there are alternatives like using awt Graphics2D class, set a font supporting unicode chars and add it to the PDF (not as text though).

Example: here

Output using the above reference:

'New PDF in Hindi' is rendered as the text here

这篇关于使印地文显示在使用JSP创建的pdf上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆