Mac編譯安裝swfToolsMac編譯安裝swfTools下載源碼解壓源碼安裝依賴項./configure執行配置或者執行如下配置命令:需要註意這裡存在部分代碼錯誤,需要修改解決後執行一、char * 和 int比較導致的錯誤, 需要修為文件二、存在一些變數沒有定義的錯誤三、存在一些方法參數數量錯... ...
Mac編譯安裝swfTools
下載源碼
這裡下載安裝的是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
安裝依賴項
# Linux/CentOS 安裝 這裡沒有實際測試,需要自己去測試 這裡只是一個記錄
yum install gcc* automake zlib-devel libjpeg-devel giflib-devel freetype-devel
主要通過brew安裝一下四個包:lzlib、giflib、jpeg、freetype
Mac版本安裝命令:
# 註意 lzlib 也許是不需要安裝的,這裡沒有去測試
brew install lzlib
brew install giflib
brew install jpeg
brew freetype
./configure
執行配置或者執行如下配置命令:
sudo LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" ./configure --prefix=/usr/local/swftools
需要註意這裡存在部分代碼錯誤,需要修改解決後執行
一、char * 和 int比較導致的錯誤, 需要修為文件
錯誤信息:

在
swftools-0.9.2/lib/pdf/xpdf/GlobalParams.cc
文件中修改
1 插入文件頭
#include <stdlib.h>
2 錯誤處理代碼
(具體修改位置可以參考錯誤提示),原始代碼是直接使用變數做比較,這裡需要對變數調用atio
函數後比較

二、存在一些變數沒有定義的錯誤
錯誤信息:

文件swftools-0.9.2/lib/jpeg.c
中存在部分變數沒有定義,這裡需要修改

修改後代碼:
//修改後代碼
#ifdef HAVE_JPEGLIB
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define HAVE_BOOLEAN
#include <jpeglib.h>
三、存在一些方法參數數量錯誤 以及 部分函數沒有定義問題
報錯信息:

解決方案:
修改文件
swftools-0.9.2/src/gif2swf.c
等內容:
1.1 全局搜索DGifOpenFileName
和DGifCloseFile
調用
1.2 在存在調用上述兩個方法的地方,定義變數
c
int Error;
並且修改調用為:
c
DGifOpenFileName(sname, &Error)

註意:這裡修改需要註意,如果上述兩個方法在同一個方法中調用,只需定義一次變數即可
1.3 在當前文件中全局搜索PrintGifError();
,將這行代碼刪除或註釋掉。
make
編譯
make install
安裝
開發註意點
關於pdf2swf轉碼命令:
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的命令行執行轉碼,文件路徑和生成的路徑不能加雙引號,也就是以為這文件源路徑和目標路徑不能有空格
Java代碼調用執行文檔轉換代碼:
註意:如果是在Java的命令行執行轉碼,文件路徑和生成的路徑不能加雙引號,也就是以為這文件源路徑和目標路徑不能有空格
package cn;
import java.io.*;
/**
* 將pdf轉化為swf文件
* 需要工具 swftools -> pdf2swf
*
* @author
*
*/
public class Pdf2swfUtil {
// pdf2swf 執行文件路徑
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 {
//目標路徑不存在則建立目標路徑
File dest = new File(destPath);
if (!dest.exists()) dest.mkdirs();
//源文件不存在則返回
File source = new File(sourcePath);
if (!source.exists()) return 0;
//調用pdf2swf命令進行轉換
// 註意 這裡的文檔輸入和文檔輸出路徑不能存在空格, 並且這裡的命令中,路徑不能使用雙引號包住
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(); // 啟動單獨的線程來清空process.getInputStream()的緩衝區
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(); // 啟動單獨的線程來清空process.getInputStream()的緩衝區
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/編寫高質量代碼--Web前端開發修煉之道.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 ");
}
}
}