https://foro.gambas-es.org/viewtopic.php?f=5&t=7947&p=47834#p47834
-----------------------------------
tincho
Martes, 07 Abril 2020, 23:27

Re: Reemplazar Un Texto Dentro De Un PDF
-----------------------------------
Ok, encontré una forma, no gambosa, de hacerlo. Para ello uso el programa de la Shell [b]sed[/b]
Pero el archivo debe estar "descomprimido" y para ello hay que usar otro programa Shell llamado  [b]qpdf[/b]
Dejo las dos funciones aquí
[u]Para reemplazar el texto[/u]
[code linenumbers=false syntax=gambas]
'' Esta función trabaja con el programa de terminal sed y lo que hace es reempl
'' azar, en un archivo el texto buscado por su reemplazo.
'' Luego devuelve la ruta del archivo alterado.
'' Nota: El archivo PDF debe estar sin comprimir.

[b][u]Paso 1 Desencriptar[/u][/b]
[code linenumbers=false syntax=gambas]
'' Funcion que utiliza el programa gostscript de la terminal shell.
'' Desencripta el PDF que del que se pasa su rura como parámetro y luego si tod
'' do fu e correcto, devuelve la ruta del nuevo archivo desencriptado.

Public Function PDFDecrypt(strPath As String) As String 

  Dim strName As String
  Dim strCommand As String
  Dim prsCommand As Process

  strName = File.Dir(strPath) &/ File.BaseName(strPath) & "-dcr.pdf"
  strCommand = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile='"
  strCommand &= strName & "' -c .setpdfwrite -f '" & strPath & "'"
  prsCommand = Shell strCommand
  While prsCommand.State = prsCommand.Running
    Wait 0.05
  Wend
  If Exist(strName) Then
    If Stat(strName).Type = gb.File Then
      Return strName
    Else
      Return "0"
    Endif
  Endif
End
[/code]

[b][u]Paso 2 - Descomprimir[/u][/b]
[code linenumbers=false syntax=gambas]
'' Esta función trabaja con el programa de terminal qpdf y luego de crear el ar
'' chivo pdf descompriomido devuelve la ruta de este.

Public Function PDFDecompress(inp As String) As String

  Dim out As String
  Dim com As String

  out = File.Dir(inp) &/ File.BaseName(inp) & "-unc.pdf"
  com = "qpdf --stream-data=uncompress '"
  com &= inp & "' '" & out & "'"

  Shell com Wait

  If Exist(out) Then

    If Stat(out).Type = gb.File Then
      Return out
    Else
      Return ""
    Endif
  Endif

End
[/code]

[b][u]Paso 3 - Reemplazar el texto[/u][/b]
[code linenumbers=false syntax=gambas]
Public Function PDFReplace(inp As String, s As String, r As String) As String

  Dim out As String
  Dim com As String

  out = File.Dir(inp) &/ File.BaseName(inp) & "-rep.pdf"

  com = "sed -e \"s/"
  com &= s & "/"
  com &= r & "/g\" <'"
  com &= inp & "' >'" & out & "'"
  Print com

  Shell com Wait

  If Exist(out) Then
    If Stat(out).Type = gb.File Then
      Return out
    Else
      Return ""
    Endif
  Endif

End
[/code]

Saludos.


