JeeGit 官方论坛

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

1

收听

0

听众

192

主题
发表于 2023-1-20 02:48:24 | 查看: 703| 回复: 0
batik-transcoder



batik-transcoder svg 转png 公共包



https://blog.csdn.net/rainyspring4540/article/details/121420839



目标:svg 转为的 pdf 时,pdf 里面的线条不能是不可编辑的简单图片,要是可以操作的线条

方案:Java 的 batik 库+fop库

提上 batik 库的官网
Apache(tm) Batik SVG Toolkit - a Java-based toolkit for applications or applets that want to use images in the Scalable Vector Graphics (SVG)
http://xmlgraphics.apache.org/batik/
强大个 batik 库本身 就能读取、创建 svg,同时 可以转为 png jpeg。。。

但如果需要转为 为可编辑的 pdf ,需要加入另外的库 ,即 fop 库。原文如下:



下面贴上代码:



import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

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.fop.svg.PDFTranscoder;
public class SVGToPDF {

    public static void main(String[] args) {

            String input = "f:/a/1.svg";
            String out = "f:/a/1.pdf";
        try {
                long start = System.currentTimeMillis();
               
            
            TranscoderInput transcoderInput = new TranscoderInput(
                    new FileInputStream(new File(input)));
            TranscoderOutput transcoderOutput = new TranscoderOutput(
                    new FileOutputStream(new File(out)));
            
            Transcoder transcoder = new PDFTranscoder();
            transcoder.transcode(transcoderInput, transcoderOutput);
            
            long end = System.currentTimeMillis();
            System.out.println(end-start);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TranscoderException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}


下面贴上 涉及的 jar 包(直接下载即可):

apacheBatik.zip-其它文档类资源-CSDN下载

如果没有积分,也可以自己去一个个下载:



补充:

对于svg 内包含图片的情况,转换时,情况如下:

如果图片是以base64 方式嵌入,是没问题的。



如果是 url方式,转换时会报错,但不影响其他转换,只是 pdf 中没有图片而已



补充:

下面列出 maven 的pom

<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>b</groupId>
        <artifactId>b</artifactId>
        <version>0.0.1-SNAPSHOT</version>

        <dependencies>
               
                <dependency>
                   <groupId>batik</groupId>
                   <artifactId>batik-bridge</artifactId>
                   <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-transcoder</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>xmlgraphics-commons</artifactId>
                        <version>1.3.1</version>
                </dependency>
                <dependency>
                        <groupId>xml-apis</groupId>
                        <artifactId>xml-apis-ext</artifactId>
                        <version>1.3.04</version>
                </dependency>
<!--  batik 库针对 导出 pdf 的扩展,需要自己放入本地 -->
        <dependency>
                        <groupId>xml-apis</groupId>
                        <artifactId>xml-apis-ext</artifactId>
                        <version>1.3.04</version>
                        <scope>system</scope>
                        <systemPath>${project.basedir}/mylibs/fop.jar</systemPath>

                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-rasterizer</artifactId>
                        <version>1.6</version>
                </dependency>

                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-squiggle</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                   <groupId>batik</groupId>
                   <artifactId>batik-svgpp</artifactId>
                   <version>1.6</version>
                </dependency>
                <dependency>
                   <groupId>batik</groupId>
                   <artifactId>batik-slideshow</artifactId>
                   <version>1.6</version>
                </dependency>
               
       
               
               
               
               
                <!--  依赖库 -->
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-awt-util</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-bridge</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-css</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-dom</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-gvt</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-parser</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-script</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-svg-dom</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                   <groupId>batik</groupId>
                   <artifactId>batik-ext</artifactId>
                   <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-transcoder</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-util</artifactId>
                        <version>1.6</version>
                </dependency>
                <dependency>
                        <groupId>batik</groupId>
                        <artifactId>batik-xml</artifactId>
                        <version>1.6</version>
                </dependency>
               
                <dependency>
              <groupId>batik</groupId>
              <artifactId>batik-gui-util</artifactId>
              <version>1.6</version>
            </dependency>
            <dependency>
              <groupId>batik</groupId>
              <artifactId>batik-gvt</artifactId>
              <version>1.6</version>
            </dependency>
                <dependency>
              <groupId>batik</groupId>
              <artifactId>batik-swing</artifactId>
              <version>1.6</version>
            </dependency>
               
                <dependency>
              <groupId>rhino</groupId>
              <artifactId>js</artifactId>
              <version>1.5R4.1</version>
            </dependency>
                <dependency>
                        <groupId>xerces</groupId>
                        <artifactId>xercesImpl</artifactId>
                        <version>2.5.0</version>
                </dependency>
                <dependency>
                        <groupId>xml-apis</groupId>
                        <artifactId>xmlParserAPIs</artifactId>
                        <version>2.0.2</version>
                </dependency>

        </dependencies>
</project>
fop.jar  没有maven地址,需要自己放入本地
————————————————
版权声明:本文为CSDN博主「放学后的泡泡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rainyspring4540/article/details/121420839

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|JeeGit 官方论坛 ( 吉ICP备19001578号-2|吉B2-20200006 )

GMT+8, 2024-4-24 05:23 , Processed in 0.036249 second(s), 17 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表