xaml - UWP Generar un PDF: el mejor enfoque
(1)
Actualmente, hay muchos paquetes pagos de terceros para generar PDF en UWP, como Syncfusion y XFinium . Para bibliotecas gratuitas como PDFSharp que no están disponibles en UWP. Como no desea pagar, puede crear una aplicación clásica con bibliotecas gratuitas y luego crear un AppService para manejarla. Para obtener más detalles, consulte AppServiceBridgeSample .
Tener una página XAML y convertirla en PDF imprimiendo
Generar el PDF mediante la función de impresión puede funcionar bien. Pero para sus requisitos "a través de un cuadro de diálogo de impresión oculto" no es posible, la IU de impresión no se puede ocultar para imprimir.
Haz algo similar con un WebView y HTML
La biblioteca jsPDF abierta puede ayudarlo a generar HTML a PDF mediante JavaScript. Y puede obtener el resultado del PDF devuelto por InvokeScriptAsync
desde WebView
. Por ejemplo:
JavaScript
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.4/jspdf.debug.js"></script>
<script type=''text/javascript''>
function print() {
var doc = new jsPDF()
doc.text(''Hello world!'', 10, 10);
doc.circle(50, 50, 50);
var pdfresult = doc.output();
document.getElementById(''myDiv'').innerText = pdfresult;
//doc.save(''a4.pdf'');
return pdfresult;
}
</script>
</head>
<body>
<div id=''myDiv''>Hello</div>
</body>
</html>
WebView
Webview.Navigate(new Uri("ms-appx-web:///Assets/test.html"));
string pdfresult = await Webview.InvokeScriptAsync("eval", new string[] { "print()" });
StorageFile pdf = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.pdf");
await FileIO.WriteTextAsync(pdf, pdfresult);
Después de todo, puede considerar Escribir el formato de archivo PDF usted mismo. Aquí hay un documento para Windows Phone, pero aún puede hacer referencia.
Estoy trabajando en una aplicación UWP y como uno de los requisitos que necesito para generar un archivo PDF de forma dinámica.
Hay algunos inconvenientes / requisitos que necesito considerar:
- Se necesita una capacidad para generar PDF desde la aplicación UWP directamente / sin conexión
- Potencialmente, se necesita la capacidad de generar el informe en el servidor, idealmente a partir de la misma plantilla de origen
- El informe debe ser algo dinámico (es decir, no compilado en la aplicación en sí mismo y formato editable sin la recompilación de la aplicación)
- Idealmente, no dependa de una biblioteca / componente propetario de fuente cerrada
He tenido algunas ideas sobre cómo abordar esto:
- Tener una página XAML y convertir PDF imprimiendo esa vista XAML como un PDF a través de un diálogo de impresión oculto - limitado por el hecho de que XAML necesitará ser compilado en la aplicación + probablemente sería imposible usar el mismo enfoque para generar informes en el lado del servidor.
- Haga algo similar con un WebView y HTML, pero eso requerirá que se ejecute la lógica de JavaScript, y no estoy seguro de si es posible en la aplicación UWP.
¿Alguien ha logrado algo similar en el pasado? Si es así, ¿qué enfoque ha tomado?