Convertir PDF a SWF con AIR 2 beta
Introducción
Hola Amigos, acá comparto una la solución a un problema que tuve esta semana. Se trata de convertir un archivo PDF al formato flash SWF.
Aca un resumen de los problemas:
- No existe (al momento) una forma nativa dentro de AIR para convertir un archivo pdf a swf, entonces tuve que hacer la llamada al comando pdf2swf.exe (SWFTools) desde AIR
- La opcion de ejecutar comandos de linea solo esta disponible en Adobe AIR 2 Beta (al momento), entonces me anime a usar la versión beta
El código
import __AS3__.vec.Vector;
import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.events.IOErrorEvent;
import flash.events.NativeProcessExitEvent;
import flash.events.ProgressEvent;
import flash.events.TimerEvent;
import flash.filesystem.File;
import flash.utils.Timer;
import mx.core.FlexGlobals;
public class PDF2SWFConverter
{
private var command:String;
private var finished:Boolean = false;
private var error:Boolean = false;
private var timer:Timer;
public function PDF2SWFConverter(command:String)
{
this.command = command;
}
public static function getInstance():PDF2SWFConverter{
return new PDF2SWFConverter("/path/to/pdf2swf.exe");
}
public function convert(pdfPath:String, swfPath:String):Boolean {
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var commandFile:File = new File(command);
nativeProcessStartupInfo.executable = commandFile;
var args:Vector.<String> = new Vector.<String>();
args.push(pdfPath);
args.push("-t");
args.push("-T9");
args.push("-o");
args.push(swfPath);
nativeProcessStartupInfo.arguments = args;
var process:NativeProcess;
timer = new Timer(1);
process = new NativeProcess();
process.start(nativeProcessStartupInfo);
process.addEventListener(NativeProcessExitEvent.EXIT, onExit);
process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData);
process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError);
timer.addEventListener(TimerEvent.TIMER, myTimerHandler);
this.finished = false;
this.error = false;
timer.start();
return !error;
}
protected function onExit(event:NativeProcessExitEvent):void
{
this.finished = true;
}
public function onErrorData(event:ProgressEvent):void
{
this.error = true;
this.finished = true;
}
public function onIOError(event:IOErrorEvent):void
{
this.error = true;
this.finished = true;
}
public function myTimerHandler(e:TimerEvent):void{
if(this.finished)
{
timer.stop();
}
}
} |
Convertir PDF a SWF
Para llamar desde Flex al comando pdf2swf.exe, usamos los objectos: NativeProcessStartupInfo y NativeProcess.
NativeProcessStartupInfo, nos permite definir la información inicial de la llamada (nombre de comando y parametros) a un comando de linea. Este objecto es usado como parámetro para el método start del objeto NativeProcess.
NativeProcess, nos permite realizar la llamada a un comando de linea. Cabe advertir que por motivos de seguridad, no es posible ejecutar archivos .bat.
También es necesario señalar que para ejecutar de comandos de linea la aplicacion AIR tiene que tener configurado el perfil de escritorio extendido. Para esto tenemos que añadir lo siguiente al app.xml de la aplicacion AIR:
<i><supportedProfiles>extendedDesktop</supportedProfiles></i> |
Como llamar a PDF2SWFConverter
Para llamar al objecto basta con lo siguiente:
var converter:PDF2SWFConverter = PDF2SWFConverter.getInstance(); converter.convert("/path/to/doc.pdf","/path/to/new/doc.swf"); |
Esta clase es un wrapper (envoltura) para el comando, la ventaja es que uno puede llamar a la clase, ejecutar la conversión y continuar con la secuencia de instrucciones gracias a que se usa el el objeto Timer.
Follow me on twitter
Recent Comments