Melhor ferramenta para inspecionar arquivos PDF? [fechadas]

91

Qual ferramenta você recomenda para inspecionar arquivos PDF?

Caso de uso: estou tentando gerar arquivos PDF programaticamente (usando o iText). Estou tendo problemas para obter determinados layouts, mas tenho arquivos PDF com texto dispostos da maneira que desejo (gerados a partir do Word). Eu gostaria de fazer a engenharia reversa de como eles fazem isso.

O PDF Inspector parece bom, mas estou procurando algo para o Windows.

bmm6o
fonte
O PDF Inspector é baseado em Java, portanto, multiplataforma.
david.perez
2
Não parece funcionar no Windows. O jarro não faz nada quando clicado. Quando chamado na linha de comando, recebono main manifest attribute, in PDF Document Inspector.jar
Tom,
@david.perez é baseado em java, mas embalado em apple, então é uma distribuição apenas da apple. Existe o jar "PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar", mas não é inicializável como java -jar "PDF Document Inspector.jar". Também existe muito com.apple.cocoa. * Inclui que são específicos da plataforma. :(
andrej
Estou usando agora com sucesso o iText Rups, multiplataforma e baseado em Java.
david.perez

Respostas:

18

Adobe Acrobat tem um modo muito legal, mas bem escondido, permitindo que você inspecione arquivos PDF. Escrevi um artigo no blog explicando isso em https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/

marcar stephens
fonte
Isso parece exigir um plugin; pelo menos não está disponível no Acrobat Reader 9.5.5 no Linux.
Adam Spires
3
@AdamSpiers, a caixa de diálogo do preflight é um recurso do Adobe Acrobat, não do Adobe Reader
IPSUS
... e o Acrobat ( anteriormente Acrobat Exchange ) não está disponível para Linux: - /
Adam Spires
7
Na verdade, a caixa de diálogo de comprovação requer o Adobe Acrobat Pro. Não está disponível no Adobe Acrobat Standard.
Futal
1
E é um pesadelo de interface do usuário realmente usar.
Jon
83

Além das ferramentas baseadas em GUI mencionadas nas outras respostas, existem algumas ferramentas de linha de comando que podem transformar o código-fonte do PDF original em uma representação diferente que permite inspecionar o (agora arquivo modificado) com um editor de texto. Todas as ferramentas abaixo funcionam em Linux, Mac OS X, outros sistemas Unix ou Windows.

qpdf (meu favorito)

Use qpdf para descompactar (a maioria) fluxos de ObjStmobjetos e também dissecar objetos em objetos indiretos individuais:

qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf

qpdfdescreve a si mesmo como uma ferramenta que faz "transformações estruturais e preservadoras de conteúdo em arquivos PDF" .

Em seguida, basta abrir e inspecionar o uncompressed-qpdf.pdfarquivo em seu editor de texto favorito. A maioria dos bytes compactados anteriormente (e, portanto, binários) agora serão texto simples.

mutool

Também existe a mutoolferramenta de linha de comando que vem com o visualizador de PDF MuPDF (que é um produto irmão do Ghostscript, feito pela mesma empresa, Artifex ). O comando a seguir também descompacta fluxos e os torna mais fáceis de inspecionar por meio de um editor de texto:

mutool clean -d orig.pdf uncompressed-mutool.pdf

podofouncompress

PoDoFo é uma biblioteca FreeSoftware / OpenSource para trabalhar com o formato PDF e inclui algumas ferramentas de linha de comando, incluindopodofouncompress. Use-o assim para descompactar fluxos de PDF:

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

PeePDF é uma ferramenta baseada em Python que ajuda você a explorar arquivos PDF. Seu propósito original era pesquisar e dissecar malware baseado em PDF, mas acho útil também investigar a estrutura de arquivos PDF completamente benignos.

Ele pode ser usado interativamente para "navegar" pelos objetos e fluxos contidos em um PDF.

Não vou dar um exemplo de uso aqui, mas apenas um link para sua documentação:

pdfid.py e pdf-parser.py

pdfid.pye pdf-parser.pysão duas ferramentas PDF de Didier Stevens escritas em Python.

Sua experiência também ajuda a explorar PDFs maliciosos - mas também acho útil analisar a estrutura e o conteúdo de arquivos PDF benignos.

Aqui está um exemplo de como eu extrairia o fluxo não compactado do objeto PDF no. 5 em um arquivo * .dump:

pdf-parser.py -o 5 -f -d obj5.dump my.pdf

Notas finais

  1. Observe que algumas partes binárias dentro de um PDF não são necessariamente incompressíveis (ou decodificáveis ​​em código ASCII legível por humanos), porque são incorporadas e usadas em seu formato nativo dentro de PDFs. Essas partes do PDF são imagens JPEG, fontes ou perfis de cores ICC.

  2. Se você comparar acima ferramentas e exemplos de linha de comando dadas, você vai descobrir que eles fazem não todos produzem saídas idênticas. O esforço de compará-los por suas diferenças pode ajudá-lo a entender melhor a natureza da sintaxe e do formato do arquivo PDF.

Kurt Pfeifle
fonte
42

Eu uso o iText RUPS ( Sintaxe de leitura e atualização de PDF) no Linux. Por ser escrito em Java, também funciona no Windows. Você pode navegar por todos os objetos em arquivo PDF em uma estrutura de árvore. Ele também pode decodificar fluxos codificados em Flate dinamicamente para facilitar a inspeção.

Aqui está uma captura de tela:

Captura de tela do iText RUPS

gkcn
fonte
9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version- Como você deve executar essa coisa? Edit: Descobri isso. Você não deve baixar o arquivo padrão oferecido pelo SourceForge, você precisa baixar o .jar que inclui dependências.
Zero3
2
@ Zero3 acabou de encontrar a mesma coisa. Obrigado por seu comentário.
Sam
1
@KurtPfeifle Concordo totalmente. Infelizmente, muitos softwares (como este!) Só estão disponíveis através do SourceForge porque o mantenedor ainda não moveu o projeto para outro lugar e talvez nunca o faça. Você realmente deve ter muito cuidado ao baixar qualquer coisa do SourceForge hoje em dia ...
Zero3
7
Sim - como um jar compilado e até mesmo como um exe, para usuários do Windows. Consulte github.com/itext/rups/releases/latest
Amedee Van Gasse
1
@AmedeeVanGasse a captura de tela nesta resposta mostra uma visão da página (entre a árvore do documento e a guia xref). Como posso exibir essa visualização na v5.5.9 no Windows?
iPDFdev
5

Usei o PDFBox com muito sucesso. Aqui está uma amostra da aparência do código (desde a versão 0.7.2), que provavelmente veio de um dos exemplos fornecidos:

// load the document
System.out.println("Reading document: " + filename);
PDDocument doc = null;                                                                                                                                                                                                          
doc = PDDocument.load(filename);

// look at all the document information
PDDocumentInformation info = doc.getDocumentInformation();
COSDictionary dict = info.getDictionary();
List l = dict.keyList();
for (Object o : l) {
    //System.out.println(o.toString() + " " + dict.getString(o));
    System.out.println(o.toString());
}

// look at the document catalog
PDDocumentCatalog cat = doc.getDocumentCatalog();
System.out.println("Catalog:" + cat);

List<PDPage> lp = cat.getAllPages();
System.out.println("# Pages: " + lp.size());
PDPage page = lp.get(4);
System.out.println("Page: " + page);
System.out.println("\tCropBox: " + page.getCropBox());
System.out.println("\tMediaBox: " + page.getMediaBox());
System.out.println("\tResources: " + page.getResources());
System.out.println("\tRotation: " + page.getRotation());
System.out.println("\tArtBox: " + page.getArtBox());
System.out.println("\tBleedBox: " + page.getBleedBox());
System.out.println("\tContents: " + page.getContents());
System.out.println("\tTrimBox: " + page.getTrimBox());
List<PDAnnotation> la = page.getAnnotations();
System.out.println("\t# Annotations: " + la.size());
Kaleb Pederson
fonte
3

O visualizador de objetos no Acrobat é bom, mas o PDF Canopener do Windjack Solution permite uma melhor inspeção com um conta-gotas para selecionar objetos na página. Também permite que modificações sejam feitas no PDF.

http://www.windjack.com/products/pdfcanopener.html

Dwight Kelly
fonte
3

Também existe outra opção. O Adobe Acrobat Pro também é capaz de exibir a estrutura de árvore interna do PDF.

  1. Abrir Preflight
  2. Vá para Opções (canto superior direito)
  3. Estrutura interna de PDF

No topo, o Adobe Acrobat Pro também pode exibir a estrutura interna das Fontes de Documento no PDF, a maioria dos outros "visualizadores de estrutura em árvore PDF" não tem esta opção

insira a descrição da imagem aqui

Vadimo
fonte
2
Isso é o que @ mark-stephens descreve na resposta aceita.
koppor
3
A resposta de @mark-stephens apenas direciona para um post de blog que pode desaparecer no futuro (e não é recomendado no SO). vadimo's realmente fornece a resposta.
Starfish
1

Se você deseja trabalhar programaticamente a partir do Python, o pdfminer é uma boa opção. Ele permite que você trabalhe com a estrutura PDF na memória como uma hierarquia de objetos ou serialize-a como XML.

WP McNeill
fonte
-6

Minha sugestão é o Foxit PDF Reader, que é muito útil para fazer importantes trabalhos de edição de texto em arquivos PDF.

nifCody
fonte
6
Não consegui encontrar nenhuma maneira no Foxit Reader de visualizar a estrutura interna de um PDF semelhante ao PDF Inspector (referenciado na pergunta)
bmaupin