
Quiero automatizar el proceso de buscar y reemplazar hrefs (no el texto de anclaje) en cientos de archivos PDF en un sistema operativo Windows 8.1.
Estoy feliz de convertir formatos de archivos siempre que puedan volver a compilarse como un PDF funcional.
ACTUALIZACIÓN: he podido encontrar y reemplazarsolo el hrefusando PDFTK..
- pdftk foo.pdf salida foo.tmp descomprimir
- buscar y editar un enlace usando un editor de texto
- pdftk foo.tmp salida foo-updated.pdf comprimir
Ahora necesito una herramienta cmdline que pueda automatizar el paso 2 reemplazando los valores de foo.tmp de una lista de búsqueda y reemplazo.
Respuesta1
Asumiré que estamos hablando del sistema operativo Windows y conLoteetiqueta, se referirá al procesamiento por lotes en lugar deLotelang, de todos modos te lo avisaréLotees un lenguaje limitado que solo cubre tareas básicas comunes basadas en el sistema, no está diseñado para leer un archivo de texto que no sea sin formato, como un PDF, no puede hacerlo.
Para leer un formato específico como un PDF, se necesita un analizador/intérprete externo.
hay una buenaC#solución basada en que demuestra cómo leer los datos contenidos en unPDFde forma legible por humanos:
UsaiTextSharpbiblioteca, que es de código abierto:
http://sourceforge.net/projects/itextsharp/
Alternativamente, aquí hay unEBVsolución basada en la guía del usuario de Adobe, necesita laCOMObjetos instalados desde la aplicación Adobe.
Anota los capítulos en los que estás interesado para esta tarea:
Para ayudarle un poco en VBS, aquí hay una pregunta sobre el script de VBS que podría ayudarle:
Option Explicit
Dim accapp, acavdocu
Dim pdf_path, bReset, Wrd_count
pdf_path="C:\LS\Test\Invoices\02_2011_PDF\rpt_Invoice_1.pdf"
'AcroExch is acrobat application object
Set accapp=CreateObject("AcroExch.App")
accapp.Show()
'Need to create one AVDoc object par displayed document
Set acavdocu=CreateObject("AcroExch.AVDoc")
'Opening the PDF
If acavdocu.Open(pdf_path,"") Then
acavdocu.BringToFront()
bReset=1 : Wrd_count = 0
'Find Text Finds the specified text, scrolls so that it is visible, and highlights it
Do While acavdocu.FindText("Invoice#", 1, 1, bReset)
bReset=0 : Wrd_count=Wrd_count+1
'Wait 0, 200
Loop
End If
accapp.CloseAllDocs()
accapp.Exit()
msgbox "The word 'Invoice#' was found " & Wrd_count & "times"
Set accap=nothing : Set accapp=nothing
Pero te avisaré que aparentemente no funciona como se esperaba, lo tomé de este sitio:
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_26834618.html