程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi下使用OpenOffice+JodConverter+SWFtools進行文件轉換

Delphi下使用OpenOffice+JodConverter+SWFtools進行文件轉換

編輯:Delphi

目的:office文件轉換為PDF或SWF,最終可使用Flexpaper調用adobe flash player進行浏覽

 

放棄兩個文件轉換工具:

1.FlashPaper,轉換出的文件由於自帶工具欄,無法控制打印等操作;

程序中進行命令行調用時,依賴MSOffice及adobe reader,對於環境依賴比較大

2.print2flash,代碼中調用必須使用server版本(5000¥),未有破解

 

最終方案:

OpenOffice+JodConverter+SWFtools(office文件→PDF→SWF)

環境配置要求:

jre 1.4以上(JodConverter依賴)

 

office文件→PDF

在java中可以直接調用JodConverter類庫執行

delphi中可調用JodConverter的可執行文件jar+命令行參數

命令行實例:

java -jar "D:\jodconverter-2.2.2\lib\jodconverter-cli-2.2.2.jar" "D:\業務部\1.doc" "D:\業務部\1.pdf"

 

PDF→SWF

調用swftools中的pdf2swf.exe+命令行參數(包括中文字體包位置,中文字體包位置需自行設置)

具體見:http://blog.csdn.net/fh13760184/article/details/4100421

命令行實例

D:\SWFTools\pdf2swf.exe  -o "D:\業務部\1.swf" -t "D:\業務部\1.pdf" -s languagedir="D:\xpdf\chinese-simplified"

 

delphi中的關鍵代碼,思路是每條轉換任務作為一個線程,進程中創建一個進程,進程結束就表示任務結束

procedure StopProcess(ProcessID: DWORD);
var
  Handle: THandle;
begin
  Handle := OpenProcess(PROCESS_TERMINATE or PROCESS_VM_READ, False, ProcessID);
  if Handle <> 0 then
  try
    TerminateProcess(Handle, 0);
    WaitForSingleObject(Handle, INFINITE);
  finally
    CloseHandle(Handle);
  end;
end;

procedure TFileConvertThread.Execute;
var

  pInfo: TProcessInformation;
  StartInfo: TStartupInfo;
  Path: array[0..MAX_PATH - 1] of Char;
  cmdLines: string;
  fileExName: string;
  dw: HWND;

begin
  inherited;
  FillChar(StartInfo, sizeof(StartInfo), 0);
  StartInfo.cb := sizeof(StartInfo);

  StartInfo.wShowWindow := SW_HIDE; //隱藏命令行窗口
  StartInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartInfo.hStdError := 0;
  StartInfo.hStdInput := 0;
  StartInfo.hStdOutput := 0;

  cmdLines :='java -jar "D:\jodconverter-2.2.2\lib\jodconverter-cli-2.2.2.jar" "D:\業務部\1.doc" "D:\業務部\1.pdf"';
  //cmdLines :='D:\SWFTools\pdf2swf.exe  -o "D:\業務部\1.swf" -t "D:\業務部\1.pdf" -s languagedir="D:\xpdf\chinese-simplified"';
  //打開一個進程
  CreateProcess(nil, PAnsiChar(cmdLines), nil, nil, False, 0, nil, nil,
    StartInfo, pInfo);

  FSysPid := pInfo.dwProcessId; //獲取系統進程pid
  dw := WaitForSingleObject(pInfo.hProcess, 120000); //120000表示超時時間為2分鐘,等待進程執行的信號狀態

  case dw of
    WAIT_OBJECT_0: // 進程正常執行完畢
      begin
        //  '轉換成功!'
      end;
    WAIT_TIMEOUT: // 進程執行超時
      begin
        //'轉換超時!'; 此處可kill pid
        StopProcess(FSysPid);
      end;
    WAIT_FAILED: // 進程執行失敗
      begin
       // '轉換失敗!';
      end
  end;
end;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved