Renombrar páginas como ficheros independientes pdf

Tengo un archivo pdf de pongamos 20 pag. Mi pregunta es como puedo extraer esas 20 páginas en 20 archivos independientes dándoles a cada una un nombre de fichero distinto. Extraer las páginas como ficheros independientes sé como se hace, pero al extraerlas quisiera darles yo el nombre de fichero que me interese a cada una. ¿Hay alguna forma o código VB para hacerlo?

2 respuestas

Respuesta
2

Hol.a

No has mencionado que versión de VB usas.

Salu2

Abraham Valencia

Te lo voy a poner más fácil, o eso creo. En lugar de que el archivo sea un .pdf sería tener un documento word combinado (con campos de una tabla de excel)  de 20 pág.  y usando el módulo  Vb que trae word, hacer una macro que me cree un fichero distinto con cada una de las páginas y que tenga como nombre del fichero uno de los campos combinados del documento.

No sé si me has llegado a coger la idea.

Gracias.

Hol.a

El entorno de programación de Office es el VBA, no VB por si acaso (no son lo mismo).

Como para que te des idea, la macro que te voy a dejar de ejemplo convierte cada una de las páginas de un archivo Word (cualquiera sea el número) en un archivo pdf independiente. En el ejemplo hay una ruta determinada (que tú debes cambiar a la tuya) y el nombre de cada archivo es "pdfdepagina" más el número de página:

Sub ConvertiraPDF()
Dim nPaginas As Integer, x As Integer
Let nPaginas = ActiveDocument.ComputeStatistics(wdStatisticPages)
For x = 1 To nPaginas
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
    "C:\Users\EAVJ\Documents\pdfdepagina" & x & ".pdf", ExportFormat:=wdExportFormatPDF, _
    OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
    wdExportFromTo, From:=x, to:=x, Item:=wdExportDocumentContent, _
    IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
    wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
    True, UseISO19005_1:=False
Next x
End Sub

Comentas

Abraham Valencia

Gracias Abraham, es exactamente lo que quería pero con un matiz, a ver si rizamos el rizo.

Al ser un documento combinado, ¿ los pdf que me va generando por cada página, podrían llevar como nombre de fichero uno de los campos del documento?....... imagínate que hay un campo que es 'farmacia'. Pues, que al generarse el pdf tomaran como nombre el campo de 'farmacia'. Imagínate, es un documento de 497 páginas personalizadas que he de enviar cada página a la farmacia correspondiente que figura dentro del campo [farmacia]. ¿Sería posible?.

Gracias de antemano.

Para capturar el valor que tiene un campo que proviene de "Combinar correspondencia", usa algo así:

Activedocument.MailMerge.DataSource.DataFields("Nombre_del_Campo").Value

Salu2

Abraham Valencia

Gracias de nuevo.

Este es el código que tengo en el documento ya combinado, el que tiene las 497 páginas.

FARMA = ActiveDocument.MailMerge.DataSource.DataFields("FARMACIA").Value
Pero al ejecutarlo me da el error: 5852 "el objeto solicitado no está disponible".

¿Qué puede ser?.

Ya pero ¿cómo usas la variable "Farma"? ¿En qué línea te da el error?

Abraham Valencia

Este es el código que me enviaste anteriormente y donde he insertado este nuevo para capturar el campo combinado:

Let nPaginas = ActiveDocument.ComputeStatistics(wdStatisticPages)
For x = 1 To nPaginas

FARMA = ActiveDocument.MailMerge.DataSource.DataFields("FARMACIA").Value
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
ruta & "\" & "Far_" & FARMA & ".pdf", ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
wdExportFromTo, From:=x, To:=x, Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
True, UseISO19005_1:=False
Next x
End Sub

¿Estás 100% seguro que ese es el nombre del campo?

Abraham Valencia

Seguro, lo he mirado en el documento original, el que se usa para la combinación de la correspondencia. 

A no ser que no se pueda capturar el valor de un campo de un documento ya combinado.

Si se puede capturar el valor que mencionas pero antes dos cosas: Primero, dentro de un "For" en el cual hay una variable no tiene sentido dar el mismo nombre siempre, si tu intención es que cada hoja tenga el nombre de cada valor de ese campo tienes que "mover" el recordset; segundo, no mencionaste en que línea da el error.

Abraham Valencia

En esta línea es donde me da el error

FARMA = ActiveDocument.MailMerge.DataSource.DataFields("FARMACIA").Value

Primero saca que nada, verifica el nombre del campo, anda a la pestaña "Correspondencia" y en el grupo "Escribir e insertar campos" dale click a "Insertar campo combinado" y te aparecerán los nombres de todos los campos. Otra cosa, si dejas tal cual tu macro, siempre intentará dar el mismo nombre así que antes del "Next" debes colocar esto:

    ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord

Abraham Valencia

Buenos dias por allá. Definitivamente, el nombre del campo es "FARMACIA". 

Porque.... ¿estamos seguro que el código vba hay que incluirlo en el documento ya combinado?, o ¿tendría que estar en el documento que se creó para la combinación? .

Salu2

A ver, para hablar los mismos terminos, cuando desde Word se usa la herramienta "Combinar correspondencia" tenemos dos documentos: La "base de datos" (Excel, Access, MySQL, etc.) y la "Carta" que es un documento de Word (aunque bien sabemos que no necesariamente la usaremos como una carta propiamente dicha).

Entonces cuando ya se realizó la "combinación", en la "carta" incluimos el código que estás intentando implementar y no debería tener problemas si el campo se llama tal cual mencionas. Si tienes todo en la "carta" y ya verificaste el nombre del campo, quizá por ahí el campo tiene un espacio delante o detrás y por eso el problema. Abre lo que te mencioné de "insertar campo combinado" y envía una captura de pantalla por aquí.

Abraham Valencia

                 Esta es la captura de pantalla. Como verás el campo se llama FARMACIA. 

¿Estás usando Word 2007 o 2010?

En ese mismo archivo inserta un módulo standard y pega esto:

Sub Prueba1()
Dim nCampos As Integer
Let nCampos = ActiveDocument.MailMerge.DataSource.DataFields.Count
MsgBox nCampos
End Sub
Sub Prueba2()
Dim cadena As String
Let cadena = ActiveDocument.MailMerge.DataSource.DataFields("FARMACIA").Value
MsgBox cadena
End Sub

Corre la macro "Prueba1" primero y luego la otra y comenta por favor los resultados. No olvides mencionar tu versión de Word, no es raro ese error en esas versiones.

Abraham Valencia

He corrido la macro Prueba1 y me ha dado como resultado nCampos = 0

La macro Prueba2 me sigue dando error de "el elemento no está disponible" en la línea                   "Let cadena = ActiveDocument.MailMerge.DataSource.DataFields("FARMACIA").Value"
La versión de Ms Office es la 2010.

Salu2

Según la captura de pantalla y los resultados de la macro, es como que la combinación propiamente dicha aún no está finalizada/iniciada en ese documento en especifico. Veo, aparentemente, que detrás de la captura dice "Farmacia N°..." y quizá el campo "Farmacia" pero ¿vacío? O sea solo con el nombre del campo a pesar de que aparentemente debería estar en el registro número 1.

Abraham Valencia

Pues la verdad es que ya he hecho todo tipo de pruebas y sigo igual. He vuelto a combinar el documento, le he insertado los códigos Prueba1 y Prueba2 que me enviaste y me sigue dando el mismo error "error 5852 el elemento solicitado no está disponible". Sigo buscando por ahí porque ya no sé qué más hacer. Si se te ocurre algo más...

Gracias por todo. Un saludo.

Tres cosas más: ¿De qué base de datos provienen los datos? ¿Tiene clave? Y segundo, ¿intentaste cunado hay algún registro en el Word? Porque como comente en el mensaje anterior, parecía que el campo estaba vacío. Tercero ¿tu Office está actualizado al SP2 o al menos al SP1? Como también comenté, algo de un error en Office 2010 recuerdo relacionado a lo que te sucede cuando no tenían el Office actualizado.

Abraham Valencia

Los datos para la combinación provienen de un fichero excel. Sin clave. Mi Office 2010 tiene el SP2

Se nos presenta un reto........

Un saludo

Respuesta
1

Para extraer páginas de forma individual puedes hacerlo con un software que te permite hacer esta tarea, es uno de los más completos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas