Agregar y editar marcadores a pdf

22

Al obtener metadatos de algunos archivos pdf con marcadores pdftk, observo el formato de los marcadores en metadatos pdf. Así que supongo que con pdftk, es posible agregar y editar marcadores de un archivo pdf.

Aquí hay tres pasos que sigo:

  1. En primer lugar, obtengo los metadatos (incluidos los marcadores si los hay) de un archivo pdf a un archivo de texto pdftk in.pdf dump_data > in.info.
  2. A continuación, agrego algunos marcadores en el archivo de texto de metadatos in.info, cambiándolo de

    InfoKey: Creator
    InfoValue: PScript5.dll Version 5.2
    InfoKey: Title
    InfoValue: SSReader Print.
    InfoKey: Producer
    InfoValue: Acrobat Distiller 7.0 (Windows)
    InfoKey: Author
    InfoValue: Administrator
    InfoKey: ModDate
    InfoValue: D:20050605073244+08'00'
    InfoKey: CreationDate
    InfoValue: D:20050605073244+08'00'
    PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
    PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
    NumberOfPages: 400
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    

    a

    InfoKey: Creator
    InfoValue: PScript5.dll Version 5.2
    InfoKey: Title
    InfoValue: SSReader Print.
    InfoKey: Producer
    InfoValue: Acrobat Distiller 7.0 (Windows)
    InfoKey: Author
    InfoValue: Administrator
    InfoKey: ModDate
    InfoValue: D:20050605073244+08'00'
    InfoKey: CreationDate
    InfoValue: D:20050605073244+08'00'
    PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
    PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
    NumberOfPages: 400
    BookmarkBegin
    BookmarkTitle: Front cover
    BookmarkLevel: 1
    BookmarkPageNumber: 1
    BookmarkBegin
    BookmarkTitle: About the Author
    BookmarkLevel: 1
    BookmarkPageNumber: 5
    BookmarkBegin
    BookmarkTitle: Title page
    BookmarkLevel: 1
    BookmarkPageNumber: 6
    BookmarkBegin
    BookmarkTitle: Copyright page
    BookmarkLevel: 1
    BookmarkPageNumber: 7
    BookmarkBegin
    BookmarkTitle: Foreword
    BookmarkLevel: 1
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    
  3. Luego trato de volver a colocar los metadatos editados en el archivo pdf pdftk in.pdf update_info in.info output out.pdf.

Pero cuando abro el nuevo archivo pdf out.pdfen evince o adobe reader, no hay ningún marcador en el nuevo archivo pdf.

Si consigo los metadatos del archivo PDF out.pdfmediante pdftk out.pdf dump_data > out.info, no habrá marcadores en out.info. Parece que los marcadores no se agregaron correctamente.

Me preguntaba si hay algunos errores? ¿Cómo debo agregar y editar marcadores de un archivo pdf, no necesariamente por pdftk?

Tim
fuente
1
Esta pequeña herramienta gráfica funcionó para mí. (PDF Mod 0.9.1) apps.fedoraproject.org/packages/pdfmod
abhijit

Respuestas:

12

Me parece que desde la versión 1.45 (2012-12-06), pdftk permite la modificación de marcadores a través del comando update_info:

Ahora puede agregar o cambiar los marcadores de un PDF usando update_info.

vía: http://www.pdflabs.com/docs/pdftk-version-history/

usuario37186
fuente
3
Esto funcionó muy bien para mí. Se debe agregar eso en el archivo de entrada sobre las BookmarkBeginetiquetas antes de que falte cada entrada de marcador.
danielp
4

jPDFtweak (Java, por lo que se ejecuta en Unix / Linux) puede alterar los marcadores, pero no sé si puede escribir algo con él.

Para las secuencias de comandos, supongo que su única opción nativa de Unix / Linux sería pdflatex con el paquete pdfpages. Pero esa es una curva de aprendizaje si aún no es usuario de LaTeX.

EDITAR: en realidad puede ser posible con ghostscript: ver aquí o aquí o aquí

precioso
fuente
4

Si todavía te quedas con esos scripts de Unix, entonces

  1. extraer los datos de marcadores descargados de pdftk
  2. escriba una secuencia de comandos adicional para convertir los datos de marcadores volcados al formato de marcas pdf, que se acepta el comando ghostscript gs.
  3. use gsscript para fusionarlos con pdfmarks

Eche un vistazo a http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ el script pdf-merge.pyhace exactamente lo que usted (o yo) quiere.

pdf-merge.py --output=merged.pdf input1.pdf input2.pdf

Se podrían hacer algunas mejoras menores en su guión.

  1. manejo unicode
  2. generar archivos de marcadores, para que las personas también puedan ajustarlo

De todos modos, debería funcionar

larrycai
fuente
Un voto a favor! ¡Gracias! Estoy esperando tu guión!
Tim
Parece que el enlace no funciona. ¿Puedes arreglarlo, por favor?
Fish Monitor
4

pdftk es definitivamente la herramienta correcta (con la sintaxis correcta):

BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1
carlo
fuente
2

Caleb

Según tengo entendido, los marcadores según la especificación de PDF no se pueden inyectar a través de una herramienta de diagnóstico como pdftk. La actualización de los metadatos para referirse a capítulos y anclajes de aterrizaje de marcadores que no existen definitivamente no funcionará, incluso puede hacer que su PDF sea inconsistente o no se pueda abrir.

Terminé usando las bibliotecas java + iText para hacer lo que sugieres según este tutorial , pero estamos lidiando con cientos de archivos PDF a diario, por lo que era necesario automatizarlos. Si está haciendo una única vez, Adobe Acrobat debería poder hacerlo.

r00fus
fuente
2

Para resumir todas estas buenas respuestas:

Hay un proyecto de bmconverter en GitHub que puede convertir varios formatos de marcadores PDF. Puede convertir la salida de pdftk a formato jpdftweak, aunque si va a usar jpdftweak, no necesitará convertir la salida de pdftk a csv, ya que puede hacer todo el trabajo desde jpdftweak.

Desafortunadamente, pdfmarks no es compatible con el proyecto, pero afortunadamente alguien publicó un script en problemas de bmconverter que puede convertir la salida de pdftk a pdfmarks. Entonces, la opción de lote de ghostscript es una opción

zetah
fuente
2

pdftkel formato de marcador es un poco tedioso de escribir. En lugar de ello he creado mi propia secuencia de comandos con bash, sed, pdftky python3. Compruébelo en este repositorio: https://github.com/SiddharthPant/booky

Así que ahora puedo crear un archivo de texto ( bkmrks.txt) como este que toma solo 5 minutos para escribir incluso para un pdf de 1000 páginas.

{
  Title1, 1
  Title2, 2
  {
    Subtitle1, 3
    Subtitle2, 4
    {
      SubSubtitle1, 5
      ...
    }
  }
}

y luego uso mi script

./booky.sh pdf_file.pdf bkmrks.txt

esto crea automáticamente un pdf ( pdf_file_new.pdf) que tiene mis marcadores en él.

Pantalón Siddharth
fuente
1

Simplemente agregue BookmarkBeginantes de cada entrada de marcador, como en

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮
tofleplof
fuente
0

La redirección que usó en el paso 1 hará que update_info no funcione correctamente. En su lugar, debe especificar el archivo de salida para pdftk:

pdftk in.pdf dump_data output in.info

Vea esta respuesta de una pregunta similar: /programming//a/30308964/3158933

Los archivos que creé usando una redirección tienen un tamaño de archivo ligeramente mayor y hacen que pdftk emita un mensaje de "Advertencia: caso inesperado 1 en LoadDataFile (); continua" cuando ejecuta el comando update_info.

Bartimeo
fuente