Java使用batilk+pdfbox+w3c转换pdf成svg

1、pom.xml

        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox-tools</artifactId>
            <version>2.0.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-svggen -->
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-svggen</artifactId>
            <version>1.14</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/batik/batik-dom -->
        <dependency>
            <groupId>batik</groupId>
            <artifactId>batik-dom</artifactId>
            <version>1.6-1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-codec -->
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-codec</artifactId>
            <version>1.14</version>
        </dependency>

2、Tosvg2.java

package com.ruoyi.web;


import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.image.ColorModel;
import java.io.*;

import org.apache.batik.dom.GenericDOMImplementation;
import org.apache.batik.svggen.SVGGeneratorContext;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;

public class Tosvg2 {//    public static void main(String[] args) throws Exception {

        InputStream is = new FileInputStream("D:/ruoyi/PDFPath/hadoop.pdf") ;
        PDDocument document = PDDocument.load(is);
        PDFRenderer pdfRenderer = new PDFRenderer(document);

        SVGGeneratorContext ctx = createContext();

        int pageCounter = 0;
        for (@SuppressWarnings("unused") PDPage page : document.getPages()) {
            SVGGraphics2D g = createGraphics(ctx);
            pdfRenderer.renderPageToGraphics(pageCounter, g);

            // suffix in filename will be used as the file format
            System.out.println("Saving page " + (pageCounter+1));

            Writer out = new OutputStreamWriter(new FileOutputStream("D:/ruoyi/SvgPath/5/hadoop"+pageCounter+".svg"));
            g.stream(out, true);

            pageCounter++;
        }

    }

    private static SVGGraphics2D createGraphics(SVGGeneratorContext ctx) {
        SVGGraphics2D g2d = new CustomSVGGraphics2D(ctx, false);
        return g2d;
    }

    private static SVGGeneratorContext createContext() {
        DOMImplementation impl = GenericDOMImplementation.getDOMImplementation();
        String svgNS = "http://www.w3.org/2000/svg";
        Document myFactory = impl.createDocument(svgNS, "svg", null);

        SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(myFactory);
        ctx.setComment("Generated by FooApplication with Batik SVG Generator");
        return ctx;
    }

    public static class CustomSVGGraphics2D extends SVGGraphics2D {

        public CustomSVGGraphics2D(SVGGeneratorContext generatorCtx, boolean textAsShapes) {
            super(generatorCtx, textAsShapes);
        }

        @Override
        public GraphicsConfiguration getDeviceConfiguration() {
            return new CustomGraphicsConfiguration();
        }
    }

    private static final class CustomGraphicsConfiguration extends GraphicsConfiguration {

        @Override
        public AffineTransform getNormalizingTransform() {
            return null;
        }

        @Override
        public GraphicsDevice getDevice() {
            return new CustomGraphicsDevice();
        }

        @Override
        public AffineTransform getDefaultTransform() {
            return null;
        }

        @Override
        public ColorModel getColorModel(int transparency) {
            return null;
        }

        @Override
        public ColorModel getColorModel() {
            return null;
        }

        @Override
        public Rectangle getBounds() {
            return null;
        }
    }

    private static final class CustomGraphicsDevice extends GraphicsDevice {
        @Override
        public int getType() {
            return 0;
        }

        @Override
        public String getIDstring() {
            return null;
        }

        @Override
        public GraphicsConfiguration[] getConfigurations() {
            return null;
        }

        @Override
        public GraphicsConfiguration getDefaultConfiguration() {
            return null;
        }
    }

}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Agatha方艺璇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值