Hace unos días me pidieron en el trabajo que realizara una prueba de concepto de un Upload de
Ficheros, que permitiese limpiar los metadatos, ya que no se quiere que se muestre los metadatos del
usuario que creo ese fichero.
Nota: Cuando hablamos de metadatos se refiere a las propiedades del fichero que contiene los datos
Estuve investigando un poco y me di cuenta (al menos para mi) de lo difícil que fue encontrar
exactamente lo que quería,
Y lo que quería era que a partir de un fichero existente a subir se le pudiese limpiar o sanítizar los
metadatos del fichero y permitir su descarga , obviamente de la forma mas fácil y rápida posible,
pensé que se podría subir el fichero original con metadatos y a partir de este crear un fichero, con el
mismo contenido pero sin información en los metadatos, no sabes a veces cuantos dolores de cabeza me
trae hacer nuevos desarrollos pero es muy interesante y lo siento como un desafío, solo que hay que
investigar un poco, la mayor parte de mi tiempo es investigar creo que uno 60% consume de mi
tiempo, gracias a Dios tenemos Google , jejejeje.
Entonces vi una necesidad de exponer con algunos ejemplos como se debe realizar una limpieza de
metadatos, ya que me fue muy difícil de encontrar en español y realizarlo y bueno es encontrar las
librerias adecuadas y las paginas adecuadas donde te expliquen como hacerlo o dar una idea
Hablare primero de lo ultimo que hice y fue trabajar con la limpieza de metadatos en ficheros office
(docx, xlsx, pptx), para trabajar con este tipo de ficheros, lo primero que encontré y que recomendaban
era usar la librería DocumentFormat.OpenXML
Esta librería me permite crear ficheros office sin mayor esfuerzo, y tambien permite vaciar aquellas
propiedades que no quiero que aparezcan con datos, entre otras muchas funcionalidades
Esta librería la puedes descargar de Nuget desde Visual Studio
Lo primero es declarar las librerias a usar:
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml;
Lo siguiente que hice fue esta porción de codigo, vale la pena aclarar que funciona bien, ya que no
encontré una funcionalidad .Clear() o Sanitize() que limpiara todo automáticamente, en este caso me
toco ir propiedad a propiedad y eso a las que pude encontrar.
Lo explicare un poco, se crea una instancia del documento y luego que ya esta abierto, con permisos
de modificación, se pueden vaciar las propiedades, al finalizar el using , lo que hará este objeto en el
documento es que le hará un .Save() automáticamente y de esta forma se podrá tener un fichero limpio
de metadatos
Ejemplo Documentos Word:
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(rutaAbsoluta, true))
{
wordDoc.PackageProperties.Creator = ""; // Autor
wordDoc.PackageProperties.Created = null; //Fecha de Creación
wordDoc.PackageProperties.Description = "";
wordDoc.PackageProperties.Version = ""; //Version del fichero
wordDoc.PackageProperties.Title = ""; //Titulo del fichero
wordDoc.PackageProperties.ContentStatus = "";
wordDoc.PackageProperties.ContentType = "";
wordDoc.PackageProperties.Category = "";
wordDoc.PackageProperties.Identifier = "";
wordDoc.PackageProperties.Keywords = "";
wordDoc.PackageProperties.Language = "";//Idioma del fichero
wordDoc.PackageProperties.LastModifiedBy = "";
wordDoc.PackageProperties.LastPrinted = null; //Fecha de ultima impresión
wordDoc.PackageProperties.Modified = null;
wordDoc.PackageProperties.Subject = "";
wordDoc.PackageProperties.Revision = ""; //Numero de Revisión
}
Para el caso de Excel y Power Point, las propiedades son las mismas, lo único que cambia es el objeto
con el que se usa la apertura del fichero existente
Excel -> SpreadsheetDocument package = SpreadsheetDocument.Open(rutaAbsoluta, true)
Power Point -> PresentationDocument presDoc = PresentationDocument.Open(rutaAbsoluta, true)
NOTA IMPORTANTE: de esta manera podrás vaciar los metadatos mas comunes , como lo
mostramos en el ejemplo
Tambien encontré otra Librería que podría ser útil, lo único que es una librería de pago, y cuando haces
el Sanitize del fichero, te lo crea , pero te genera un error, lo que hice fue gestionar ese error, para que
al menos pudiese funcionar, pero no conozco cuantos ficheros dejará crear o sanitizar
La librería se llama GroupsDocs.Metadata , la encontré en GitHub, les dejo el enlace para que puedan
ver un poco mas de este proyecto
Aquí les dejo una porción del codigo:
using (Metadata metadata = new Metadata(rutaAbsoluta))
{
var affected = metadata.Sanitize();// esta es la que hace todo el poder (limpia todo)
Console.WriteLine("Properties removed: {0}", affected);
metadata.Save(rutaAbsoluta2);
}
Si no la encuentras puedes ir a la linea de comandos de Nuget en Visual Studio y ejecutas el siguiente comando: Install-Package GroupDocs.Metadata
Espero este Post haya servido para traer un poco de claridad en cuanto al tema, espero te sirva para tus
desarrollos y que estas funcionalidades puedan estar en tu biblioteca de codigo fuente
Si te sirvió escribe en los comentarios abajo y cuéntanos tu experiencia, y no se te olvide darle like y
compartir, estamos en contacto!
No hay comentarios.:
Publicar un comentario