PDF中文处理个问题?

HZC565835435 2011-10-10 04:26:54
最近项目中需要将jsp界面转成PDF,现在最苦恼的是 转成的PDF 中文显示不了,或者是一堆 ???号,还有就是文本框中的值无法展示在PDF文件中,有过这方面开发经验的前辈们,欢迎指点,小弟先谢过了!
在网上找到的处理老是报错:如下:
plumbing.render INFO:: Using CSS implementation from: org.xhtmlrenderer.context.StyleReference
plumbing.exception WARNING:: Unhandled exception. tables
org.xhtmlrenderer.util.XRRuntimeException: tables
at org.xhtmlrenderer.pdf.ITextFontResolver.addFont(ITextFontResolver.java:96)
at test.byd.com.dcc.unittest.TestPdf.main(TestPdf.java:114)
Caused by: java.lang.NoSuchFieldException: tables
at java.lang.Class.getDeclaredField(Unknown Source)
at org.xhtmlrenderer.pdf.TrueTypeUtil.extractTables(TrueTypeUtil.java:66)
at org.xhtmlrenderer.pdf.TrueTypeUtil.populateDescription(TrueTypeUtil.java:77)
at org.xhtmlrenderer.pdf.ITextFontResolver.addFont(ITextFontResolver.java:94)
... 1 more
plumbing.load INFO:: TIME: parse stylesheets 140ms
plumbing.match INFO:: media = print
plumbing.match INFO:: Matcher created with 119 selectors
plumbing.exception WARNING:: IO problem for file:/public/global/images/byd_logo.png
...全文
294 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
HZC565835435 2011-10-23
  • 打赏
  • 举报
回复
打错了,谢谢各位,换了个Itext2.08的包 比较好用,搞定了!
HZC565835435 2011-10-23
  • 打赏
  • 举报
回复
谢谢给位,换了个Itext2.08的包 比较好用,搞定了!
随风醉舞 2011-10-14
  • 打赏
  • 举报
回复
以前做练习的时候和LZ遇到过同样的问题,
后来就没有继续下去了!!
zkmzge 2011-10-12
  • 打赏
  • 举报
回复

private static Cell newCell(String str,int align,Color color){
Cell cell=null;
try {
cell = new Cell(new Paragraph(str,setChineseFont()));
cell.setHorizontalAlignment(align);
cell.setUseAscender(false);
cell.setVerticalAlignment(Element.ALIGN_CENTER);//上下居中
cell.setBackgroundColor(color);
//cell.setBorderWidth(1);
} catch (BadElementException e) {
e.printStackTrace();
}
return cell;
}
/**
* 设置中文
* @author maHai
* @return Font
*/
private static Font setChineseFont() {
BaseFont base = null;
Font fontChinese = null;
try {
base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
fontChinese = new Font(base, 12, Font.NORMAL);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fontChinese;
}
这样应该就可以
HZC565835435 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hzc565835435 的回复:]
HTML code









<html>
<head>

<title>公司级管理文件履历表</title>
</head>
<body class="body_center">
<div class="fileTemplate_div">
<div class="div_he">
<div class="div_fl"><img al……
[/Quote]这样的字符串 ,然后将它 生成pdf文档
HZC565835435 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 rest001555 的回复:]
我记得引入中文包之后,还需要在程序中装入中文的时候设置字符集的,,
[/Quote]
楼上说的是这样吧!


BaseFont bfChinese = BaseFont.createFont( "STSongStd-Light" , "UniGB-UCS2-H" , false );
//Font fontChinese = new Font(bfChinese,12,Font.NORMAL,Color.GREEN);
Font fontChinese = new Font(bfChinese , 12 , Font.NORMAL);

Paragraph pf = new Paragraph("eee");
pf.add(new Paragraph("我们的家好大的家",fontChinese));
pf.add(new Paragraph("sfsfsf"));
doc.add(pf);
HZC565835435 2011-10-10
  • 打赏
  • 举报
回复
自己再顶一下!
红拂故人 2011-10-10
  • 打赏
  • 举报
回复
我记得引入中文包之后,还需要在程序中装入中文的时候设置字符集的,,
HZC565835435 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lujun1985 的回复:]
依稀记得iText处理亚洲字体需要引用一个jar
名字忘了,大概叫iTextAsian什么的
[/Quote]
楼上,这个包已经引入了,还是不行
HZC565835435 2011-10-10
  • 打赏
  • 举报
回复









<html>
<head>

<title>公司级管理文件履历表</title>
</head>
<body class="body_center">
<div class="fileTemplate_div">
<div class="div_he">
<div class="div_fl"><img alt="" src="/public/global/images/byd_logo.png" width="72" height="46" style="float:left;" /> </div>
</div>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="fileTemplate_table">
<tr>
<td class="ft_tdfl st_5"><strong>文件名称</strong></td>
<td colspan="3"><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
<td class="ft_tdfl st_5"><strong>文件编号</strong></td>
<td><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
</tr>
<tr>
<td class="ft_tdfl st_5" width="15%"><strong>文件层级</strong></td>
<td width="20%"><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
<td class="ft_tdfl st_5" width="15%"><strong>版本号</strong></td>
<td width="20%"><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
<td class="ft_tdfl st_5" width="15%"><strong>页次</strong></td>
<td width="15%" class="st_5">1/<input id="" type="text" name="textfield5" class="text_page st_5" /></td>
</tr>
</table>

<table width="100%" border="0" cellspacing="0" cellpadding="0" class="fileTemplate_table" style="margin-top:90px;">
<tr>
<td class="ft_tdfl st_5">编制部门:</td>
<td colspan="3"><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
</tr>
<tr>
<td class="ft_tdfl st_5">适用范围:</td>
<td colspan="3"><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
</tr>
<tr>
<td class="ft_tdfl st_5">拟稿人:</td>
<td colspan="3"><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
</tr>
<tr>
<td class="ft_tdfl st_5">发行:</td>
<td colspan="3"><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
</tr>
<tr>
<td class="ft_tdfl st_5">受控状态:</td>
<td width="40%" class="st_5"><label></label>
<input id="" name="" type="checkbox" alt="" class="checkbox_css"/> 非受控
<input id="" name="" type="checkbox" alt="" class="checkbox_css"/> 受控
</td>
<td class="ft_tdfl st_5">受控号:</td>
<td width="20%"><input id="" type="text" name="textfield5" class="text_comFRT st_5" /></td>
</tr>
<tr>
<td class="ft_tdfl st_5">秘密等级:</td>
<td colspan="3" class="st_5"><label></label>
<input id="" name="" type="checkbox" alt="" class="checkbox_css"/> 绝密
<input id="" name="" type="checkbox" alt="" class="checkbox_css"/> 机密
<input id="" name="" type="checkbox" alt="" class="checkbox_css"/> 秘密
<input id="" name="" type="checkbox" alt="" class="checkbox_css"/> 一般
</td>
</tr>
</table>

<div class="fileTemplate_fl st_5">文件发行/修订履历</div>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="fileTemplate_table">
<tr>
<td class="ft_tdfl st_5">版本号</td>
<td class="ft_tdfl st_5">生效日期</td>
<td class="ffl_tdfl st_5">修改内容</td>
<td class="ft_tdfl st_5">拟稿</td>
<td class="ft_tdfl st_5">审核</td>
<td class="ft_tdfl st_5">批准</td>
</tr>

<tr>
<td><input id="" type="text" name="textfield5" class="text_comFRT st_5" value="A/49" /><span style="display:block;">A/49</span></td>
<td><input id="" type="text" name="textfield5" class="text_comFRT st_5" value="Mon Oct 10 16:21:06 CST 2011" />Mon Oct 10 16:21:06 CST 2011</td>
<td><textarea id="" name="textarea2" rows="1" class="textarea_css st_5" >ceshi</textarea>ceshi</td>
<td><input id="" type="text" name="textfield5" class="text_comFRT st_5" value="xiaohe" />xiaohe</td>
<td><input id="" type="text" name="textfield5" class="text_comFRT st_5" value="xiaohe" />xiaohe</td>
<td><input id="" type="text" name="textfield5" class="text_comFRT st_5" value="xiaohe" />xiaohe</td>
</tr>

</table>
<div class="comFRT_footer">@比亚迪股份有限公司 版权所有</div>
</div>
</body>
</html>
lujun1985 2011-10-10
  • 打赏
  • 举报
回复
依稀记得iText处理亚洲字体需要引用一个jar
名字忘了,大概叫iTextAsian什么的
HZC565835435 2011-10-10
  • 打赏
  • 举报
回复
源码如下:网上找的 调试,这里 fontResolver.addFont("C:/Windows/Fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);抛异常

public static void main(String[] args) throws Exception {
String inputFile = "D:/pdfs.xhtml";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = "D:/firstdochhhh.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

// 解决图片的相对路径问题
// renderer.getSharedContext().setBaseURL("file:/D:/Work/Demo2do/Yoda/branch/Yoda%20-%20All/conf/template/");
renderer.layout();
renderer.createPDF(os);

os.close();
}

81,092

社区成员

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

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