Mac編譯安裝swfTools

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 全局搜索DGifOpenFileNameDGifCloseFile調(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 ");
        }
    }  
}  
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多,請查閱幫助信息) 1、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,537評論 1 19
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,616評論 19 139
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,717評論 0 5
  • 很多人都嫌自己家的空間太小,還有限啦。很多東西都放不下。但你有沒有想過更多的利用空間,下面的一些創(chuàng)意設計,希望能給...
    窗爸爸家居閱讀 223評論 0 1
  • 這個周末,因為各種各樣的原因,沒辦法陪珠寶一起過周末了,不由地更加思念她。又正好看到同事給自己的寶寶做了一本微信書...
    小玉微香閱讀 391評論 1 1

友情鏈接更多精彩內(nèi)容