Java用itext HTML导PDF中文不显示问题

wxrkyd 2016-12-26 09:30:11
	  public EiInfo ccc(EiInfo eiInfo) throws com.itextpdf.text.DocumentException, IOException  {  
toHTML(eiInfo);
String HTML="E:\\tc.html";
String DEST="E:\\final.pdf";
InputStream in=null;
try {
in = new FileInputStream(new File(HTML));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// com.itextpdf.text.pdf.BaseFont bChinese = com.itextpdf.text.pdf.BaseFont.createFont("C:/Windows/Fonts/msyh.ttf",com.itextpdf.text.pdf.BaseFont.IDENTITY_H,com.itextpdf.text.pdf.BaseFont.NOT_EMBEDDED); //设置字体
// com.itextpdf.text.Font FontChinese = new com.itextpdf.text.Font(bChinese, 12, Font.NORMAL);
com.itextpdf.text.Document document=new com.itextpdf.text.Document(com.itextpdf.text.PageSize.A4,9,9,9,9);
com.itextpdf.text.pdf.PdfWriter writer=null;
try {
writer = com.itextpdf.text.pdf.PdfWriter.getInstance(document, new FileOutputStream(new File(DEST)));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (com.itextpdf.text.DocumentException e) {
e.printStackTrace();
}
document.open();
try {
XMLWorkerHelper.getInstance().parseXHtml(writer, document, in, Charset.forName("UTF-8"),new MyFont());
} catch (IOException e) {
e.printStackTrace();
}
document.close();
return eiInfo;
}


public EiInfo toHTML(EiInfo eiInfo) throws IOException{
String html=(String)eiInfo.get("code");
html=html.replaceAll("<script.*?(?<=/script>)", "");
System.out.println("123");
StringBuilder sb = new StringBuilder();
File file=new File("E:\\report.html");
if(file.exists()){
file.delete();
file.createNewFile();
}
PrintStream printStream = new PrintStream(new FileOutputStream("E:\\report.html"));
sb.append(html);
printStream.println(sb.toString());
return eiInfo;
}


class MyFont extends FontFactoryImp {
com.itextpdf.text.pdf.BaseFont baseFont =null;
public MyFont() {
try {
baseFont =com.itextpdf.text.pdf.BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",com.itextpdf.text.pdf.BaseFont.NOT_EMBEDDED);
System.out.println("2222222");
} catch (com.itextpdf.text.DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public com.itextpdf.text.Font getFont(String fontName, String encoding, boolean embedded, float size, int style, BaseColor color, boolean cached) {
System.out.println("11111111111");
return new com.itextpdf.text.Font(baseFont, 9, com.itextpdf.text.Font.NORMAL);
}
}
...全文
4560 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
河马不懂英语 2019-04-16
  • 打赏
  • 举报
回复 1
建议看 https://www.jianshu.com/p/6341014659f2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation 中文显示那可以这样写 XMLWorkerHelper.getInstance().parseXHtml(writer, document, new FileInputStream(htmlPath), Charset.forName("UTF-8"), new SimsunFontProvider());
weixin_42075120 2019-01-21
  • 打赏
  • 举报
回复
引用 6 楼 肃杀风萧萧 的回复:
[quote=引用 5 楼 mideming123456 的回复:]
最重要的一点是 html 一定要设置字体
<body style = "font-family: SimSun;" >
我已经靠这个解决了


这个不错,已解决!![/quote]

感谢,已解决
MyKelly728 2018-09-14
  • 打赏
  • 举报
回复
请问在java main函数中中文可以显示,但是集成到web项目, ssm框架中中文就不显示了,请问有遇到过吗?
  • 打赏
  • 举报
回复
为什么我的不行 显示不了 是不是服务器 不存在这些字体?
肃杀风萧萧 2017-08-06
  • 打赏
  • 举报
回复
引用 5 楼 mideming123456 的回复:
最重要的一点是 html 一定要设置字体 <body style = "font-family: SimSun;" > 我已经靠这个解决了
这个不错,已解决!!
mideming123456 2017-07-27
  • 打赏
  • 举报
回复
最重要的一点是 html 一定要设置字体 <body style = "font-family: SimSun;" > 我已经靠这个解决了
黑白配_ 2017-07-13
  • 打赏
  • 举报
回复
解决了吗 同样的问题
wxrkyd 2016-12-26
  • 打赏
  • 举报
回复
引用 1 楼 bcsflilong 的回复:
public class PDF2Chinese    
{    
    public static void main(String[] args) throws DocumentException, IOException    
    {    
        Document document = new Document();    
        OutputStream os = new FileOutputStream(new File("chinese.pdf"));    
        PdfWriter.getInstance(document,os);    
        document.open();    
        //方法一:使用Windows系统字体(TrueType)    
        BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法二:使用iTextAsian.jar中的字体    
        //BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法三:使用资源字体(ClassPath)    
        ////BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        Font font = new Font(baseFont);    
        document.add(new Paragraph("解决中文问题了!",font));    
        document.close();    
    }    
}    
我这个是先把前台导出HTML,在吧HTML导PDF,所以在哪里设置字体,不是用itext写入内容,而是直接把HTML导PDF,我试了好多网上的方法,都不行
wxrkyd 2016-12-26
  • 打赏
  • 举报
回复
引用 1 楼 bcsflilong 的回复:
public class PDF2Chinese    
{    
    public static void main(String[] args) throws DocumentException, IOException    
    {    
        Document document = new Document();    
        OutputStream os = new FileOutputStream(new File("chinese.pdf"));    
        PdfWriter.getInstance(document,os);    
        document.open();    
        //方法一:使用Windows系统字体(TrueType)    
        BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法二:使用iTextAsian.jar中的字体    
        //BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法三:使用资源字体(ClassPath)    
        ////BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        Font font = new Font(baseFont);    
        document.add(new Paragraph("解决中文问题了!",font));    
        document.close();    
    }    
}    
都试过了
bcsflilong 2016-12-26
  • 打赏
  • 举报
回复
public class PDF2Chinese    
{    
    public static void main(String[] args) throws DocumentException, IOException    
    {    
        Document document = new Document();    
        OutputStream os = new FileOutputStream(new File("chinese.pdf"));    
        PdfWriter.getInstance(document,os);    
        document.open();    
        //方法一:使用Windows系统字体(TrueType)    
        BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法二:使用iTextAsian.jar中的字体    
        //BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法三:使用资源字体(ClassPath)    
        ////BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        Font font = new Font(baseFont);    
        document.add(new Paragraph("解决中文问题了!",font));    
        document.close();    
    }    
}    

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧