首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

【Java】利用HTML生成PDF之有关问题整理

2012-12-22 
【Java】利用HTML生成PDF之问题整理首先,技术为apache 的FOP,初级的问题我就不写了,下面记录一下遇到的问题

【Java】利用HTML生成PDF之问题整理

首先,技术为apache 的FOP,初级的问题我就不写了,下面记录一下遇到的问题的解决方案:

?

中文乱码问题

这个问题网上的解决方案非常之多,也不详细描述了,每个使用FOP的都会遇见,还是记录一下。

在fop.xconf文件中,修改pdf相关的render,添加中文字体配置

?

?当然你还使用其他的方式来添加字体配置,见http://xmlgraphics.apache.org/fop/0.95/configuration.html

?其中的.xml文件是根据fop的字体读取类生成的,例如:

? 这里的sinsunb.xml就是根据网上下载的粗宋体文件(simsunb.ttf)生成的,附件为一个可用的粗宋体文件,以及对应的xml文件。使用这些字体,生成的pdf就会有你下载的粗宋体的样式了,不过好不好看就再说了。

?

2,另一种方法,也就是我采用的办法,宋体的粗体其实可以用黑体代替,而fop没有自动进行这种关联,需要我们自己配置了,很简单

?将粗体都交给黑体处理,效果比上一种方式好一点。

?附件上传了一些处理过的宋体(simsun.xml.rar)、黑体(simhei.xml.rar)、隶书(simli.xml.rar)、楷体(simkai.xml.rar),对应的字体(ttf或ttc)文件太大,自己直接去C:/windows/fonts/目录下寻找即可。

?

背景图片、水印问题

有时候报告需要添加背景图片、或者水印,这时候需要修改fo文件,由于我们是直接根据html生成的,所以我们修改xsl-fo文件就行了。

我是用的xsl文件没有处理<html:body background=""/>属性,所以直接在xsl的页面配置中添加背景图片。

?上面的代码中,在<fo:region-body>添加了background-image="url('work/report/bg_header.jpg')"属性,因此它生成的pdf就具有背景图片,当然如果你把bg_header.jpg透明度降低,就会获得水印效果了。

?上面的代码还区别实现了首页和其他页的背景图片分别设置的功能,在

?中指定page-position为first时使用first的master,而其他页使用normal的master。

?

页眉图片、页脚图片问题

熟悉fo的应该知道fo的页面布局,也就是layout,在定义好了layout时候,页面将分为上、下、左、右和中五个区域,上对应的就是页眉,所谓的page-header,下对应的就是页脚,所谓的page-footer,上下的距离和间距都可以在xsl文件设置。这里我们对页眉进行图片设置,

?使用刚刚定义的standard page-squence,在

以获得页眉效果,这里也可以同时再添加文字,具体效果自己摸索了。

?

?

复制、打印、编辑权限问题

这个就比较容易了,通过fop user agent进行设置就行了。

  <xsl:template match="html:span">    <fo:inline>      <xsl:attribute name="role">      <xsl:value-of select="concat('html:', local-name())"/>   </xsl:attribute>   <!-- 处理span 内的文字 -->      <xsl:apply-templates/>    </fo:inline>  </xsl:template>
?

?

1 楼 enet_java 2011-01-13   请教一个问题,因为添加了字体的样式,导致生成pdf的文件占用空间较大,LZ是怎么解决的呀?
PDF有没有API对内容进行压缩呀?

多谢了!!! 2 楼 salever 2011-01-14   enet_java 写道请教一个问题,因为添加了字体的样式,导致生成pdf的文件占用空间较大,LZ是怎么解决的呀?
PDF有没有API对内容进行压缩呀?

多谢了!!!

我觉得不是字体的原因吧,是不是你添加了很多图片导致pdf太大?

FOP好像没有专门进行pdf压缩的api,不过你可以看看其他的pdf java api,比如pdf box 3 楼 enet_java 2011-01-14   图片过大是一个原因;后来自己看了看配置文件。是因为配置了
引用<!-- encodes binary data with hex representation (default off)
This filter is not recommended as it doubles the data size -->
<value>ascii-hex</value>


导致体积增大了很多。

楼主的文章写得很好,多谢了。 4 楼 donghustone 2011-07-08   请问它支不支持css样式表呢? 5 楼 salever 2011-07-11   donghustone 写道请问它支不支持css样式表呢?
这个不太清楚,我没有试过呢,你去fop的官网看看

热点排行