Biblioteca de PDF para agregar metadatos de palabras clave a PDF

Originalmente publiqué esta pregunta en el desbordamiento de pila, pero me recomendaron publicarla aquí.

Pregunta inicial

Estoy en proceso de convertir una aplicación de Windows Mobile a Xamarin Forms, específicamente Android. En la aplicación de Windows Mobile, creamos archivos PDF usando PDF4NET y podemos agregar palabras clave a la sección Información del documento del PDF. En la conversión a Xamarin Forms (android), no puedo continuar usando PDF4NET debido a las restricciones de la plataforma, pero me encontré con PrintedPDFDocument. Cumple con todos los requisitos hasta ahora, excepto agregar palabras clave a la información del documento. Todo el proceso de creación del PDF se realiza en el dispositivo móvil: texto/imágenes y metadatos.

Todavía no he podido encontrar en ninguna parte de la documentación para PrintedPDFDocument sobre cómo agregar palabras clave y no parece que el objeto tenga una propiedad para la información del documento. ¿Hay alguna manera especial de hacer esto, o no es compatible en absoluto? Si no hay una manera de hacer la información del documento en PrintedPDFDocument, ¿cuáles son algunas otras opciones que tengo para la generación de PDF con Xamarin y Android?

Esto sería para uso comercial, pero si hay una biblioteca de código abierto que maneje esto, sería genial.

¡Gracias por adelantado!

Usted menciona la creación de PDF. ¿Cuál es la fuente del PDF? ¿Desde otro tipo de archivo (por ejemplo, DOCX, PNG), o manualmente usando la API de PDF4NET?
@Ryan Estamos creando archivos PDF manualmente con PDF4NET y debemos continuar haciendo lo mismo.
Oh, porque su pregunta decía "No puedo continuar usando PDF4NET". ¿Está diciendo que crea el lado del servidor PDF usando PDF4NET, pero que agregará los metadatos de palabras clave en Android? Quizás podría actualizar su pregunta para aclarar las cosas.
Gracias por el aporte; Seguí adelante y aclaré eso. Realizamos toda la creación del PDF en la unidad móvil, ya que es posible que el dispositivo no siempre tenga conexión a Internet. La creación del PDF también debe realizarse con bastante frecuencia a lo largo del día, ya que se utiliza como "prueba de entrega". A partir de ahora, parece que estamos planeando usar XFINIUM, ya que se adapta a todas nuestras necesidades.
Entonces, ¿transferirá el código API de PDF4NET que usó para generar el PDF a la API de XFINIUM? Además, ¿qué importancia tienen las palabras clave para ti? Es una característica que rara vez se usa e incluso está obsoleta en la última especificación ISO de PDF 2.0. Por último, ¿podría dar más detalles sobre lo que quiere decir con "prueba de entrega"?
A la portabilidad, eso es correcto. No puedo entrar en muchos detalles sobre el proyecto, ya que estamos contratados para trabajar en él, pero creo que el uso de las palabras clave lo utiliza esencialmente otro tercero para clasificar los archivos PDF con fines de facturación. Creo que el caso de uso también debería responder parcialmente a su "prueba de entrega"

Respuestas (3)

La biblioteca XFINIUM.PDF admite agregar palabras clave y otra información a archivos PDF en Xamarin Android e iOS.
El siguiente código muestra cómo lograr esto:

PdfFixedDocument document = new PdfFixedDocument(inputPdfFile);

// Display the document in full screen mode.
document.DisplayMode = PdfDisplayMode.FullScreen;

// Fill the document information.
document.DocumentInformation = new PdfDocumentInformation();
document.DocumentInformation.Author = "Xfinium Software";
document.DocumentInformation.CreationDate = DateTime.Now;
document.DocumentInformation.ModifyDate = DateTime.Now;
document.DocumentInformation.Creator = "Xfinium.Pdf DocumentProperties sample";
document.DocumentInformation.Producer = "Xfinium.Pdf";
document.DocumentInformation.Title = "Xfinium.Pdf DocumentProperties sample";
document.DocumentInformation.Subject = "Xfinium.Pdf sample code";
document.DocumentInformation.Keywords = "xfinium.pdf,pdf,sample";

// Set custom metadata in the XMP metadata.
document.XmpMetadata = new PdfXmpMetadata();
// This custom metadata will appear as a child of 'xmpmeta' root node.
document.XmpMetadata.Metadata = "<custom>Custom metadata</custom>";

// Set the viewer preferences.
document.ViewerPreferences = new PdfViewerPreferences();
document.ViewerPreferences.CenterWindow = true;
document.ViewerPreferences.DisplayDocumentTitle = true;
document.ViewerPreferences.HideMenubar = true;
document.ViewerPreferences.HideToolbar = true;
document.ViewerPreferences.HideWindowUI = true;
document.ViewerPreferences.PrintScaling = PdfPrintScaling.None;

// Set the PDF version.
document.PdfVersion = PdfVersion.Version15;

document.Save(outputPdfFile);

Descargo de responsabilidad: trabajo para la empresa que desarrolla la biblioteca.

Gracias por esto. Le pasé esta información y mi empresa se pondrá en contacto con Xfinium con una pregunta sobre las versiones móvil y multiplataforma.

Syncfusion Essential PDF admite la creación de PDF en la aplicación Xamarin. Su requisito podría lograrse utilizando el fragmento de código a continuación

//Create a new PDF document.

PdfDocument document = new PdfDocument();

//Set document information.

document.DocumentInformation.Author = "Syncfusion";

document.DocumentInformation.CreationDate = DateTime.Now;

document.DocumentInformation.Creator = "Essential PDF";

document.DocumentInformation.Keywords = "PDF";

document.DocumentInformation.Subject = "Document information DEMO";

document.DocumentInformation.Title = "Essential PDF Sample";

//Add a page to the document.

PdfPage page = document.Pages.Add();

//Create PDF graphics for the page.

PdfGraphics graphics = page.Graphics;

//Set the font.

PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 20);

//Draw the text.

graphics.DrawString("Hello World!!!", font, PdfBrushes.Black, new PointF(0, 0));

//Save the document.

document.Save("Output.pdf");

//Close the document.

document.Close(true);

https://help.syncfusion.com/file-formats/pdf/working-with-document#working-with-document-properties

El esquema personalizado se puede crear usando el siguiente enlace https://help.syncfusion.com/file-formats/pdf/working-with-metadata#adding-custom-schema-to-the-pdf-document

Todo el conjunto de controles está disponible de forma gratuita (también para aplicaciones comerciales) a través del programa de licencia comunitaria si califica (menos de 1 millón de dólares estadounidenses en ingresos). La licencia comunitaria es el producto completo sin limitaciones ni marcas de agua.
Nota: Trabajo para Syncfusion.

Gracias por esta recomendación. Transmitiré esta recomendación antes de que mi jefe se comprometa con XFINIUM.

PDFTron PDFNet SDK admite la creación y edición de PDF completos, junto con un motor de renderizado multiplataforma completo. El SDK, con una API idéntica para la creación de PDF y metadatos, está disponible para Xamarin , Android , UWP , iOS y Web, junto con Linux, Windows (.Net, .NetCore) y macOS.

Nuestra aplicación de exhibición, Xodo, que está disponible de forma gratuita en todas las tiendas móviles y que tiene una calificación de 4.7/5 en Android, es una excelente manera de evaluar a nuestro espectador. https://play.google.com/store/apps/details?id=com.xodo.pdf.reader

Entonces, con un solo SDK y API, usando Xamarin, puede admitir UWP, Android y, si le gusta, iOS.

Para comenzar con su evaluación, comience aquí. https://www.pdftron.com/documentation/xamarin/guides

El SDK incluye una muestra de CompleteReader, que es en lo que se basa la aplicación Xodo.

Este es el ejemplo de la API de contenido de página de bajo nivel, aunque hay otras formas de generar contenido de página PDF con PDFNet. https://www.pdftron.com/documentation/samples/xamarin/cs/ElementBuilderTest?platforms=xamarin

Para agregar palabras clave, haría algo similar a lo siguiente.pdfdoc.GetDocInfo().SetKeywords("keyword1, keyword2, keyword3");

Finalmente, PDFTron ofrece soporte de evaluación completo y puede brindar asistencia para migrar de su código PDF4NET a PDFNet.

Gracias por esta recomendación. Transmitiré esta recomendación antes de que mi jefe se comprometa con XFINIUM.