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
安裝依賴項
# 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執(zhí)行配置或者執(zhí)行如下配置命令:
sudo LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" ./configure --prefix=/usr/local/swftools
需要注意這里存在部分代碼錯誤,需要修改解決后執(zhí)行
一、char * 和 int比較導致的錯誤, 需要修為文件
錯誤信息:

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

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

文件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>
三、存在一些方法參數(shù)數(shù)量錯誤 以及 部分函數(shù)沒有定義問題
報錯信息:

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

注意:這里修改需要注意,如果上述兩個方法在同一個方法中調(diào)用,只需定義一次變量即可
1.3 在當前文件中全局搜索PrintGifError();,將這行代碼刪除或注釋掉。
make編譯
make install安裝
開發(fā)注意點
關于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)碼,文件路徑和生成的路徑不能加雙引號,也就是以為這文件源路徑和目標路徑不能有空格
Java代碼調(diào)用執(zhí)行文檔轉(zhuǎn)換代碼:
注意:如果是在Java的命令行執(zhí)行轉(zhuǎn)碼,文件路徑和生成的路徑不能加雙引號,也就是以為這文件源路徑和目標路徑不能有空格
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 {
//目標路徑不存在則建立目標路徑
File dest = new File(destPath);
if (!dest.exists()) dest.mkdirs();
//源文件不存在則返回
File source = new File(sourcePath);
if (!source.exists()) return 0;
//調(diào)用pdf2swf命令進行轉(zhuǎn)換
// 注意 這里的文檔輸入和文檔輸出路徑不能存在空格, 并且這里的命令中,路徑不能使用雙引號包住
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()的緩沖區(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(); // 啟動單獨的線程來清空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/編寫高質(zhì)量代碼--Web前端開發(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 ");
}
}
}