Me preguntaba cómo ver y editar el código de un archivo PDF.
Al ver, no quiero ver el formato binario, así que creo que
hexdump
puede no ser lo que quiero. Lo intentégedit
, pero no se puede utilizar ningún método de codificación para decodificar el contenido PDF.Al editar, me gustaría buscarlos
/Fit
y cambiarlos/XYZ
por, por ejemplo, sed. Pero mi comandosed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf
parece no cambiar la apariencia de mi PDF como esperaba, aunque no informa ningún error. Me preguntaba sised
realmente puede trabajar en archivos PDF como si fueran texto sin formato.
El contexto de mis preguntas se puede encontrar en esta pregunta . Mi sistema operativo es Ubuntu 10.10.
!
,\b
yg
significa? ¿Se puede hacer sin perl solo con sed?g
significa reemplazar todas las ocurrencias en cada línea, tanto en sed como en perl.!
es el separador puede elegir (casi) cualquier carácter como separador para els
comando (esto va tanto en sed como en perl).\b
significa un límite de palabra; existe en perl pero no en sed.Con respecto a su primera pregunta ("ver el código fuente, pero no binario"): hay algunas opciones que tiene para descomprimir las secuencias binarias internas que se adjuntan a muchos objetos.
Mi herramienta favorita para esto es QPDF , disponible en todas las plataformas principales del sistema operativo. El siguiente comando descomprime todas las secuencias y todas las secuencias de objetos:
Ahora puede abrir su PDF en cualquier editor de texto. (Todavía puede haber algunos blobs binarios allí: por ejemplo, archivos de fuentes y perfiles ICC, lo que no tendría sentido para QPDF para expandirse).
Para volver a comprimir el
expanded.pdf
archivo después de editarlo, puede ejecutar:(¡Tenga cuidado al editar archivos PDF manualmente! Debe saber mucho acerca de su sintaxis interna para hacerlo correctamente. Tan pronto como agregue o elimine un solo byte, puede recibir mensajes de error de los lectores de PDF que quizás ya no puedan ábralo, porque el ToC interno de los archivos PDF está dañado, lo que se basa en cálculos de desplazamiento de bytes. Sin embargo, el reemplazo
Fit
porXYZ
cadenas debería funcionar bien ...)fuente
fix-qdf
programa que forma parte de qpdf. Sin embargo, aún debes tener un poco de cuidado. Ver qpdf.sourceforge.net/files/qpdf-manual.html#ref.qdffix-qdf
. Por lo tanto, si desea reemplazar una cadena por una cadena de diferente longitud, es posible, pero debe usar lafix-qdf
herramienta. Yo diría que esta es una adición útil a la respuesta.sed
está orientado a líneas, lo que hace que no sea adecuado para archivos binarios, que están estructurados como bloques y no como líneas.Intente usar bbe (bbe-.sourceforge.net) en su lugar.
Alternativamente, tanto Emacs (GNU y XEmacs) como vim abren archivos PDF sin problemas. No está muy bien impreso, por supuesto, ya que es texto mixto y binario, pero es suficiente para sus propósitos de edición.
Hay un complemento Pdftk para vim que hace que todo sea más fácil, descargue aquí (archivo zip).
Como probablemente sepa, los dos editores anteriores tienen potentes capacidades de búsqueda y reemplazo.
Además, convertir el PDF al modo QDF antes hace que la edición de archivos PDF sea realmente fácil.
fuente
sed
el-b
interruptor. si funciona, agregaré esto a mi respuesta.-b
, es específico de Cygwin.Use LibreOffice u OpenOffice para abrir el PDF, verlo, reemplazar cosas, escribir un nuevo PDF, etc. Creo que incluso puede usarlo desde la línea de comandos o mediante programación si hay muchos documentos para procesar.
Tenga en cuenta que los archivos PDF de algunas fuentes, por ejemplo, escáneres, a menudo contienen las páginas como imágenes en lugar de texto, por lo que no tendrá suerte con ellas al usar la búsqueda y el reemplazo.
fuente