Unir archivos PDF
Hola, buen día. Necesito generar un archivo PDF cuyo contenido sea el de varios pdf mas para obtener un solo archivo pdf final. Es posible hacerlo en Delphi 7?
He estado buscando pero no he logrado conseguir lo que necesito. Si alguien tiene algún dato lo agradezco. Saludos!!!:) |
Casi todos los visores de pdf tienen una opción por línea de comandos para hacer eso.
Puedes ejecutarlo desde delphi con el típico shellexecute, por ejemplo, pasándole los parámetros adecuados. |
Técnicamente puedes agarrar varios PDFs y unirlos sin necesidad de usar librerías o programas externos, ya que tu mismo puedes reconstruir la numeración de los objetos dentro del PDF y sus referencias. Si logras extraer la información de los objetos dentro del PDF y crear un árbol del objetos, te sería bastante fácil el unir varios PDFs.
Por lo general esta es la forma en que un PDF se forma Código:
%PDF-1.0 De cada PDF lo que te interesa extraer son los objetos Código:
X Y obj .... endobj Con esa información puedes reconstruir un PDF con la unión de dos o más PDFs, lo que tienes que modificar es: 1.- La numeración de los objetos, que podría aplicarse sólo a renumerar los objetos que pertenzcan al segundo PDF, más no al primero. 2.- Reconstruir el catálogo de páginas 3.- Reconstruir las Referencias 4.- Reconstruir la sección xref calculando las posiciones de los objetos (offset) 5.- Reconstruir el trailer 6.- en startxref calcular el offset de la tabla xref. Si analizamos la siguiente parte del código verás que no es del todo complejo Código:
xref Código:
0 11 Código:
0000000000 65535 f Después de esto viene el trailer, que nos indica cual objeto es la raiz del documento PDF, más la cantidad de objetos más 1 Código:
trailer El objeto 10 me envia al catálogo de páginas Código:
10 0 obj Código:
3 0 obj |
Hola.
Hace algunos años necesité hacer "merge" de varios pdfs y encontré esta librería, que en su versión "lite" es "free". Creo que esto te puede resolver el problema de forma fácil. Saludos |
Muy buena explicación, Tsk
Gracias y un saludo |
La franja horaria es GMT +2. Ahora son las 16:18:20. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi