天天看點

svg 轉換為 pdf (batik 庫+fop庫)

目标: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)

svg 轉換為 pdf (batik 庫+fop庫)

http://xmlgraphics.apache.org/batik/強大個 batik 庫本身 就能讀取、建立 svg,同時 可以轉為 png jpeg。。。

但如果需要轉為 為可編輯的 pdf ,需要加入另外的庫 ,即 fop 庫。原文如下:

svg 轉換為 pdf (batik 庫+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 轉換為 pdf (batik 庫+fop庫)

補充:

對于svg 内包含圖檔的情況,轉換時,情況如下:

如果圖檔是以base64 方式嵌入,是沒問題的。

svg 轉換為 pdf (batik 庫+fop庫)

如果是 url方式,轉換時會報錯,但不影響其他轉換,隻是 pdf 中沒有圖檔而已

svg 轉換為 pdf (batik 庫+fop庫)

補充:

下面列出 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位址,需要自己放入本地

繼續閱讀