Pergunta

Eu gostaria de escrever um código (Java) que leva um documento PDF, e cria chamado destinos de todos os marcadores. Eu acho que a API iText é a maneira mais fácil de fazer isso, mas eu nunca usei a API antes.

Como você iria sobre como escrever esse tipo de código com a API iText? iText pode fazer a análise necessária para manipular PDFs existentes por si só? O tipo de manipulações Estou pensando em são:

  • Abrir
  • Encontre favoritos,
  • Criar destinos,
  • Save,
  • Fechar.

Ou há uma API diferente que seria melhor?

Foi útil?

Solução

eu vou avisá-lo de antemão de que você pode estar decepcionado com este. iText não é realmente destinado a ser utilizado como um analisador. É realmente mais para criar inteiramente novo documentos PDF, mas você pode dar uma pancada nele.

Para começar, usando o iText, você não será capaz de modificar o documento PDF existente. O que você pode fazer, porém, é fazer uma cópia com os recursos adicionais que você deseja. (Se alguém sabe melhor, por favor deixe-me saber, este me deixa louco.)

O que você vai querer fazer é criar um objeto PdfReader a partir de um fluxo de entrada no seu arquivo de origem. Em seguida, crie um objeto PdfCopy (que é apenas uma PdfWriter estendida que faz com que a obtenção de dados a partir de uma fonte existente mais conveniente) para o seu destino.

Tanto quanto eu posso dizer, os marcadores não pode ser obtido a partir iText em tudo. Outra biblioteca pode ser necessário. Acho JPedal pode ter a capacidade de extrair deles (ele pode obtê-los como XML documento, que você pode, então, tem que analisar para obter o que deseja.) no entanto, você obtê-los, então você pode adicioná-los a uma java.util.List e conjunto que lista como esboço na PDFCopy. Os próprios marcadores são apenas HashMaps com um determinado conjunto de chaves. Eu não tenho certeza do que todos os valores são, mas eles incluem "Título", "Action" (que parece ser onde você especificar que este é um destino nomeado, embora eu não sei o que esse valor seria ), e "URI" (que é usado se este é um link externo - Eu suspeito que isso especificar o nome do destino nomeado que você está ligando). Mais uma vez, os detalhes são difíceis de encontrar.

Em seguida, iterar sobre as páginas do leitor, importar cada página para o PdfCopy. desta página pode ajudá-lo.

Desculpe, eu não sou mais útil para você. Boa sorte.

P.S. Se ninguém sabe de uma ferramenta melhor que é ou (L) GPL ou BSD licenciado, eu adoraria ouvir sobre isso.

Outras dicas

Dar seguimento: Eu enviei um patch para iText alguns meses atrás (que foi agora aceite e faz parte do HEAD) que adiciona capacidades de análise de texto para iText. PdfBox (mencionado abaixo) tem (ainda?) Problemas com a leitura de PDFs mais recentes que usam xref córregos em vez do formato de tabela xref mais velho.


Outra biblioteca que é muito bom em analisar arquivos PDF existentes é PdfBox ele também pode ser usado para modificar um PDF existente. FYI -. Este é o analisador de texto que usa Lucene

Além disso, vou mencionar que iText faz ter a capacidade de analisar um arquivo PDF, não é apenas grande em analisar o conteúdo do texto em cada página. Se você está olhando para aceder ao PDF construções de nível superior (dicionários, etc ...) que são usados ??para armazenar bookmarks, etc ... e você não se importa de ficar em suas mãos um pouco sujo com a leitura da especificação PDF, você pode absolutamente fazer o que você está perguntando sobre (fazemos um pouco de nós mesmos).

O PDF Spec é grande, mas legível para a maior parte, e você não precisa se preocupar com a maior parte dele (que é voltada para conteúdo da página e renderização) se tudo que você está tentando fazer é extrair bookmarks.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top