miércoles, 7 de octubre de 2009

Control en los documentos una solución práctica para SharePoint Services o Server

Un requerimiento muy popular de los clientes que poseen un ambiente de colaboración y portales en SharePoint es el control de los documentos en cuando a su copia o impresión.  En las siguientes líneas les presento una solución práctica que bien puede funcionar para SharePoint Services o Server.

Adobe tiene un producto llamado Acrobat en su versión Standard o Professional que nos permite crear documentos PDF basados en nuestros documentos creados en Microsoft Office que bloque su copia o impresión del documento.  Lo curioso del asunto es que si mostramos el documento PDF en el navegador de IE la opción de hacer una copia del documento es permitido.

Lo que podemos hacer es presentar el documento incrustado en una página Web dentro de un portal en SharePoint, a través del siguiente código HTML que funciona para IE 6,7 y 8:

<embed height="650" 
src="http://server/Documents/doc_name.pdf#toolbar=0"
type="application/pdf" width="100%">



Donde #toolbar=0 nos oculta las opciones de toolbar del ActiveX Control de Adobe que utiliza el navegador. 



Si prefiere la versión con el código Object  aquí le va:



<div class="nombre_clase" >
<object data="prueba.pdf" type="application/pdf" width="100%" height="800">
<param name="src" value="http://server/Documents/doc_name.pdf#toolbar=0&zoom=80%" />
</object>
</div>


Otro parámetro que puede utilizar es zoom indicando que mostrará el documento al 80% de su tamaño real.



Si esta interesado en conocer que parámetros tiene disponibles para la apertura de documentos dentro de la URL busque dentro de la documentación para desarrolladores de Adobe el siguiente manual:



Parameters for Opening PDF Files



Si desea probar el código mostrado arriba puede agregar un elemento Web que trae SharePoint denominado Content Editor Web Part y en la opción Source Editor, el código mostrado arriba y la ubicación del documento PDF dentro del  portal.



image



Si hace clic derecho sobre el documento y le muestra la opción de Imprimir es porque el documento no esta bloqueado para Impresión y no hay forma de ocultarlo si no utilizamos el producto mencionado para bloquearlo, es decir es una solución integral entre el producto que nos genera los documentos PDF bloqueados y el código que utilizaremos en los elementos web para incrustar el documento dentro de nuestro portal y así bloquear la opción de copiar o imprimir el documento.



La propuesta será crear dos elementos web uno para mostrar el PDF incrustado y el otro para direccionar hacia la página que contiene el elemento Web que muestra el PDF al hacer clic sobre el, como lo muestra el siguiente diseño:



image



El segmento de código del elemento Web que muestra el PDF incrustado es muy sencillo es el siguiente:



  private void MostrarPDFIncrustado() {
string script =
string.Format("<embed height=\"{0}\" src=\"{1}#{3}\" type=\"application/pdf\" width=\"{2}\">"
,ObtenerAltura()
,_nombreDocumento
,ObtenerAncho()
,ObtenerParametrosAperturaPDF()
);
Controls.Add(new Literal{Text = script});
}


Y el segmento de código para el elemento Web que básicamente construimos la URL para redireccionar hacia la página que muestra el PDF incrustado es el siguiente:



 var scriptCommand = string.Format("{0}?{1}={2}"
,ObtenerURLViewPDF()
,ObtenerParametroURLPDF()
,ObtenerURLDocumento());



La mayoría de métodos obtienen del Web.Config del portal la información en la sección de AppSettings a excepción del método ObtenerURLDocumento() que este varía obviamente.  Aquí les dejo los valores definidos en el archivo de configuración para que tengan una idea:



    <add key="PDF_INCRUSTADO_ANCHO" value="100%" />
<add key="PDF_INCRUSTADO_ALTO" value="800" />
<add key="PDF_INCRUSTADO_PARAMETROS_APERTURA" value="toolbar=0#zoom=80%" />
<add key="PARAMETRO_URL_PDF" value="SRC_PDF" />
<add key="URL_VIEWPDF_PAGE" value="/Pages/ViewPDF.aspx" />


Ojo con el valor toolbar=0#zoom=80% que debe de ser separado por el signo & pero esto no es aceptable en el Web.Config, por lo que dentro del código luego hago el reemplazo del símbolo # por &. Por ejemplo:



return ConfigurationManager.AppSettings.Get("PDF_INCRUSTADO_PARAMETROS_APERTURA").Replace("#","&");



Hasta la próxima, Code4Fun!,



Manolo Herrera



Referencia de interés, y fuentes de consulta de este artículo:



http://www.adobe.com/devnet/acrobat/?view=documentation



http://www.techper.net/2008/02/27/4-ways-to-stream-pdf-and-some-tips/

No hay comentarios.: