apache Fop 2.1 支持中文

apache Fop 2.1 支持中文

Apache Fop可以把xsl-fo格式、xml、xslt转换pdf文件。其中关键点就是熟悉xsl-fo语法和xslt

在使用的过程,遇到了fop中文转换的问题,通过查找资料,和官方例子解决了

apache fop 2.1 mavne 仓库地址

      
        org.apache.xmlgraphics
        fop
        2.1
    

建议从官网下载fop,里面包含了xsl-fo的语法和例子,下面就是官网的下载

http://mirrors.hust.edu.cn/apache/xmlgraphics/fop/binaries/fop-2.1-bin.zip

官方例子

import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.MimeConstants;

public static void convertFO2PDF()throws IOException, SAXException, ConfigurationException{

//读取字体配置文件,配置中文

FopFactory  fopFactory =Fop Factory.newInstance(new File("C:/Temp/bar.conf.xml"));  

//输出pdf文件路径
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(“C:/Temp/myfile.pdf”)));

try {
// Step 3: Construct fop with desired output format
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

// Step 4: Setup JAXP using identity transformer
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(); // identity transformer

// Step 5: Setup input and output for XSLT transformation
// Setup input stream
Source src = new StreamSource(new File("C:/Temp/myfile.fo"));

// Resulting SAX events (the generated FO) must be piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());

// Step 6: Start XSLT transformation and FOP processing
transformer.transform(src, res);

} finally {
//Clean-up
out.close();
}

网上下载中文字体,通过fop自带的工具类,生成xml文件,fop好像只支持ttf格式的字体,可以生成fop识别的字体文件

代码如下

String[] parameters = {
“-ttcname”,
“NotoSansCJK-Black”,
“xxx.ttf”,
xxx.xml文件}
TTFReader.main(parameters);

apache Fop 2.1 支持中文_第1张图片

配置bar.conf.xml文件的内容

apache Fop 2.1 支持中文_第2张图片

方正宋三简体.xml文件是我用工具生成xml
然后可以在fop中调用Barcode字体,
apache Fop 2.1 支持中文_第3张图片

文件我都是用的绝对路径,官网可以用相对路径,可是我没试成功 ,希望看到这篇文章的大神,可以帮我解决下这个问题 ,其中我用的Freemarker+FOP 生成自定义pdf的内容

xsl-fo详细教程:https://www.antennahouse.com/XSLsample/FOsample.htm

最后的结果

apache Fop 2.1 支持中文_第4张图片

你可能感兴趣的:(apache-Fop)