Questão Como posso extrair um intervalo de páginas / uma parte de um PDF?


Você tem alguma idéia de como extrair uma parte de um documento PDF e salvá-lo como PDF? No OS X, é absolutamente trivial usando o Preview. Eu tentei editor de PDF e outros programas, mas sem sucesso.

Eu gostaria de um programa onde eu seleciono a parte que eu quero e, em seguida, salvá-lo como pdf com um simples comando como CMD+N no OS X. Eu quero que a peça extraída seja salva em formato PDF e não em JPEG, etc.


308
2017-11-26 02:06


origem


Você tentou o ImageMagick? - Martin Schröder
Isso é para bitmap eu preciso de algo que salva como PDF! - user72469
pdfshuffler nos repos. - Marc
pdfshuffler não funciona mais no Ubuntu 14.04+. Você sempre pode usar o diálogo de impressão ou uma alternativa baseada em terminal como pdfseparate - Rho
@Rho A versão instalada diretamente via apt-get ainda funciona bem para mim em 16.04. Talvez eles consertassem os insetos, se houvesse algum? - xji


Respostas:


pdftk é uma ferramenta multi-plataforma útil para o trabalho (página inicial do pdftk).

pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf

você passa o nome do arquivo do pdf principal e diz para ele incluir apenas algumas páginas (12-15 neste exemplo) e imprimi-lo em um novo arquivo.


353
2018-04-17 15:21



+1, mas conforme Andrzej's answer isso pode ser simplificado para pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf. Não há necessidade da variável. - Sparhawk
Se eu quiser extrair as páginas 1-10, 15 e 17, como escrevo o comando? - Patrick Li
@PatrickLi pdftk A=in.pdf cat A1-10 A15 A17 output out.pdf - m8mble
Observe que pdftk não está disponível no Ubuntu 18.04. (Vejo askubuntu.com/questions/1028522/…) - alkamid


muito simples, use o leitor de PDF padrão:

imprimir como arquivo. é isso! print menu

então

setting new PDF


195
2017-11-14 10:25



flippin brilhante - andybleaden
Produz resultados catastróficos com arquivos beamer, mapas e outros documentos que não estejam em conformidade com o formato da página da impressora. - Luís de Sousa
Isso pode resultar em um arquivo com um tamanho muito maior do que o documento original. - dat
por isso, não "extrai" o intervalo de páginas. Ele cria um novo pdf do antigo, como se você usasse um par de impressoras / scanners de alta definição. - sylvainulg
Bom para casos simples, mas resultados indesejados em documentos com destaque de comentários: o destaque se torna 100% de opacidade e bloqueia o texto. - loved.by.Jesus


Intervalo de páginas - script do Nautilus


Visão geral

Eu criei um script um pouco mais avançado baseado no tutorial @ThiagoPonte vinculado a. Suas principais características são

  • que é baseado em GUI,
  • compatível com espaços em nomes de arquivos,
  • e baseado em três backends diferentes que são capazes de preservar todos os atributos do arquivo original

Screenshot

enter image description here

Código

#!/bin/bash
#
# TITLE:        PDFextract
#
# AUTHOR:       (c) 2013-2015 Glutanimate (https://github.com/Glutanimate)
#
# VERSION:      0.2
#
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# 
# OVERVIEW:     PDFextract is a simple PDF extraction script based on Ghostscript/qpdf/cpdf.
#               It provides a simple way to extract a page range from a PDF document and is meant
#               to be used as a file manager script/addon (e.g. Nautilus script).
#
# FEATURES:     - simple GUI based on YAD, an advanced Zenity fork.
#               - preserves _all_ attributes of your original PDF file and does not compress 
#                 embedded images further than they are.      
#               - can choose from three different backends: ghostscript, qpdf, cpdf
#
# DEPENDENCIES: ghostscript/qpdf/cpdf poppler-utils yad libnotify-bin
#                         
#               You need to install at least one of the three backends supported by this script.
#
#               - ghostscript, qpdf, poppler-utils, and libnotify-bin are available via 
#                 the standard Ubuntu repositories
#               - cpdf is a commercial CLI PDF toolkit that is free for personal use.
#                 It can be downloaded here: https://github.com/coherentgraphics/cpdf-binaries
#               - yad can be installed from the webupd8 PPA with the following command:
#                 sudo add-apt-repository ppa:webupd8team/y-ppa-manager && apt-get update && apt-get install yad
#
# NOTES:        Here is a quick comparison of the advantages and disadvantages of each backend:
#
#                               speed     metadata preservation     content preservation        license
#               ghostscript:     --               ++                         ++               open-source
#               cpdf:             -               ++                         ++               proprietary
#               qpdf:            ++                +                         ++               open-source
#
#               Results might vary depending on the document and the version of the tool in question.
#
# INSTALLATION: https://askubuntu.com/a/236415
#
# This script was inspired by Kurt Pfeifle's PDF extraction script 
# (http://www.linuxjournal.com/content/tech-tip-extract-pages-pdf)
#
# Originally posted on askubuntu
# (https://askubuntu.com/a/282453)

# Variables

DOCUMENT="$1"
BACKENDSELECTION="^qpdf!ghostscript!cpdf"

# Functions

check_input(){
  if [[ -z "$1" ]]; then
    notify "Error: No input file selected."
    exit 1
  elif [[ ! "$(file -ib "$1")" == *application/pdf* ]]; then
    notify "Error: Not a valid PDF file."
    exit 1
  fi
}

check_deps () {
  for i in "$@"; do
    type "$i" > /dev/null 2>&1 
    if [[ "$?" != "0" ]]; then
      MissingDeps+="$i"
    fi
  done
}

ghostscriptextract(){
  gs -dFirstPage="$STARTPAGE "-dLastPage="$STOPPAGE" -sOutputFile="$OUTFILE" -dSAFER -dNOPAUSE -dBATCH -dPDFSETTING=/default -sDEVICE=pdfwrite -dCompressFonts=true -c \
  ".setpdfwrite << /EncodeColorImages true /DownsampleMonoImages false /SubsetFonts true /ASCII85EncodePages false /DefaultRenderingIntent /Default /ColorConversionStrategy \
  /LeaveColorUnchanged /MonoImageDownsampleThreshold 1.5 /ColorACSImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.4 /Blend 1 >> /GrayACSImageDict \
  << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.4 /Blend 1 >> /PreserveOverprintSettings false /MonoImageResolution 300 /MonoImageFilter /FlateEncode \
  /GrayImageResolution 300 /LockDistillerParams false /EncodeGrayImages true /MaxSubsetPCT 100 /GrayImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor \
  0.4 /Blend 1 >> /ColorImageFilter /FlateEncode /EmbedAllFonts true /UCRandBGInfo /Remove /AutoRotatePages /PageByPage /ColorImageResolution 300 /ColorImageDict << \
  /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.4 /Blend 1 >> /CompatibilityLevel 1.7 /EncodeMonoImages true /GrayImageDownsampleThreshold 1.5 \
  /AutoFilterGrayImages false /GrayImageFilter /FlateEncode /DownsampleGrayImages false /AutoFilterColorImages false /DownsampleColorImages false /CompressPages true \
  /ColorImageDownsampleThreshold 1.5 /PreserveHalftoneInfo false >> setdistillerparams" -f "$DOCUMENT"
}

cpdfextract(){
  cpdf "$DOCUMENT" "$STARTPAGE-$STOPPAGE" -o "$OUTFILE"
}

qpdfextract(){
  qpdf --linearize "$DOCUMENT" --pages "$DOCUMENT" "$STARTPAGE-$STOPPAGE" -- "$OUTFILE"
  echo "$OUTFILE"
  return 0 # even benign qpdf warnings produce error codes, so we suppress them
}

notify(){
  echo "$1"
  notify-send -i application-pdf "PDFextract" "$1"
}

dialog_warning(){
  echo "$1"
  yad --center --image dialog-warning \
  --title "PDFExtract Warning" \
  --text "$1" \
  --button="Try again:0" \
  --button="Exit:1"

  [[ "$?" != "0" ]] && exit 0
}

dialog_settings(){
  PAGECOUNT=$(pdfinfo "$DOCUMENT" | grep Pages | sed 's/[^0-9]*//') #determine page count

  SETTINGS=($(\
      yad --form --width 300 --center \
          --window-icon application-pdf --image application-pdf \
          --separator=" " --title="PDFextract"\
          --text "Please choose the page range and backend"\
          --field="Start:NUM" 1[!1..$PAGECOUNT[!1]] --field="End:NUM" $PAGECOUNT[!1..$PAGECOUNT[!1]] \
          --field="Backend":CB "$BACKENDSELECTION" \
          --button="gtk-ok:0" --button="gtk-cancel:1"\
      ))

  SETTINGSRET="$?"

  [[ "$SETTINGSRET" != "0" ]] && exit 1

  STARTPAGE=$(printf %.0f ${SETTINGS[0]}) #round numbers and store array in variables
  STOPPAGE=$(printf %.0f ${SETTINGS[1]})
  BACKEND="${SETTINGS[2]}"
  EXTRACTOR="${BACKEND}extract"

  check_deps "$BACKEND"

  if [[ -n "$MissingDeps" ]]; then
    dialog_warning "Error, missing dependency: $MissingDeps"
    unset MissingDeps
    dialog_settings
    return
  fi

  if [[ "$STARTPAGE" -gt "$STOPPAGE" ]]; then 
    dialog_warning "<b>   Start page higher than stop page.   </b>"
    dialog_settings
    return
  fi

  OUTFILE="${DOCUMENT%.pdf} (p${STARTPAGE}-p${STOPPAGE}).pdf"
}

extract_pages(){
  $EXTRACTOR
  EXTRACTORRET="$?"
  if [[ "$EXTRACTORRET" = "0" ]]; then
    notify "Pages $STARTPAGE to $STOPPAGE succesfully extracted."
  else
    notify "There has been an error. Please check the CLI output."
  fi
}


# Main

check_input "$1"
dialog_settings
extract_pages

Instalação

Por favor, siga as instruções genéricas de instalação para scripts do Nautilus. Certifique-se de ler o cabeçalho do script com cuidado, pois ajudará a esclarecer a instalação e o uso do script.


Páginas parciais - PDF Shuffler


Visão geral

PDF-Shuffler é um pequeno aplicativo python-gtk, que ajuda o usuário a mesclar ou dividir documentos em PDF e girar, cortar e reorganizar suas páginas usando uma interface gráfica interativa e intuitiva. É um frontend para python-pyPdf.

Instalação

sudo apt-get install pdfshuffler

Uso

O PDF-Shuffler pode cortar e excluir páginas de um único PDF. Você pode usá-lo para extrair um intervalo de páginas de um documento ou mesmo páginas parciais usando a função de corte:

enter image description here


Elementos da página - Inkscape


Visão geral

O Inkscape é um poderoso editor de gráficos vetoriais de código aberto. Suporta uma ampla gama de diferentes formatos, incluindo arquivos PDF. Você pode usá-lo para extrair, modificar e salvar elementos de página de um arquivo PDF.

Instalação

sudo apt-get install inkscape

Uso

1.) Abra o arquivo PDF de sua escolha com o Inkscape. Uma caixa de diálogo de importação será exibida. Escolha a página da qual você deseja extrair elementos. Deixe as outras configurações como estão:

enter image description here

2.) No Inkscape, clique e arraste para selecionar o (s) elemento (s) que você deseja extrair:

enter image description here

3) Inverta a seleção com ! e excluir o objeto selecionado com EXCLUIR:

enter image description here

4.) Recorte o documento para os demais objetos acessando o Propriedades do documento diálogo com CTRL+MUDANÇA+D e selecionando "ajustar documento à imagem":

enter image description here

5.) Salve o documento como um arquivo PDF do Arquivo -> Salvar como diálogo:

6.) Se houver imagens de bitmap / raster em seu documento cortado, você poderá definir seu DPI na caixa de diálogo que aparece a seguir:

enter image description here

7.) Se você seguiu todas as etapas, terá produzido um arquivo PDF verdadeiro que consiste apenas nos objetos de sua escolha:

enter image description here


63
2018-04-17 15:11



Grande esforço. Obrigado! Eu entendo que não permite selecionar um parte de uma página, mas apenas páginas inteiras. Estou certo? - carnendil
@carnendil: Sim, exatamente. Eu não acho que ghostscript seja capaz disso. Mas pode haver outras soluções para fazer isso de forma programática. Por enquanto tenho editado minha resposta com uma solução alternativa (e um pouco hackish) usando o PDF-shuffler. - Glutanimate
ok, eu adicionei um método diferente usando o Inkscape. - Glutanimate
pdfshuffler não é suficiente se você quiser extrair uma parte da página PDF. Os dados originais em PDF da página ainda são preservados no arquivo. Não use este método se você quiser remover dados confidenciais de um arquivo PDF. - Rob W


Salve isso como um script de shell, como pdfextractor.sh:

#!/bin/bash
# this function uses 3 arguments:
#     $1 is the first page of the range to extract
#     $2 is the last page of the range to extract
#     $3 is the input file
#     output file will be named "inputfile_pXX-pYY.pdf"
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER \
   -dFirstPage=${1} \
   -dLastPage=${2} \
   -sOutputFile=${3%.pdf}_p${1}-p${2}.pdf \
   ${3}

Para executar o tipo:

./pdfextractor.sh 4 20 myfile.pdf

1) 4 refere-se à página que irá iniciar o novo pdf.

2) 20 refere-se à página com a qual terminará o pdf.

3) myfile.pdf é o arquivo pdf que você deseja extrair partes.

A saída seria myfile_p4_p20.pdf no mesmo diretório do arquivo pdf original.

Tudo isso e mais informações aqui: Dica de tecnologia


31
2018-04-16 17:40



Vamos simplificar: gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=10 -sOutputFile=output.pdf input.pdf - Ho1
e como eu especifico o arquivo de entrada? - Anwar
-1 para fazer a expansão do parâmetro bash fora da cadeia de aspas duplas. (deveria estar "-sOutputFile=${3%.pdf}_p${1}-p${2}.pdf" etc (observe as aspas)). - Rotsor


QPDF é ótimo. Use desta forma para extrair as páginas 1-10 de input.pdf e salve-o como output.pdf.

qpdf --pages input.pdf 1-10 -- input.pdf output.pdf

Por favor note que input.pdf é escrito duas vezes.

Você pode instalá-lo invocando:

apt-get install qpdf

Ou, indo ao diretório de aplicativos do Ubuntu:

Install via the software center

É uma ótima ferramenta para manipulação de PDF, que é muito rápida, tem poucas dependências. "Ele pode criptografar e linearizar arquivos, expor os componentes internos de um arquivo PDF e fazer muitas outras operações úteis para usuários finais e desenvolvedores de PDF."

http://sourceforge.net/projects/qpdf/


26
2017-09-09 07:10



O único problema que tive com isso é que ainda lista todas as páginas do índice, apesar de a maioria ser removida. Além de, brilhante obrigado! :) - Wilf
Ótimo software. agradável - Anwar


Existe um utilitário de linha de comando chamado pdfseparate.

Dos docs:

pdfseparate sample.pdf sample-%d.pdf

extracts  all pages from sample.pdf, if i.e. sample.pdf has 3 pages, it
   produces

sample-1.pdf, sample-2.pdf, sample-3.pdf

Ou, para selecionar uma única página (neste caso, a primeira página) do arquivo sample.pdf:

pdfseparate -f 1 -l 1 sample.pdf sample-1.pdf

21
2017-10-29 18:17



ótima ferramenta! muito mais rápido que pdftk - Anwar
Bom, mas é limitado apenas a uma página, e se você quiser mais do que isso, você terá páginas separadas. - Ho1
Claro, embora se possa seguir o comando acima com pdfunite para produzir um único documento. - jdmcbr
Se você tem um documento enorme e precisa dividir todas as páginas, é muito rápido e útil. - MEDVIS


pdftk (sudo apt-get install pdftk) é uma ótima linha de comando também para manipulação de PDF. Aqui estão alguns exemplos do que pdftk pode fazer:

   Collate scanned pages
     pdftk A=even.pdf B=odd.pdf shuffle A B output collated.pdf
     or if odd.pdf is in reverse order:
     pdftk A=even.pdf B=odd.pdf shuffle A Bend-1 output collated.pdf

   Join in1.pdf and in2.pdf into a new PDF, out1.pdf
     pdftk in1.pdf in2.pdf cat output out1.pdf
     or (using handles):
     pdftk A=in1.pdf B=in2.pdf cat A B output out1.pdf
     or (using wildcards):
     pdftk *.pdf cat output combined.pdf

   Remove page 13 from in1.pdf to create out1.pdf
     pdftk in.pdf cat 1-12 14-end output out1.pdf
     or:
     pdftk A=in1.pdf cat A1-12 A14-end output out1.pdf

   Burst a single PDF document into pages and dump its data to
   doc_data.txt
     pdftk in.pdf burst

   Rotate the first PDF page to 90 degrees clockwise
     pdftk in.pdf cat 1east 2-end output out.pdf

   Rotate an entire PDF document to 180 degrees
     pdftk in.pdf cat 1-endsouth output out.pdf

No seu caso, eu faria:

     pdftk A=input.pdf cat A<page_range> output output.pdf

17
2017-10-29 18:23





Em qualquer sistema que uma distribuição TeX esteja instalada:

pdfjam <input file> <page ranges> -o <output file>

Por exemplo:

pdfjam original.pdf 5-10 -o out.pdf

Vejo https://tex.stackexchange.com/a/79626/8666


10
2017-09-01 20:18





Você já tentou o PDF Mod?

Você pode, por exemplo, extrair páginas e salvá-las como pdf.

Descrição:

O PDF Mod é uma ferramenta simples para modificar documentos PDF. Pode girar, extrair, remover
e reordenar páginas via arrastar e soltar. Vários documentos podem ser combinados via arrastar
e solte. Você também pode editar o título, assunto, autor e palavras-chave de um PDF
 documento usando o PDF Mod.

Install via the software center

Espero que isso seja útil.

Regars.


6
2017-11-26 02:17



Sim, eu realmente tentei, mas NÃO me permite salvar parte de uma página, por exemplo um enredo como pdf ... A menos que eu não veja a opção. Isso me permite extrair uma página inteira de um documento, mas não é isso que eu quero - user72469
Eu uso regularmente, ótima ferramenta! mas eu tinha um documento com cerca de 170 páginas que o pdfmod não suportava. - loved.by.Jesus
Uau. Isso é surpreendentemente suave. Joguei meu livro real de 512 páginas (50MiB) e ... foi rápido. UI é uma brisa. Para um viciado em CLI como eu, é preciso algum nível de GUI para me convencer, mas isso fará! - sehe


Eu estava tentando fazer o mesmo. Tudo o que tem a fazer é:

  1. instalar pdftk:

    sudo apt-get install pdftk
    
  2. se você quiser extrair páginas aleatórias:

    pdftk myoldfile.pdf cat 1 2 4 5 output mynewfile.pdf
    
  3. se você quiser extrair um intervalo:

    pdftk myoldfile.pdf cat 1-2 4-5 output mynewfile.pdf
    

por favor, verifique a fonte para mais infos.


6
2018-05-03 04:00