Domanda

Vorrei scrivere del codice (java) che accetta un documento PDF e crea destinazioni nominate da tutti i segnalibri. Penso che l'API iText sia il modo più semplice per farlo, ma non ho mai usato l'API prima.

Come faresti a scrivere questo tipo di codice con l'API iText? IText può eseguire l'analisi necessaria per manipolare i PDF esistenti da solo? Il tipo di manipolazioni a cui sto pensando sono:

  • Apri,
  • Trova segnalibri,
  • Crea destinazioni
  • Salva
  • Chiudi.

O esiste un'API diversa che sarebbe meglio?

È stato utile?

Soluzione

Ti avvertirò in anticipo che potresti essere deluso da questo. iText non è davvero pensato per essere usato come parser. È davvero molto di più per la creazione di documenti PDF completamente nuovi , ma puoi fare colpo.

Per iniziare, usando iText, non sarai in grado di modificare il documento PDF esistente. Quello che puoi , però, è fare una copia con le funzionalità aggiuntive che desideri. (Se qualcun altro lo sa meglio, per favore fammi sapere, questo mi fa impazzire.)

Quello che vorrai fare è creare un oggetto PdfReader da un flusso di input sul tuo file sorgente. Quindi crea un oggetto PdfCopy (che è solo un PdfWriter esteso che rende più conveniente ottenere dati da una fonte esistente) per la tua destinazione.

Per quanto ne so, i segnalibri non possono assolutamente essere ottenuti da iText. Potrebbe essere necessaria un'altra libreria. Penso che jpedal potrebbe avere la possibilità di estrarli (può ottenerli come XML documento, che potrebbe quindi essere necessario analizzare per ottenere ciò che si desidera.) Tuttavia, in ogni caso, è possibile aggiungerli a java.util.List e impostare tale elenco come struttura in PDFCopy. I segnalibri stessi sono solo HashMap con un particolare set di chiavi. Non sono sicuro di quali siano tutti i valori, ma includono " Titolo " ;, " Azione " (che sembra essere dove dovresti specificare che si tratta di una destinazione con nome, anche se non so quale sarebbe quel valore), e "URI" (che viene utilizzato se si tratta di un collegamento esterno - sospetto che ciò specifichi il nome della destinazione denominata a cui si sta collegando). Ancora una volta, le specifiche sono difficili da trovare.

Quindi scorrere le pagine del lettore, importando ciascuna pagina in PdfCopy. questa pagina può aiutarti.

Mi dispiace, non sono più utile per te. Buona fortuna.

P.S. Se qualcun altro è a conoscenza di uno strumento migliore con licenza (L) GPL o BSD, mi piacerebbe saperlo.

Altri suggerimenti

Seguito: alcuni mesi fa ho inviato una patch a iText (ora è stata accettata e fa parte di HEAD) che aggiunge funzionalità di analisi del testo a iText. PdfBox (menzionato di seguito) ha (avuto?) Problemi con la lettura di PDF più recenti che utilizzano flussi xrif anziché il vecchio formato di tabella xrif.


Un'altra libreria che è molto brava nell'analisi dei file PDF esistenti è PdfBox Può anche essere usato per modificare un PDF esistente. Cordiali saluti - questo è il parser di testo che Lucene usa.

Citerò anche che iText ha la capacità di analizzare un file PDF, semplicemente non è ottimo per analizzare il contenuto del testo su ogni pagina. Se stai cercando di accedere ai costrutti di livello superiore PDF (dizionari, ecc ...) che vengono utilizzati per archiviare i segnalibri, ecc ... e non ti dispiace sporcarti le mani leggendo le specifiche PDF, puoi fai assolutamente quello che stai chiedendo (lo facciamo un po 'noi stessi).

Le Specifiche PDF sono grandi, ma leggibili per lo più, e non devi preoccuparti della maggior parte di esso (che è orientato al contenuto e al rendering della pagina effettiva) se tutto ciò che stai cercando di fare è estrarre i segnalibri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top