Differenze tra le versioni di "Estrarre il testo da un file PDF con le risorse del API di libpoppler-glib"

Da Gambas-it.org - Wikipedia.
 
(3 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Se un file PDF possiede del testo, espresso graficamente con Font (e non in quanto immagine di caratteri), è possibile estrarlo con le risorse del API di ''libpoppler-glib''.
 
Se un file PDF possiede del testo, espresso graficamente con Font (e non in quanto immagine di caratteri), è possibile estrarlo con le risorse del API di ''libpoppler-glib''.
  
E' necessario avere installata nel sistema e richiamare nel programma Gambas la libreria dinamica condivisa: "''libpoppler-glib.so''"
+
E' necessario avere installata nel sistema e richiamare nel programma Gambas la libreria condivisa: "''libpoppler-glib.so.8.23.0'' "
 
 
  
 
Mostriamo un esempio pratico:
 
Mostriamo un esempio pratico:
  Library "libpoppler-glib"
+
Private URI as String = "file://"
 +
 +
 +
  Library "libpoppler-glib:8.23.0"
 
   
 
   
 
  Private poppler_error As String[] = [Null, "INVALID", "ENCRYPTED", "OPEN_FILE", "BAD_CATALOG", "DAMAGED"]
 
  Private poppler_error As String[] = [Null, "INVALID", "ENCRYPTED", "OPEN_FILE", "BAD_CATALOG", "DAMAGED"]
Riga 26: Riga 28:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim uri, percorso As String
 
   Dim uri, percorso As String
 
   Dim doc, pag, p As Pointer
 
   Dim doc, pag, p As Pointer
 
    
 
    
  uri = "file://"
 
 
   percorso = "<FONT Color=gray>''/percorso/del/file.pdf''</font>"
 
   percorso = "<FONT Color=gray>''/percorso/del/file.pdf''</font>"
 
    
 
    
 
  <FONT Color=gray>' ''Carica il file PDF:''</font>
 
  <FONT Color=gray>' ''Carica il file PDF:''</font>
   doc = poppler_document_new_from_file(uri & percorso, Null, VarPtr(p))
+
   doc = poppler_document_new_from_file(URI & percorso, Null, VarPtr(p))
   If doc = 0 Then Error.Raise("Errore: " & poppler_error[CInt(String@(p))])
+
   If doc == 0 Then Error.Raise("Errore: " & poppler_error[CInt(String@(p))])
 
    
 
    
 
  <FONT Color=gray>' ''Prende in considerazione la prima pagina (indice 0) del file pdf:''</font>
 
  <FONT Color=gray>' ''Prende in considerazione la prima pagina (indice 0) del file pdf:''</font>
 
   pag = poppler_document_get_page(doc, 0)
 
   pag = poppler_document_get_page(doc, 0)
   If pag = 0 Then Error.Raise("Errore !")
+
   If pag == 0 Then Error.Raise("Errore !")
 
    
 
    
 
  <FONT Color=gray>' ''Estrae il testo dalla pagina presa in considerazione del file pdf:''</font>
 
  <FONT Color=gray>' ''Estrae il testo dalla pagina presa in considerazione del file pdf:''</font>
 
   p = poppler_page_get_text(pag)
 
   p = poppler_page_get_text(pag)
   If p = 0 Then Error.Raise("Errore !")
+
   If p == 0 Then Error.Raise("Errore !")
 
    
 
    
 
  <FONT Color=gray>' ''Mostra il testo estratto dalla pagina presa in considerazione del file pdf:''</font>
 
  <FONT Color=gray>' ''Mostra il testo estratto dalla pagina presa in considerazione del file pdf:''</font>
Riga 53: Riga 54:
 
   g_object_unref(doc)
 
   g_object_unref(doc)
 
    
 
    
  '''End'''
+
  End
 
 
  
  
  
 
=Riferimenti=
 
=Riferimenti=
* https://developer.gnome.org/poppler/unstable/PopplerDocument.html
+
* https://poppler.freedesktop.org/
* https://developer.gnome.org/poppler/unstable/PopplerPage.html
 

Versione attuale delle 17:00, 2 ott 2023

Se un file PDF possiede del testo, espresso graficamente con Font (e non in quanto immagine di caratteri), è possibile estrarlo con le risorse del API di libpoppler-glib.

E' necessario avere installata nel sistema e richiamare nel programma Gambas la libreria condivisa: "libpoppler-glib.so.8.23.0 "

Mostriamo un esempio pratico:

Private URI as String = "file://"


Library "libpoppler-glib:8.23.0"

Private poppler_error As String[] = [Null, "INVALID", "ENCRYPTED", "OPEN_FILE", "BAD_CATALOG", "DAMAGED"]

' popplerDocument *poppler_document_new_from_file (const char *uri, const char *password, GError **error)
' Creates a new PopplerDocument.
Private Extern poppler_document_new_from_file(uri As String, password As String, GError As Pointer) As Pointer

' PopplerPage * poppler_document_get_page (PopplerDocument *document, int index)
' Returns the PopplerPage indexed at index.
Private Extern poppler_document_get_page(document As Pointer, index As Integer) As Pointer

' char * poppler_page_get_text (PopplerPage *page)
' Retrieves the text of page.
Private Extern poppler_page_get_text(page As Pointer) As Pointer

' void g_object_unref (gpointer object)
' Decreases the reference count of object.
Private Extern g_object_unref(gobject As Pointer)


Public Sub Main()
 
 Dim uri, percorso As String
 Dim doc, pag, p As Pointer
 
 percorso = "/percorso/del/file.pdf"
 
' Carica il file PDF:
 doc = poppler_document_new_from_file(URI & percorso, Null, VarPtr(p))
 If doc == 0 Then Error.Raise("Errore: " & poppler_error[CInt(String@(p))])
 
' Prende in considerazione la prima pagina (indice 0) del file pdf:
 pag = poppler_document_get_page(doc, 0)
 If pag == 0 Then Error.Raise("Errore !")
 
' Estrae il testo dalla pagina presa in considerazione del file pdf:
 p = poppler_page_get_text(pag)
 If p == 0 Then Error.Raise("Errore !")
 
' Mostra il testo estratto dalla pagina presa in considerazione del file pdf:
 Print String@(p)
 
' Al termine libera la memoria precedentemente occupata:
 g_object_unref(pag)
 g_object_unref(doc)
  
End


Riferimenti