Como posso nivelar totalmente um PDF no Mac OS na linha de comando?

16

Eu uso o Mac OS X Snow Leopard. Eu tenho um PDF com campos de formulário, anotações e carimbos. Gostaria de congelar (ou "nivelar") esse PDF para que os campos do formulário não possam ser alterados e as anotações / carimbos não sejam mais editáveis. Como na verdade tenho muitos desses PDFs, desejo fazer isso automaticamente na linha de comando.

Algumas coisas que eu tentei / considerei, com seu grau de sucesso:

  • Abra em Visualizar e Imprimir em arquivo. Isso cria um PDF totalmente plano sem alterar o tamanho do arquivo. A única maneira de automatizar parece ser escrever um AppleScript baseado na interface do usuário , que eu tenho tentado evitar.
  • Abra no Acrobat Pro e use uma função JavaScript para nivelar . Novamente, não sei como automatizar isso na linha de comando.
  • Use pdftkcom a flattenopção Mas isso apenas nivela campos de formulários, não carimbos e outras anotações.
  • Use o cupsfilterque pode criar PDF a partir de vários formatos de arquivo. Assim, pdftkachatavam apenas os campos do formulário.
  • Use cups-pdfpara conectar ao servidor de impressão do Mac e salvar um arquivo PDF em vez de imprimir. Eu usei a versão macports . O arquivo resultante é simples, mas enorme. Eu tentei isso em um arquivo de 8 MB; o PDF achatado tinha 358 MB! Talvez isso possa ser combinado com uma chamada ghostscript, como na Dica do Ubuntu: Como reduzir o tamanho do arquivo PDF na linha de comando .

Quaisquer outras sugestões serão apreciadas.

Matthew Leingang
fonte
11
O Automator.app possui algumas opções internas de processamento de pdf. Talvez um deles possa ajudar diretamente ou combinado com uma das ações acima.
Kassym Dorsel
Você pode fornecer um documento de amostra em PDF que contenha esses elementos?
Daniel Beck
Acho que sim. No momento, todas as minhas amostras são testes de estudantes, por isso tenho que zombar de alguma coisa.
Matthew Leingang

Respostas:

11

Tente usar pdf2pse ps2pdfem sucessão. É um pouco complicado, mas me ajudou a reduzir meu documento de 30 MB para 17 MB. Não tanto quanto eu gostaria, mas ainda melhor. Eu recebi essa ideia de um amigo que usou esse método para se livrar das permissões de senha em um pdf.

pdf2ps your_pdf_file.pdf your_pdf_file.ps
ps2pdf your_pdf_file.ps your_pdf_file_from_ps.pdf

Espero que ajude!

Olga Botvinnik
fonte
3
GhostScript FTW! Eu tenho-o para um one-liner usando um tubo: pdf2ps file.pdf - | ps2pdf - file_flat.pdf. O arquivo passou de 300K para 500K, o que representa um grande aumento percentual, mas nada como o aumento de 4400% que o cups-pdfmétodo produziu.
Matthew Leingang
Na verdade, tive melhor sorte com pdf2ps -q -sOutputFile=- file.pdf | ps2pdf - file_flat.pdf .
Matthew Leingang
4
Observando que no Mac você pode instalar o Ghostscript para disponibilizar os comandos acima via homebrew combrew install ghostscript .
Nick
5

Então é isso que tenho usado ultimamente. Eu acho que funcionalmente faz a mesma coisa que pdf2ps file.pdf - | ps2pdf - file_flat.pdf, mas parecia funcionar melhor para mim.

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<newfile> <oldfile>
Matthew Leingang
fonte
As soluções ps2pdf falharam para mim. Isso funcionou, aparentemente reindexando as fontes no PDF.
ℝaphink
Nenhum desses comandos é achatado. Você pode copiar as camadas subjacentes usando a Visualização e o conteúdo original estará presente.
Alain O'Dea
1

Pode ser subopcional, mas você considerou encadear cups-pdf com pdftk ou cupsfilter? Como você mencionou, o cups-pdf produzirá um arquivo pdf plano e o passará pelo pdftk ou cupsfilter para reduzi-lo a um tamanho aceitável?

Como alternativa, dê uma olhada em /System/Library/Printers/Libraries/convert Você deve ser capaz de fazer algo como

/System/Library/Printers/Libraries/convert -f input_file.pdf -o output_file.pdf -j "application/pdf"
Mxx
fonte
Meu mac não tem /System/Library/Printers/Libraries/convert. Eu tentei cupsfilter. Ao converter de PDF para PDF, nenhuma alteração foi feita no arquivo. Ao converter de PDF para PS e, em seguida, para PDF, as anotações foram perdidas.
Matthew Leingang
1

AVISO: gs e pdf2ps | ps2pdf NÃO achatam PDFs!

O uso de gs ou pdf2ps seguido de ps2pdf produzirá um PDF de várias camadas com o conteúdo das anotações presentes na forma original . Você pode verificar essa falha na visualização usando Selecionar tudo, Copiar e Colar em uma janela do Editor de texto (no modo rich text). Você verá o texto ou gráficos em anotações de redação, por exemplo. Isto é claramente muito ruim se você precisar legalmente que o conteúdo saia da saída.

Uma solução de trabalho

O ImageMagick pode produzir um PDF nivelado, de várias páginas e de qualidade configurável, com rasters de cada página, usando o seguinte comando:

convert -density 150 document_original.pdf document_flat.pdf

Esse comando rasteriza document_original.pdf, criando uma imagem baseada em pixel de cada página, a 150 DPI, e produz o resultado como document_flat.pdf.

Uma nota sobre a qualidade da imagem

Devido à rasterização , produz um PDF não escalonável (zoom e você verá o texto ou as imagens vetoriais originais ficarem pixelizadas). Provavelmente, ele terá um tamanho de arquivo maior, a menos que o original tenha conteúdo vetorial muito complexo, como gráficos de dispersão de milhões de pontos.

Alterando a densidade , você pode trocar um tamanho de arquivo maior por uma saída com maior resolução.

Todo o texto será convertido em pixels brutos em cada imagem da página. Os diagramas de texto e vetor são os que mais sofrem, então experimente o DPI até obter os arquivos de saída utilizáveis.

Alain O'Dea
fonte
11
Obrigado por contribuir com esta resposta. Há cinco anos, a solução que escrevi estava funcionando para mim. Mas tentarei sua resposta na próxima vez que tiver que fazer isso (na verdade, muito em breve).
Matthew Leingang
Isso faz sentido. Imagino que o comportamento do Ghostscript tenha mudado em relação às anotações achatadas. Tentei adicionar -PreserveAnnots = false e ainda não funcionou. Converta sob o capô usando Ghostscript para processamento de PDF. Gostaria de algo que faça o que o Acrobat faz: mantém as anotações, remove o conteúdo por trás delas e preserva imagens vetoriais descobertas. A parte da Document Cloud com o novo Acrobat realmente me deixa nervosa ao usá-la para dados confidenciais.
Alain O'Dea
0

O Applescript é provavelmente o melhor / mais rápido caminho para a linha de comando. Uma vez que funcione, você pode salvá-lo como um aplicativo e criar um alias no shell de comando para executá-lo. Depois disso, basta digitar seu alias na linha de comando.

JRobert
fonte
Mas qual é a maneira mais fácil de nivelar um PDF no AppleScript? Prefiro não criar um script na interface do usuário para imitar a impressão em arquivo. Isso parece desajeitado e lento.
Matthew Leingang