Todos vocês devem estar familiarizados com o que são PDFs. Na verdade, eles são uma das mídias digitais mais importantes e amplamente utilizadas. PDF significa Formato de documento portátil . Ele usa .pdf extensão. É usado para apresentar e trocar documentos de forma confiável, independente de software, hardware ou sistema operacional.
Inventado por Adobe PDF é agora um padrão aberto mantido pela Organização Internacional de Padronização (ISO). PDFs podem conter links e botões, campos de áudio, vídeo e lógica de negócios.
Neste artigo aprenderemos como podemos realizar várias operações como:
- Extraindo texto de PDF
- Girando páginas PDF
- Mesclando PDFs
- Divisão de PDF
- Adicionando marca d’água em páginas PDF
Instalação: Usando scripts python simples!
Estaremos usando um módulo pypdf de terceiros.
pypdf é uma biblioteca python construída como um kit de ferramentas PDF. É capaz de:
- Extraindo informações do documento (autor do título…)
- Dividir documentos página por página
- Mesclando documentos página por página
- Cortar páginas
- Mesclando várias páginas em uma única página
- Criptografando e descriptografando arquivos PDF
- e muito mais!
Para instalar o pypdf, execute o seguinte comando na linha de comando:
pip install pypdfEste nome de módulo diferencia maiúsculas de minúsculas, portanto, certifique-se de que o e é minúscula e todo o resto é maiúsculo. Todos os códigos e arquivos PDF usados neste tutorial/artigo estão disponíveis aqui .
cadeia de lista java
1. Extraindo texto de arquivo PDF
Python# importing required classes from pypdf import PdfReader # creating a pdf reader object reader = PdfReader('example.pdf') # printing number of pages in pdf file print(len(reader.pages)) # creating a page object page = reader.pages[0] # extracting text from page print(page.extract_text())
A saída do programa acima é semelhante a esta:
20
PythonBasics
S.R.Doty
August272008
Contents
1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]
Vamos tentar entender o código acima em partes:
reader = PdfReader('example.pdf')
- Aqui criamos um objeto de Leitor de PDF classe do módulo pypdf e passe o caminho para o arquivo PDF e obtenha um objeto leitor de PDF.
print(len(reader.pages))
- páginas propriedade fornece o número de páginas no arquivo PDF. Por exemplo, no nosso caso é 20 (veja a primeira linha da saída).
pageObj = reader.pages[0]
- Agora criamos um objeto de PageObject classe do módulo pypdf. Objeto leitor de PDF tem função páginas[] que recebe o número da página (começando no índice 0) como argumento e retorna o objeto da página.
print(pageObj.extract_text())
- O objeto da página tem função extrair_texto() para extrair texto da página PDF.
Observação: Embora os arquivos PDF sejam ótimos para organizar o texto de uma forma que seja fácil para as pessoas imprimirem e lerem, eles não são fáceis de serem analisados pelo software em texto simples. Como tal, o pypdf pode cometer erros ao extrair texto de um PDF e pode até mesmo não conseguir abrir alguns PDFs. Não há muito que você possa fazer sobre isso, infelizmente. pypdf pode simplesmente não conseguir trabalhar com alguns de seus arquivos PDF específicos.
2. Rotação de páginas PDF
a classe abstrata pode ter construtorPython
# importing the required classes from pypdf import PdfReader PdfWriter def PDFrotate(origFileName newFileName rotation): # creating a pdf Reader object reader = PdfReader(origFileName) # creating a pdf writer object for new pdf writer = PdfWriter() # rotating each page for page in range(len(reader.pages)): pageObj = reader.pages[page] pageObj.rotate(rotation) # Add the rotated page object to the PDF writer writer.add_page(pageObj) # Write the rotated pages to the new PDF file with open(newFileName 'wb') as newFile: writer.write(newFile) def main(): # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'rotated_example.pdf' # rotation angle rotation = 270 # calling the PDFrotate function PDFrotate(origFileName newFileName rotation) if __name__ == '__main__': # calling the main function main()
Aqui você pode ver como a primeira página do rotacionado_exemplo.pdf parece (imagem à direita) após a rotação:

Alguns pontos importantes relacionados ao código acima:
- Para rotação, primeiro criamos um objeto leitor de PDF do PDF original.
writer = PdfWriter()
- As páginas giradas serão gravadas em um novo PDF. Para escrever em PDFs usamos o objeto de PDFWriter classe do módulo pypdf.
for page in range(len(pdfReader.pages)):
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
- Agora iteramos cada página do PDF original. Obtemos o objeto da página por .páginas[] método da classe de leitor de PDF. Agora giramos a página girar() método da classe de objeto de página. Em seguida, adicionamos uma página ao objeto PDF Writer usando adicionar() método da classe PDF Writer, passando o objeto de página girada.
newFile = open(newFileName 'wb')
writer.write(newFile)
newFile.close()
- Agora temos que gravar as páginas PDF em um novo arquivo PDF. Primeiramente, abrimos o novo objeto de arquivo e escrevemos páginas PDF nele usando escrever() método do objeto PDF Writer. Finalmente fechamos o objeto de arquivo PDF original e o novo objeto de arquivo.
3. Mesclando arquivos PDF
Python# importing required modules from pypdf import PdfWriter def PDFmerge(pdfs output): # creating pdf file writer object pdfWriter = PdfWriter() # appending pdfs one by one for pdf in pdfs: pdfWriter.append(pdf) # writing combined pdf to output pdf file with open(output 'wb') as f: pdfWriter.write(f) def main(): # pdf files to merge pdfs = ['example.pdf' 'rotated_example.pdf'] # output pdf file name output = 'combined_example.pdf' # calling pdf merge function PDFmerge(pdfs=pdfs output=output) if __name__ == '__main__': # calling the main function main()
A saída do programa acima é um PDF combinado combinado_exemplo.pdf obtido pela fusão exemplo.pdf e rotacionado_exemplo.pdf .
que meses são o terceiro trimestre
- Vamos dar uma olhada em aspectos importantes deste programa:
pdfWriter = PdfWriter()- Para mesclar, usamos uma classe pré-construída PDFWriter do módulo pypdf.
Aqui criamos um objeto escritor de pdf da aula de escritor de PDF
# appending pdfs one by one
for pdf in pdfs:
pdfWriter.append(pdf)
- Agora anexamos o objeto de arquivo de cada PDF ao objeto PDF Writer usando o acrescentar() método.
# writing combined pdf to output pdf file
with open(output 'wb') as f:
pdfWriter.write(f)
- Finalmente, escrevemos as páginas PDF no arquivo PDF de saída usando escrever método do objeto PDF Writer.
4. Divisão de arquivo PDF
Python# importing the required modules from pypdf import PdfReader PdfWriter def PDFsplit(pdf splits): # creating pdf reader object reader = PdfReader(pdf) # starting index of first slice start = 0 # starting index of last slice end = splits[0] for i in range(len(splits)+1): # creating pdf writer object for (i+1)th split writer = PdfWriter() # output pdf file name outputpdf = pdf.split('.pdf')[0] + str(i) + '.pdf' # adding pages to pdf writer object for page in range(startend): writer.add_page(reader.pages[page]) # writing split pdf pages to pdf file with open(outputpdf 'wb') as f: writer.write(f) # interchanging page split start position for next split start = end try: # setting split end position for next split end = splits[i+1] except IndexError: # setting split end position for last split end = len(reader.pages) def main(): # pdf file to split pdf = 'example.pdf' # split page positions splits = [24] # calling PDFsplit function to split pdf PDFsplit(pdf splits) if __name__ == '__main__': # calling the main function main()
A saída serão três novos arquivos PDF com divisão 1 (página 01) divisão 2 (página 23) divisão 3 (final da página 4) .
Nenhuma nova função ou classe foi usada no programa python acima. Usando lógica simples e iterações, criamos as divisões do PDF passado de acordo com a lista passada divisões .
formatar a data em java
5. Adicionando marca d'água às páginas PDF
Python# importing the required modules from pypdf import PdfReader PdfWriter def add_watermark(wmFile pageObj): # creating pdf reader object of watermark pdf file reader = PdfReader(wmFile) # merging watermark pdf's first page with passed page object. pageObj.merge_page(reader.pages[0]) # returning watermarked page object return pageObj def main(): # watermark pdf file name mywatermark = 'watermark.pdf' # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'watermarked_example.pdf' # creating pdf File object of original pdf pdfFileObj = open(origFileName 'rb') # creating a pdf Reader object reader = PdfReader(pdfFileObj) # creating a pdf writer object for new pdf writer = PdfWriter() # adding watermark to each page for page in range(len(reader.pages)): # creating watermarked page object wmpageObj = add_watermark(mywatermark reader.pages[page]) # adding watermarked page object to pdf writer writer.add_page(wmpageObj) # writing watermarked pages to new file with open(newFileName 'wb') as newFile: writer.write(newFile) # closing the original pdf file object pdfFileObj.close() if __name__ == '__main__': # calling the main function main()
Esta é a aparência da primeira página do arquivo PDF original (esquerda) e com marca d'água (direita):

- Todo o processo é igual ao exemplo de rotação de página. A única diferença é:
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])
- O objeto de página é convertido em objeto de página com marca d'água usando add_marca d’água() função.
- Vamos tentar entender add_marca d’água() função:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- Acima de tudo, criamos um objeto leitor de PDF de marca d'água.pdf . Para o objeto de página passado, usamos página_mesclagem() função e passe o objeto de página da primeira página do objeto leitor de PDF de marca d'água. Isso sobreporá a marca d’água sobre o objeto de página passado.
E aqui chegamos ao final deste longo tutorial sobre como trabalhar com arquivos PDF em python.
Agora você pode criar facilmente seu próprio gerenciador de PDF!
Referências:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando write.geeksforgeeks.org ou enviar seu artigo para [email protected]. Veja seu artigo aparecendo na página principal do GeeksforGeeks e ajude outros Geeks.
Por favor, escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.