Una de las primeras cosas que me di cuenta es que con el nuevo Webbrowser basado en WebView2 de Microsoft Edge en vez de en Chromium de Google, ya no aparece un cuadro de dialogo emergente para imprimir.
Esto en principio no es un problema porque las opciones de impresión nos las presenta como si fuera una página web, pero en mi caso, he empelado este control en mas de un sitio de forma invisible sólo para cargar pdfs y poderlos imprimir, y en esos casos, el que la ventana no sea emergente si que representa un problema.
Por esto, he creado una ventana de impresión a imagen y semejanza de la que suelo utilizar para imprimir mis datawindow.
Para poder simular las opciones de imprimir nº de copias, intervalo de páginas, o el imprimir par o impar he necesitado manipular los PDF.
Básicamente lo que hago es trocear el PDF en páginas individuales y luego unir las que me interesa según el criterio elegido, finalmente usado la librería RawPrint, que ya tenía creada para el envío directo de archivos a la impresora, lo imprimo.
Para no entrar en detalles de la librería RawPrint os dejo link al artículo:
rsrsystem.blogspot.com/2022/06/envio-directo-archivos-impresora-de.html
Para la división y la unión de los archivos PDF, he utilizado el nuevo objeto de PowerBuilder PDFDocument. He creado una Custom Class heredando sus propiedades al que he llamado n_cst_pdfdocument y he creado las siguiente funciones:
public function boolean of_merge (string as_filenames[], string as_targetpdf)
public function long of_split (string as_inputfile, string as_outputpath)
public function long of_pagecount (string as_inputfile)
Con la función of_merge uniremos los archivos recividos en la array as_filenames y grabaremos el archivo pasado en la variable as_targetpdf. La función retorna True o False para indicar si ha tenido éxito o no.
Con la función of_split partiremos en páginas individuales el archivo recibido con la variable as_inputfile y los guardaremos en el directorio recibido en la variable as_outputpath. Esta función retorna el numero de archivos que se han creado, que debe ser igual al numero de páginas del archivo recibido.
Finalmente la función of_pagecount nos devuelve el numero de páginas del archivo recibido por la variable as_inputfile.
En fin no me en enrollo más y os dejo el enlace de proyecto actual en GitHub:
Comentarios
Publicar un comentario