Mac編譯安裝swfTools
[TOC]
下載源碼
這里下載安裝的是swftools-0.9.2.tar.gz
醉箕,具體的地址為:http://www.swftools.org/swftools-0.9.2.tar.gz
swftools-0.9.2.ta
解壓源碼
tar -xzvf swftools-0.9.2.tar.gz
安裝依賴(lài)項(xiàng)
# Linux/CentOS 安裝 這里沒(méi)有實(shí)際測(cè)試,需要自己去測(cè)試 這里只是一個(gè)記錄
yum install gcc* automake zlib-devel libjpeg-devel giflib-devel freetype-devel
主要通過(guò)brew安裝一下四個(gè)包:lzlib秉溉、giflib腾它、jpeg跑筝、freetype
Mac版本安裝命令:
# 注意 lzlib 也許是不需要安裝的,這里沒(méi)有去測(cè)試
brew install lzlib
brew install giflib
brew install jpeg
brew freetype
./configure
執(zhí)行配置或者執(zhí)行如下配置命令:
sudo LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" ./configure --prefix=/usr/local/swftools
需要注意這里存在部分代碼錯(cuò)誤瞒滴,需要修改解決后執(zhí)行
一曲梗、char * 和 int比較導(dǎo)致的錯(cuò)誤, 需要修為文件
錯(cuò)誤信息:
在
swftools-0.9.2/lib/pdf/xpdf/GlobalParams.cc
文件中修改
1 插入文件頭
#include <stdlib.h>
2 錯(cuò)誤處理代碼
(具體修改位置可以參考錯(cuò)誤提示)妓忍,原始代碼是直接使用變量做比較虏两,這里需要對(duì)變量調(diào)用atio
函數(shù)后比較
二、存在一些變量沒(méi)有定義的錯(cuò)誤
錯(cuò)誤信息:
文件swftools-0.9.2/lib/jpeg.c
中存在部分變量沒(méi)有定義世剖,這里需要修改
修改后代碼:
//修改后代碼
#ifdef HAVE_JPEGLIB
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define HAVE_BOOLEAN
#include <jpeglib.h>
三定罢、存在一些方法參數(shù)數(shù)量錯(cuò)誤 以及 部分函數(shù)沒(méi)有定義問(wèn)題
報(bào)錯(cuò)信息:
g)
解決方案:
修改文件
swftools-0.9.2/src/gif2swf.c
等內(nèi)容:
1.1 全局搜索DGifOpenFileName
和DGifCloseFile
調(diào)用
1.2 在存在調(diào)用上述兩個(gè)方法的地方,定義變量
c int Error;
并且修改調(diào)用為:
c DGifOpenFileName(sname, &Error)
注意:這里修改需要注意旁瘫,如果上述兩個(gè)方法在同一個(gè)方法中調(diào)用祖凫,只需定義一次變量即可
1.3 在當(dāng)前文件中全局搜索PrintGifError();
琼蚯,將這行代碼刪除或注釋掉。
make
編譯
make install
安裝
開(kāi)發(fā)注意點(diǎn)
關(guān)于pdf2swf轉(zhuǎn)碼命令:
pdf2swf -t "/Users/zhangxiong/project/qware/wbiot/mus/MS-FS-Server/tempFile/5bd8f9d8-185d-4d7b-9be8-1658441f784f.pdf" -o "/Users/zhangxiong/project/qware/wbiot/mus/MS-FS-Server/tempFile/877a9f8d-dd7e-46a2-b431-cadd0ff36e44.swf" -s flashversion=9 -s languagedir=/Users/zhangxiong/devtools/xpdf/xpdf-chinese-simplified
注意:如果是在Java的命令行執(zhí)行轉(zhuǎn)碼惠况,文件路徑和生成的路徑不能加雙引號(hào)遭庶,也就是以為這文件源路徑和目標(biāo)路徑不能有空格
Java代碼調(diào)用執(zhí)行文檔轉(zhuǎn)換代碼:
注意:如果是在Java的命令行執(zhí)行轉(zhuǎn)碼,文件路徑和生成的路徑不能加雙引號(hào)稠屠,也就是以為這文件源路徑和目標(biāo)路徑不能有空格
package cn;
import java.io.*;
/**
* 將pdf轉(zhuǎn)化為swf文件
* 需要工具 swftools -> pdf2swf
*
* @author
*
*/
public class Pdf2swfUtil {
// pdf2swf 執(zhí)行文件路徑
private static String pdftoswf = "devtools/swftools-0.9.2/src/pdf2swf";
/**
* @param sourcePath pdf原路徑
* @param destPath 目的路徑
* @param fileName 生成swf的文件名
*/
public static int convertPDF2SWF(String sourcePath, String destPath, String fileName) throws Exception {
//目標(biāo)路徑不存在則建立目標(biāo)路徑
File dest = new File(destPath);
if (!dest.exists()) dest.mkdirs();
//源文件不存在則返回
File source = new File(sourcePath);
if (!source.exists()) return 0;
//調(diào)用pdf2swf命令進(jìn)行轉(zhuǎn)換
// 注意 這里的文檔輸入和文檔輸出路徑不能存在空格峦睡, 并且這里的命令中,路徑不能使用雙引號(hào)包住
String command = pdftoswf + " -o " + destPath + fileName + " -s flashversion=9 " + sourcePath + "";
System.out.println(command);
Process pro = Runtime.getRuntime().exec(command);
final InputStream is1 = pro.getInputStream();
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(
new InputStreamReader(is1));
StringBuffer sb = new StringBuffer(" ====================>>> \n");
try {
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
sb.append(" <<<<<<<========================================");
System.out.println(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}).start(); // 啟動(dòng)單獨(dú)的線程來(lái)清空process.getInputStream()的緩沖區(qū)
final InputStream is2 = pro.getErrorStream();
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(
new InputStreamReader(is2));
StringBuffer sb = new StringBuffer(" ====================>>> \n");
try {
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
sb.append(" <<<<<<<========================================");
System.out.println(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}).start(); // 啟動(dòng)單獨(dú)的線程來(lái)清空process.getInputStream()的緩沖區(qū)
try {
pro.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pro.exitValue();
}
public static void main(String []args) throws Exception {
// TODO: 2018/5/24 這里需要確定自己文檔的路徑和輸出路徑
String sourcePath = "Downloads/編寫(xiě)高質(zhì)量代碼--Web前端開(kāi)發(fā)修煉之道.pdf";
String destPath = "project/qware/refactor/";
String fileName = "test.swf";
Pdf2swfUtil.convertPDF2SWF(sourcePath, destPath, fileName);
File file = new File(destPath + fileName);
if (!file.exists()) {
throw new RuntimeException("not create file ");
}
}
}