JAVA中使用Apache Batik实现SVG文件转PDF文件导出
背景
业务中需要实现svg 编码转换为PDF或PNG文件进行导出的功能,通过查阅网上的资料,了解到Aspose.PDF和Apache 的 Batik包提供了相关的工具。两种方法都进行了尝试,最后发现Aspose导出的文件是有水印的,需要购买license才能去除水印,所以使用了Batik依赖来实现,在此做一下记录。
1.配置依赖
<dependency><groupId>org.apache.xmlgraphics</groupId><artifactId>batik-transcoder</artifactId><version>1.12</version></dependency><dependency><groupId>org.apache.xmlgraphics</groupId><artifactId>fop</artifactId><version>2.4</version></dependency>
2.代码实现
- 工具类
import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.fop.svg.PDFTranscoder;import java.io.*;public class SvgUtils {/*** SVG转PNG* @param svgCode SVG代码* @param out 输出流* @throws TranscoderException* @throws IOException*/public static void svg2PNG(String svgCode,OutputStream out) throws TranscoderException, IOException{Transcoder transcoder = new PNGTranscoder();svgConverte(svgCode, out, transcoder);}/*** SVG转PDF* @param svgCode SVG代码* @param out 输出流* @throws TranscoderException* @throws IOException*/public static void svg2PDF(String svgCode,OutputStream out) throws TranscoderException, IOException{Transcoder transcoder = new PDFTranscoder();svgConverte(svgCode, out, transcoder);}private static void svgConverte(String svgCode, OutputStream out, Transcoder transcoder) throws IOException, TranscoderException {svgCode = svgCode.replaceAll(":rect", "rect");TranscoderInput input = new TranscoderInput(new StringReader(svgCode));TranscoderOutput output = new TranscoderOutput(out);svgConverte(input,output,transcoder);}private static void svgConverte(TranscoderInput input, TranscoderOutput output, Transcoder transcoder) throws IOException, TranscoderException {transcoder.transcode(input, output);}}
- 业务代码
public void exportFloorSvg(Long floorId, HttpServletRequest request, HttpServletResponse response) throws IOException, TranscoderException {try {FloorSvg floorSvg = floorSvgRepository.selectOne(FloorSvg.builder().floorId(floorId).build());if (floorSvg==null){throw new CommonException("SVG不存在");}//解析出svg串JSON json = JSONUtil.parse(floorSvg.getSvg());String svgCode=String.valueOf(json.getByPath("floorSvg"));//文件名String fileName=floorSvg.getFileKey().substring(floorSvg.getFileKey().indexOf("@")+1,floorSvg.getFileKey().lastIndexOf(".")+1)+"pdf";//导出pdf文件 头设置response.addHeader("Content-Disposition", "attachment;filename="+ java.net.URLEncoder.encode(fileName,"UTF-8"));response.setContentType("application/pdf");SvgUtils.svg2PDF(svgCode,response.getOutputStream()) ;}catch (Exception e){if (log.isDebugEnabled()){log.error(String.format("export pdf failed:%s",e.getMessage()));}}}
JAVA中使用Apache Batik实现SVG文件转PDF文件导出相关推荐
- Java 中调用 Apache API 实现图片文件的 压缩 与 解压 实例
< Java 中调用 Apache API 实现图片文件的 压缩 与 解压 > 为什么不直接使用 Java JDK 中自带的 API 呢?必须使用 Apache API 实现文件的压缩与解 ...
- Java中怎么把文本追加到已经存在的文件
Java中怎么把文本追加到已经存在的文件 我需要重复把文本追加到现有文件中.我应该怎么办? 回答一 你是想实现日志的目的吗?如果是的话,这里有几个库可供选择,最热门的两个就是Log4j 和 Logba ...
- Java 使用wps将word文件转换pdf文件
public class WordFileToPdf {private static final int wdFormatPDF = 17;private static final int xlTyp ...
- 使用java程序将ceb文件转换为pdf文件
要使用 Java 程序将 CEB 文件转换为 PDF 文件,你可以使用 Apache POI 库来读取 CEB 文件并解析其内容. Apache POI 是一个开源的 Java 库,可以用于读取和写入 ...
- 福利!使用Aspose.Words在Java中以编程方式将Word格式转换为PDF完整指南
在共享文档之前,通常使用Word到PDF的转换.可以使用各种在线Word到PDF转换器,可以转换单个或有限数量的Word文档.但是,随着新兴的MS Word自动化和报告生成解决方案,Word到PDF的 ...
- 将HTML文件转换为PDF文件(Thymeleaf模板转换,简单解决中文问题, 解决HTML带图片转换PDF文件问题)
将HTML文件转换为PDF文件 一.导入依赖 <!-- itext生成Pdf --> <dependency><groupId>com.itextpdf</g ...
- 通过Jacob调用WPS将office文件转为PDF文件
访问https://sourceforge.net/projects/jacob-project/ 想要调启Windows里的程序需要对应的dll库,下载之后解压 将符合你电脑的dll文件复制到jdk ...
- Freemark 模板生成doc文件,xml doc文件转docx 文件,docx文件转pdf文件
freemark 模板生成doc文件,此doc文件为xml格式,无法直接转pdf 需要doc转docx文件,才能转pdf 方法1:docx4j 转 pdf 方法2: e-iceblue docx 转 ...
- office文件转换为pdf文件
office文件转换为pdf文件 首先安装openoffice,自行百度 导入jar包,自行百度 引入坐标: <!-- 转pdf配置 --><dependency><gr ...
- 使用Jacob实现将Word文件转换为Pdf文件
在某些业务场景下,可能需要将Word文件转换为Pdf文件的需求,Word文件编辑方便,而Pdf文件查看更方便,并且格式基本不会变化,同时可以避免被误编辑. 如果使用的是Java语言,那么可以借助于Ja ...
最新文章
- 栈和队列在python中的实现
- 如何判断是否丢掉用户请求
- 八大编程知名编程语言或系统的发展简史
- ios 内存使用陷阱
- Super Jumping! Jumping! Jumping!(HDU-1087)
- 7时过2小时是几时_飞机2小时和高铁7小时你愿意坐哪个?
- SQL Server 全文索引创建
- Windows域控设置 AD域策略屏蔽端口 禁用端口【全域策略生效】
- DNW5.0 USB 不OK
- 如何在Apple Watch上查看实时照片
- MATLAB 数学应用 微分方程 一维偏微分方程 求解单个PDE
- Windows Server 2008 R2 搭建网站详细教程
- 设计一个自我介绍简单页面
- 需要系数 计算机房,计算电流及需要系数表.xls
- 5. 统计学基础1:平均值...四分位数、方差、标准差(均方差)、标准误(标准误差、均方根误差)、 标准分
- Zerotier 搭建moon
- 【ClickHouse】<Error> Application: Caught exception while loading metadata: Code: 231. DB::Exception
- php调试技术手册读书笔记,RT-Thread读书笔记之一:开始学习了
- ubuntu18.04 install 安装postgresql9.6 解决重音不敏感”排序规则,以及扩展pgcrypto函数
- 国家lpv9服务器包括哪些项目,ipv6与ipv9什么关系