java 生成pdf 乱码_利用java处理fop导出pdf的中文乱码问题解决方案

本文的作用是,生成带中文的加密pdf格式的文件,防止被人修改。

在项目下建立docbook-xsl, fo-res, out, sample四个文件夹

docbook-xsl目录: 放从sourceforge上下载的docbook-xsl.zip解压的文件

fo-res目录: 放一些apache fop需要配置的文件(下面会说到)

out目录: 放导出结果

sample目录: 放xml模板

从apache fop项目下载fop,目前是fop0.95, 只要下载binary版就行了,后面的代码都是以fop0.95进行测试的。

解压后将build目录下的fop.jar以及lib目录下的包都加到你项目里,然后将conf下的fop.xconf配置文件放到fo-res目录下,记住这个文件,等会用它。

以宋体 为例,解决中文乱码问题:

第一步

private static void test1() {

String[] parameters = {

“-ttcname”,

“SimSun”,

“c:\\WINDOWS\\Fonts\\simsun.ttc”, “E:\\project-java\\p-eclipse\\newtest\\fo-res\\simsun.xml”, };

TTFReader.main(parameters);

}

执行test1方法,会在fo-res目录下生成一个simsun.xml

常用的中文字体:

simsun.ttc 宋体

simkai.ttf 宋楷

simhei.ttf 黑体

第二步、修改fo-res目录下的fop.xconf文件,在fonts节点下加入或替换下列内容

metrics-url后面的值可以是绝对路径;

经常我们的项目会部署到linux下,没有simsun.ttc文件怎么办呢,只需要把windows下的这个文件拷贝到linux就可以了。

第三步、把模板中使用的宋体字体 修改为font-family =SimSun。

第四步、执行下面的方法生成pdf;

private static void test2(){

try {

System.out.println(“Preparing…”);

File baseDir = new File(“.”);

File outDir = new File(baseDir, “out”);

outDir.mkdirs();

// Setup input and output files

File xmlfile = new File(baseDir, “/fo-res/p.xml”);

File xsltfile = new File(baseDir, “/fo-res/p.xsl”);

File pdffile = new File(outDir, “/sample.pdf”);

File conffile = new File(baseDir, “/fo-res/fop.xconf”);

System.out.println(“Input: XML (” + xmlfile + “)”);

System.out.println(“Stylesheet: ” + xsltfile);

System.out.println(“Output: PDF (” + pdffile + “)”);

System.out.println();

System.out.println(“Transforming…”);

FopFactory fopFactory = FopFactory.newInstance();

FOUserAgent foUserAgent = fopFactory.newFOUserAgent();

/* 1. userPassword: String, may be null

2. ownerPassword: String, may be null

3. allowPrint: true if printing is allowed

4. allowCopyContent: true if copying content is allowed

5. allowEditContent: true if editing content is allowed

6. allowEditAnnotations: true if editing annotations is allowed

*/

foUserAgent.getRendererOptions().put(“encryption-params”, new PDFEncryptionParams(

null, “password”, true, false, false, false));

// Setup output

OutputStream out = new java.io.FileOutputStream(pdffile);

out = new java.io.BufferedOutputStream(out);

try {

//加载配有中文配置的文件

fopFactory.setUserConfig(conffile);

Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

// Setup XSLT

TransformerFactory factory = TransformerFactory.newInstance();

Transformer transformer = factory.newTransformer(new StreamSource(xsltfile));

// Setup input for XSLT transformation

Source src = new StreamSource(xmlfile);

Result res = new SAXResult(fop.getDefaultHandler());

// Start XSLT transformation and FOP processing

transformer.transform(src, res);

} finally {

out.close();

}

System.out.println(“Success!”);

} catch (Exception e) {

e.printStackTrace();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程办公首日企业通讯软件崩溃、紧急扩容,云办公怎么了?

作者 | 阿文责编 | 伍杏玲来源 | 程序人生(ID:coder_life)受新型冠状病毒性肺炎的疫情影响,各地实施了严格的控制手段:封村、封路、封小区、暂停省际、县级、村级班车等措施。1月27日,国务院办公厅发布关于…

我在阿里云做前端

前言 今年是我毕业的第10个年头,半路出家做了前端,title一直是前端,你可以说我很专注,有时候也有些遗憾。一直以来,当别人问起你是做什么的,我说前端或者全栈,别人说:哦&#xff0c…

Mybatis-Plus的SQL语句组拼原理

前言:记录查找自动组拼SQL语句的过程 首先在BaseMapper其中的一个方法下打个断点 在断点显示的值栏找到相关的SQL 发现SQL语句在MappedStatement对象中,而sqlSource存的就是相关的sql语句 然后在MappedStatement这个对象打断点,看看到底是…

云漫圈 | 什么是字符串匹配算法?

作者 | 程序员小灰来源 | 程序员小灰(ID:chengxuyuanxiaohui )————— 第二天 —————什么意思呢?让我们来举一个例子:在上图中,字符串B是A的子串,B第一次在A中出现的位置下标是2&#…

MSSQL实践-数据库备份加密

摘要 在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术、列加密技术带来的查询性能问题以及相应解决方案、行级别安全解决方…

java des加密类_java的DES加密解密辅助类

java的DES加密解密辅助类package temptest;import java.io.IOException;import java.io.UnsupportedEncodingException;import javax.crypto.*;import javax.crypto.spec.*;import sun.misc.BASE64Decoder;public class desencryptiontest {public static void main(String[] a…

js提交java后台,双引号转义为amp;quot;解决办法……StringEscapeUtils.unescapeHtml4完美解决

文章目录一、 问题现象:1.1. 前台数据1.2.后台数据二、 解决方案:2.1. maven依赖2.2. 关键代码2.3. 去空格处理一、 问题现象: 1.1. 前台数据 ryTask.serchData(000000INC20200830000001,2020-10-01,2020-10-21,Project,LSubmitInfo,INC)1.…

Kubernetes 如何打赢容器之战?

Kubernetes 近几年很热门,在各大技术论坛上被炒的很火。它提供了强大的容器编排能力,与此同时 DevOps 的概念也来到大家身边,广大的开发同学也能简单地运维复杂的商业化分布式系统,打破了传统开发和运维之间的界限。 本文会以初学…

一行Python代码能干什么?有意思!

我下班最大的乐趣就是刷抖音一开始刷的都是一些无聊小剧场后来看看能不能刷一些技术上的内容因为本人觉得Java是世界上最好的编程语言可是我在刷抖音的时候刷到了一行Python代码能干什么我突然觉得爱上Python了之前是听说Python比较简单同样的内容Java、C语言需要十几行Python只…

Java问题集锦--The type StringEscapeUtils is deprecated

The type StringEscapeUtils is deprecated” 之前一直使用commons-lang3-3.x.jar 这个jar包里面的 org.apache.commons.lang3.StringEscapeUtils 类来转义特殊字符,但是最近发现使用这个类会出现以下提示: Multiple markers at this line- The type St…

自然语言生成(NLG)的好处是什么,它如何影响BI?

近年来,我们已经看到了大数据的成功应用,但根据研究,只有20%的员工能够真正的使用BI工具。此外,由于在统计思维方面缺乏培训且图表和图表形式的数据不是很清晰,决策者往往会出现误解和决策失误。而这背后的…

ida 字符串查找_IDA 搜索中文字符串

IDA 的字符串窗口默认只能显示英文,网上的一些方法是指定启动时的参数可以显示中文ida64 -DCULTUREallida -DCULTUREall还有就是修改 cfg/ida.cfg 文件,但是这两种方法都没试成功。实际上没有那么麻烦,IDA 7.0 操作很方便,在字符串…

“练好内功坚持被集成”,阿里云发布SaaS加速器

在3月21日的2019阿里云峰会北京上,阿里云发布新产品SaaS加速器:人工智能、虚拟现实等技术能力被集成为模块,ISV和开发者只要简单拖拽,就可以快速搭建SaaS应用。 发布现场,阿里云智能产品管理部总经理马劲进行简单演示…

2020 年,云游戏将爆发?各大科技公司云游戏布局大曝光!

作者 | 年素清责编 | 伍杏玲出品 | CSDN云计算(ID:CSDNcloud) 伴随5G技术加速落地,云游戏作为5G应用落地的最佳场景,已经成为全球游戏厂商和云服务厂商布局的重要战场。根据艾媒咨询数据显示,2018年中国云游…

Springboot整合Quartz集群部署以及配置Druid数据源

参考链接: https://blog.csdn.net/wangmx1993328/article/details/105441308 https://blog.csdn.net/qq_39669058/article/details/90411497 参数配置连接:https://github.com/wangmaoxiong/quartzjdbc/blob/master/src/main/resources/application-clu…

我是如何拿到蚂蚁金服实习 offer 的

我是2018年3月入职蚂蚁的应届前端工程师,来自于北京邮电大学。2年前的此刻,我也是实习求职大潮中的一员,在这里,分享一下我从准备面试到实习,再到最终正式入职的经历。 选择蚂蚁 阿里的前端水平在业界有着很高的评价…

java 客户化排序_第八部分_客户化JSP标签

EL语言(减少JSP页面中的Java代码)String password request.getParameter("password");%>username: password: username: ${param.username }password: ${param.password }属性范围->在EL中的名称Page->pageScope;Request->requestScope&…

十大类疫情服务紧缺 阿里广发英雄帖抗疫小程序开发者最高可获50万元奖励

全民积极响应国家抗击新冠肺炎疫情的号召,正催生出越来越多新的互联网服务缺口。基于对用户、政府、企事业单位抗疫服务需求的紧缺情况调查,支付宝今日面向社会各界开发者发布“10大疫情期最急需服务开发清单”,号召更多开发者投入进来开发更…

信用算力基于 RocketMQ 实现金融级数据服务的实践

微服务架构已成为了互联网的热门话题之一,而这也是互联网技术发展的必然阶段。然而,微服务概念的提出者 Martin Fowler 却强调:分布式调用的第一原则就是不要分布式。 纵观微服务实施过程中的弊端,可以推断出作者的意图&#xff…

java map用二叉树_【课堂笔记分享】linkedlist、二叉树、hashmap

LinkedList序列分先进先出FIFO,先进后出FILOFIFO在Java中又叫Queue 队列FILO在Java中又叫Stack 栈LinkedList 与 List接口与ArrayList一样,LinkedList也实现了List接口,诸如add,remove,contains等等方法。 详细使用,请参考 ArrayList 常用方法…