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

Da Gambas-it.org - Wikipedia.

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