背景

业务中需要实现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文件导出相关推荐

  1. Java 中调用 Apache API 实现图片文件的 压缩 与 解压 实例

    < Java 中调用 Apache API 实现图片文件的 压缩 与 解压 > 为什么不直接使用 Java JDK 中自带的 API 呢?必须使用 Apache API 实现文件的压缩与解 ...

  2. Java中怎么把文本追加到已经存在的文件

    Java中怎么把文本追加到已经存在的文件 我需要重复把文本追加到现有文件中.我应该怎么办? 回答一 你是想实现日志的目的吗?如果是的话,这里有几个库可供选择,最热门的两个就是Log4j 和 Logba ...

  3. Java 使用wps将word文件转换pdf文件

    public class WordFileToPdf {private static final int wdFormatPDF = 17;private static final int xlTyp ...

  4. 使用java程序将ceb文件转换为pdf文件

    要使用 Java 程序将 CEB 文件转换为 PDF 文件,你可以使用 Apache POI 库来读取 CEB 文件并解析其内容. Apache POI 是一个开源的 Java 库,可以用于读取和写入 ...

  5. 福利!使用Aspose.Words在Java中以编程方式将Word格式转换为PDF完整指南

    在共享文档之前,通常使用Word到PDF的转换.可以使用各种在线Word到PDF转换器,可以转换单个或有限数量的Word文档.但是,随着新兴的MS Word自动化和报告生成解决方案,Word到PDF的 ...

  6. 将HTML文件转换为PDF文件(Thymeleaf模板转换,简单解决中文问题, 解决HTML带图片转换PDF文件问题)

    将HTML文件转换为PDF文件 一.导入依赖 <!-- itext生成Pdf --> <dependency><groupId>com.itextpdf</g ...

  7. 通过Jacob调用WPS将office文件转为PDF文件

    访问https://sourceforge.net/projects/jacob-project/ 想要调启Windows里的程序需要对应的dll库,下载之后解压 将符合你电脑的dll文件复制到jdk ...

  8. Freemark 模板生成doc文件,xml doc文件转docx 文件,docx文件转pdf文件

    freemark 模板生成doc文件,此doc文件为xml格式,无法直接转pdf 需要doc转docx文件,才能转pdf 方法1:docx4j 转 pdf 方法2: e-iceblue docx 转 ...

  9. office文件转换为pdf文件

    office文件转换为pdf文件 首先安装openoffice,自行百度 导入jar包,自行百度 引入坐标: <!-- 转pdf配置 --><dependency><gr ...

  10. 使用Jacob实现将Word文件转换为Pdf文件

    在某些业务场景下,可能需要将Word文件转换为Pdf文件的需求,Word文件编辑方便,而Pdf文件查看更方便,并且格式基本不会变化,同时可以避免被误编辑. 如果使用的是Java语言,那么可以借助于Ja ...

最新文章

  1. 栈和队列在python中的实现
  2. 如何判断是否丢掉用户请求
  3. 八大编程知名编程语言或系统的发展简史
  4. ios 内存使用陷阱
  5. Super Jumping! Jumping! Jumping!(HDU-1087)
  6. 7时过2小时是几时_飞机2小时和高铁7小时你愿意坐哪个?
  7. SQL Server 全文索引创建
  8. Windows域控设置 AD域策略屏蔽端口 禁用端口【全域策略生效】
  9. DNW5.0 USB 不OK
  10. 如何在Apple Watch上查看实时照片
  11. MATLAB 数学应用 微分方程 一维偏微分方程 求解单个PDE
  12. Windows Server 2008 R2 搭建网站详细教程
  13. 设计一个自我介绍简单页面
  14. 需要系数 计算机房,计算电流及需要系数表.xls
  15. 5. 统计学基础1:平均值...四分位数、方差、标准差(均方差)、标准误(标准误差、均方根误差)、 标准分
  16. Zerotier 搭建moon
  17. 【ClickHouse】<Error> Application: Caught exception while loading metadata: Code: 231. DB::Exception
  18. php调试技术手册读书笔记,RT-Thread读书笔记之一:开始学习了
  19. ubuntu18.04 install 安装postgresql9.6 解决重音不敏感”排序规则,以及扩展pgcrypto函数
  20. 国家lpv9服务器包括哪些项目,ipv6与ipv9什么关系

热门文章

  1. [史上最全]数学符号参考手册大全
  2. 数据情报分析EXCEL篇
  3. 前端程序员 学习书籍推荐
  4. 夜间灯光数据简介与下载链接
  5. GEE生成京津冀区域VIIRS 夜间灯光数据
  6. Android WebRTC 音视频开发总结
  7. linux中pak命令,Linux常用包管理及命令
  8. oracle erp 操作手册,OracleERP操作手册
  9. 从事IT行业的应该如何学习最高效的休息方式
  10. 黑莓9000和9900哪个好_入手黑莓9900,黑莓手机9900怎么样?