PowerPoint Automation Services en SharePoint
Aprenda a usar Microsoft PowerPoint Automation Services para hacer conversiones de presentaciones del lado servidor a una variedad de formatos de archivo, y viceversa.
Introducción
Muchas empresas, grandes y pequeñas, usan sus bibliotecas de Microsoft SharePoint Server como repositorio para las presentaciones de Microsoft PowerPoint. Todas estas empresas tienen sus propias necesidades para almacenar, distribuir y actualizar sus presentaciones. Microsoft PowerPoint Automation Services es una nueva característica de SharePoint que puede ayudar a las empresas a administrar sus presentaciones. Es un servicio compartido que proporciona una conversión (desatendida y a nivel del servidor) de las presentaciones a otros formatos. Se diseñó desde el comienzo para funcionar en servidores y puede procesar varios archivos de presentación de manera confiable y predecible.
Con PowerPoint Automation Services, puede hacer conversiones del formato de archivo binario de PowerPoint (.ppt) y el formato de archivo Open XML de PowerPoint (.pptx) en otros formatos. Por ejemplo, puede actualizar un lote de archivos de PowerPoint 97-2003 a archivos de presentación Open XML. También puede crear una acción personalizada en el menú Edición para permitir que los usuarios creen a petición una versión de las presentaciones en formato PDF.
Nota:
PowerPoint Automation Services aprovecha las características de SharePoint y es una característica del mismo. Debe tener SharePoint instalado para usar PowerPoint Automation Services. Si usa SharePoint en una granja de servidores, debe habilitar explícitamente PowerPoint Automation Services.
Escenarios de PowerPoint Automation Services
En los siguientes escenarios, se describen algunas formas en que puede usar PowerPoint Automation Services para automatizar el procesamiento de presentaciones en un servidor:
Una empresa grande almacena todas sus presentaciones de ganancias anuales en una única biblioteca de documentos, en un sitio de intranet corporativo. La biblioteca contiene una gran cantidad de presentaciones que se han acumulado con los años. El departamento de TI quiere actualizar todos los archivos de presentación con el formato de archivo binario de PowerPoint 97-2003 (.ppt) al formato de archivo de presentación Open XML (.pptx). El desarrollador encargado de la conversión decide implementar una solución en el servidor que procesará en iteración cada uno de los archivos de la biblioteca, comprobará si el archivo tiene el formato .ppt y convertirá cada archivo .ppt en el formato de archivo .pptx.
Un departamento de ventas regional ofrece estimaciones de servicio personalizadas a cada uno de sus clientes. Cada vendedor revisa sus cotizaciones con los clientes en una reunión, ya sea en persona o en línea. Después de la reunión, el vendedor facilita una copia de la cotización al cliente en formato PDF. El departamento contrata a un proveedor para crear una acción personalizada en el menú Edición para los archivos de PowerPoint almacenados en una biblioteca de documentos de la extranet. Al hacer clic en la acción, el servidor ejecuta un programa que convierte el archivo de PowerPoint en un archivo PDF ubicado en la misma biblioteca.
Formatos de presentación de origen admitidos
Los formatos de presentación de origen admitidos para la conversión son los siguientes:
Formato de presentación con formato de archivo Open XML (.pptx)
Presentación de PowerPoint 97-2003 (.ppt)
Formatos de documento de destino admitidos
Los formatos de documento de destino admitidos incluyen todos los formatos de documento de origen admitidos, además de los siguientes:
.pptx (formato de presentación con formato de archivo Open XML)
.pdf
.xps (Open XML Paper Specification)
.jpg
.png (formato Portable Network Graphics)
Limitaciones de PowerPoint Automation Services
PowerPoint Automation Services no incluye funcionalidades para imprimir documentos. Sin embargo, es sencillo convertir archivos de presentación de PowerPoint (.ppt y .pptx) en PDF o XPS y compartirlos en una impresora.
API de PowerPoint Automation Services
Para usar PowerPoint Automation Services, puede usar su interfaz de programación para enviar una solicitud de conversión al servidor de SharePoint. En cada solicitud de conversión, especifique los archivos que desea convertir y el formato de salida del trabajo de conversión. En algunas solicitudes de conversión, también puede especificar el tipo de contenido que desea convertir, como comentarios, diapositivas ocultas o propiedades del documento.
PowerPoint Automation Services usa el método de modelo asincrónico para enviar y recibir solicitudes de conversión. Por lo tanto, puede escribir código que siga en ejecución tras enviar una solicitud de conversión. Si necesita notificar a los usuarios una vez completada la solicitud de conversión, puede especificar un delegado que haga referencia a un método de devolución de llamada que se ejecutará cuando se complete la tarea.
Nota:
Para obtener más información sobre cómo trabajar con el patrón de diseño asincrónico, consulte Información general sobre programación asincrónica.
Las secciones siguientes contienen una lista limitada de las clases necesarias para enviar y recibir solicitudes de conversión. Todas estas clases se incluyen en el espacio de nombres Microsoft.Office.Server.PowerPoint.Conversion.
Clase base Request
La clase Request es la clase más fundamental del espacio de nombres Microsoft.Office.Server.PowerPoint.Conversion. Todos los demás tipos de solicitud ( PresentationRequest, PictureRequest, PdfRequest y XpsRequest) proceden de ella.
Tabla 1. Miembros de la clase base Request
Nombre del miembro | Descripción |
---|---|
Método BeginConvert(Microsoft.SharePoint.SPServiceContext, System.AsyncCallback, System.Object) |
Inicia la tarea de conversión. El primer parámetro, serviceContext, especifica el contexto del sitio de SharePoint donde se encuentra el archivo que se va a convertir. Use el parámetro de devolución de llamada para especificar un delegado que haga referencia a un método que se ejecutará una vez completada la operación. Use el parámetro state si necesita transmitir información adicional del código de llamada al método de devolución de llamada. Devuelve un objeto IAsyncResult . |
Método EndConvert(IAsyncResult) |
Finaliza la tarea de conversión. El parámetro result espera el objeto IAsyncResult resultante que devuelve la solicitud de conversión BeginConvert correspondiente. Si esa solicitud no se completó cuando se llama a EndConvert, se bloquea el subproceso de llamada hasta que finaliza la tarea de conversión. No devuelve ningún valor. |
Clase PresentationRequest
La clase PresentationRequest, que procede de la clase Request, convierte un archivo de PowerPoint 97-2003 (.ppt) o una presentación con formato de archivo Open XML (.pptx) en otro formato de archivo de presentación. En el primer escenario mencionado arriba, esta clase se usa para convertir archivos de presentación anteriores de una biblioteca de documentos en el formato de presentación con formato de archivo Open XML.
El método de constructor de la clase PresentationRequest tiene tres parámetros obligatorios:
input: toma el archivo que desea convertir como un objeto Stream .
extension: cadena que especifica la extensión del archivo que desea convertir.
output: objeto SPFileStream que especifica dónde se almacenará la salida.
La clase PresentationRequest tiene una única sobrecarga para su método de constructor que agrega un parámetro settings. El parámetro settings acepta un objeto PresentationSettings como argumento.
Propina: Al volver a convertir el objeto Stream de salida en un objeto SPFile , compruebe que la extensión proporcionada al archivo resultante coincide con la extensión del tipo de archivo que desea (.ppt o .pptx).
Clase PdfRequest
La clase PdfRequest, que también procede de la clase Request, convierte un archivo de PowerPoint 97-2003 (.ppt) o una presentación con formato de archivo Open XML (.pptx) en un archivo .pdf. En el segundo escenario mencionado arriba, esta clase se usa para convertir presentaciones en archivos PDF.
El método constructor de la clase PdfRequest también tiene tres parámetros necesarios( entrada, extensión y salida) similares a la clase PresentationRequest .
La clase PdfRequest también tiene una única sobrecarga para su método de constructor que agrega un parámetro settings. El parámetro settings acepta un objeto FixedFormatSettings como argumento.
Propina: Al volver a convertir el objeto Stream de salida en un objeto SPFile , compruebe que la extensión proporcionada al archivo resultante coincide con la extensión del tipo de archivo que desea (.pdf).
Clase PictureRequest
La clase PictureRequest, que también procede de la clase Request, convierte un archivo de PowerPoint 97-2003 (.ppt) o una presentación con formato de archivo Open XML (.pptx) en una colección de archivos de imagen con formato .jpg o .png.
El método de constructor de la clase PictureRequest tiene cuatro parámetros obligatorios. Los parámetros de entrada, extensión y salida son similares a los parámetros del constructor de clase PresentationRequest . El método de constructor de la clase PictureRequest también tiene un parámetro format obligatorio, que debe ser una constante de la enumeración PictureFormat.
La clase PictureRequest no tiene ninguna sobrecarga para el método de constructor.
Sugerencia: la clase PictureRequest devuelve una secuencia que contiene un paquete de archivos de imagen. Al convertir de nuevo el objeto de salida Stream en un objeto SPFile, compruebe que la extensión asignada al archivo resultante es .zip.
Construir una aplicación de PowerPoint Automation Services
La forma más sencilla de mostrar cómo escribir código que usa PowerPoint Automation Services es generar una aplicación de consola. Debe generar y ejecutar la aplicación de consola en SharePoint Server, no en un equipo cliente. El código para iniciar las solicitudes de conversión es similar, ya se incorpore en un elemento web, un flujo de trabajo o un controlador de eventos. Al usar PowerPoint Automation Services desde una aplicación de consola, el procedimiento siguiente permite mostrar cómo usar la API sin agregar las complejidades de un elemento web, un controlador de eventos o un flujo de trabajo.
Nota:
Como PowerPoint Automation Services es un servicio de SharePoint, puede usarlo solo en una aplicación que se ejecute directamente en un servidor de SharePoint. Debe generar la aplicación como una solución de granja de servidores. No puede usar PowerPoint Automation Services desde una solución de espacio aislado.
Para compilar la aplicación
Inicie Microsoft Visual Studio 2012.
En el menú Archivo, elija Nuevo y luego Proyecto.
En el cuadro de diálogo Nuevo proyecto, en Instalado, expanda Plantillas, expanda Visual C# y luego elija Windows.
En la lista de plantillas de proyecto, elija Aplicación de consola.
Asegúrese de que el proyecto de Visual Studio tenga .NET Framework 4 como destino.
Nota:
[!NOTA] Las versiones anteriores de SharePoint Server requerían .NET Framework 3.5 como destino. Las bibliotecas de Microsoft.SharePoint ahora hacen referencia a ensamblados en .NET Framework 4. Asegúrese también de que el proyecto tenga la versión completa de .NET Framework 4 como destino y no .NET Framework 4 Client Profile.
En el cuadro Nombre, escriba el nombre que desea usar para el proyecto, por ejemplo, PAS_Sample.
En el cuadro Ubicación, escriba la ubicación en donde desea colocar el proyecto.
Haga clic en Aceptar para crear la solución.
De forma predeterminada, Visual Studio 2012 crea proyectos que tienen CPU x86 como destino, pero para generar aplicaciones de SharePoint Server, debe usar cualquier CPU como destino.
Si desea generar una aplicación de Microsoft Visual C#, en el Explorador de soluciones, haga clic con el botón secundario en el proyecto y luego haga clic en Propiedades.
En la ventana Propiedades del proyecto, haga clic en Generar.
Elija la lista Configuración y seleccione Todas las configuraciones.
Elija la lista Destino de la plataforma y seleccione Cualquier CPU.
Si desea generar una aplicación de Microsoft Visual Basic .NET Framework, en la ventana Propiedades, haga clic en Compilar.
Haga clic en Opciones de compilación avanzadas.
Elija la lista Configuración y seleccione Todas las configuraciones.
Elija la lista Destino de la plataforma y haga clic en Cualquier CPU.
En el menú Proyecto, haga clic en Agregar referencia para abrir el cuadro de diálogo Agregar referencia.
Expanda Ensamblados y haga lo siguiente:
Expanda Framework y agregue una referencia a System.Web.
Expanda Extensiones y agregue una referencia a Microsoft.SharePoint.
- También en el cuadro de diálogo Agregar referencia, elija Examinar, navegue hasta la ubicación de Microsoft.Office.Server.PowerPoint.dll (la ubicación predeterminada es C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.Office.Server.PowerPoint\v4.0_15.0.0.0__71e9bce111e9429c), seleccione el ensamblado y elija Agregar.
En los siguientes ejemplos de C# y Visual Basic, se muestra una aplicación sencilla de PowerPoint Automation Services que convierte un archivo de PowerPoint 97-2003 (.ppt) en la carpeta Documentos compartidos de un sitio de SharePoint en un archivo Open XML de PowerPoint (.pptx) en la misma carpeta.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Microsoft.SharePoint;
using Microsoft.Office.Server.PowerPoint.Conversion;
namespace PAS_Sample
{
class Program
{
static void Main(string[] args)
{
try
{
string siteURL = "http://localhost";
using (SPSite site = new SPSite(siteURL))
{
using (SPWeb web = site.OpenWeb())
{
Console.WriteLine("Begin conversion");
// Get a reference to the "Shared Documents" library
// and the presentation file to be converted.
SPFolder docs = web.Folders[siteURL +
"/Shared Documents"];
SPFile file = docs.Files[siteURL +
"/Shared Documents/Pres1.ppt"];
// Convert the file to a stream and create an
// SPFileStream object for the conversion output.
Stream fStream = file.OpenBinaryStream();
SPFileStream stream = new SPFileStream(web, 0x1000);
// Create the presentation conversion request.
PresentationRequest request = new PresentationRequest(
fStream,
".ppt",
stream);
// Send the request synchronously, passing
// in a 'null' value for the callback parameter,
// and capturing the response in the result object.
IAsyncResult result = request.BeginConvert(
SPServiceContext.GetContext(site),
null,
null);
// Use the EndConvert method to get the result.
request.EndConvert(result);
// Add the converted file to the document library.
SPFile newFile = docs.Files.Add(
"newPres1.pptx",
stream,
true);
Console.WriteLine("Output: {0}", newFile.Url);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
finally
{
Console.WriteLine("Complete");
Console.ReadKey();
}
}
}
}
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Web
Imports Microsoft.SharePoint
Imports Microsoft.Office.Server.PowerPoint.Conversion
Namespace PAS_Sample
Class Program
Private Shared Sub Main(args As String())
Try
Dim siteURL As String = "http://localhost"
Using site As New SPSite(siteURL)
Using web As SPWeb = site.OpenWeb()
Console.WriteLine("Begin conversion")
' Get a reference to the "Shared Documents" library
' and the presentation file to be converted.
Dim docs As SPFolder = web.Folders(siteURL + _
"/Shared Documents")
Dim file As SPFile = docs.Files(siteURL + _
"/Shared Documents/Pres1.ppt")
' Convert the file to a stream and create an
' SPFileStream object for the conversion output.
Dim fStream As Stream = file.OpenBinaryStream()
Dim stream As New SPFileStream(web, &H1000)
' Create the presentation conversion request.
Dim request As New PresentationRequest(fStream, _
".ppt",
stream)
' Send the request synchronously, passing
' in a Nothing value for the callback parameter,
' and capturing the response in the result object.
Dim result As IAsyncResult = request.BeginConvert(_
SPServiceContext.GetContext(site), _
Nothing, _
Nothing)
' Use the EndConvert method to get the result.
request.EndConvert(result)
' Add the converted file to the document library.
Dim newFile As SPFile = docs.Files.Add(_
"newPres1.pptx", _
stream, _
True)
Console.WriteLine("Output: {0}", newFile.Url)
End Using
End Using
Catch ex As Exception
Console.WriteLine("Error: " + ex.Message)
Finally
Console.WriteLine("Complete")
Console.ReadKey()
End Try
End Sub
End Class
End Namespace
Para compilar y ejecutar el ejemplo
Agregue un documento de PowerPoint con el nombre Pres1.ppt en la carpeta Documentos compartidos del sitio de SharePoint.
Genere y ejecute el ejemplo.
Después de esperar un minuto para que se ejecute el proceso de conversión, vaya a la carpeta Documentos compartidos del sitio de SharePoint y actualice la página. La biblioteca de documentos contiene ahora un nuevo documento de PowerPoint, Pres1.pptx.
PowerPoint Automation Services en SharePoint ofrece a las empresas funciones avanzadas para administrar sus archivos de presentación. Esta solución de alto rendimiento permite una generación y manipulación escalables en el servidor, ya sea como lote o a pedido.
Nota:
Antes de ejecutar el ejemplo, asegúrese de que se habilitó PowerPoint Automation Services en la consola de Administración central de SharePoint.
Para comprobar que PowerPoint Automation Services está habilitado, haga lo siguiente:
- En la consola de Administración central, en Configuración del sistema, elija Administrar servicios en el servidor y asegúrese de que Servicio de conversión de PowerPoint se haya establecido en Iniciado.
- También en la consola de Administración central, en Administración de aplicaciones, elija Administrar aplicaciones de servicio y asegúrese de que Aplicación de servicio de conversión de PowerPoint y Proxy de la aplicación de servicio de conversión de PowerPoint se hayan establecido en Iniciado.
Conclusión
PowerPoint Automation Services en SharePoint ofrece a las empresas funciones avanzadas para administrar sus archivos de presentación. Esta solución de alto rendimiento permite una generación y manipulación escalables en el servidor, ya sea como lote o a pedido.