Introdução
document.py, o módulo que define Aspose.PDF FOSS para a classe Document do Python, descreve-o como uma classe que “envolve o motor PDF nativo”. Concretamente, esse motor é aspose_pdf.engine.simple_pdf.SimplePdf: Document.load_from cria uma instância SimplePdf, e toda operação ao nível de documento — salvar, otimizar, reparar, criptografar — delega a ele. O mesmo vale para renderização: Page.render e Document.render_page ambos chamam aspose_pdf.engine.rasterizer.
A maior parte do código da aplicação nunca precisa olhar além de Document e Page. Mas aspose_pdf.engine é um pacote Python comum, importável, e várias das peças sob a fachada são úteis por si só: o rasterizador que converte uma página em pixels, os codecs de filtro de fluxo que comprimem e descomprimem fluxos de conteúdo PDF, e as utilidades de criptografia que implementam os algoritmos AES-CBC e RC4 dos manipuladores de segurança PDF. Ao contrário do pacote principal, os submódulos de aspose_pdf.engine não são reexportados a partir do aspose_pdf de nível superior — a única exceção é RasterizedPage, interligado através de aspose_pdf.visualization — então tudo abaixo é importado pelo seu caminho pontuado completo, por exemplo from aspose_pdf.engine.filters import StreamDecoder.
Aspose.PDF FOSS para Python é um pacote Python, aspose-pdf-foss-for-python, lançado sob a licença MIT, exigindo Python 3.11 ou superior. Seu nome de módulo de nível superior é aspose_pdf. O pacote central depende apenas de cryptography e asn1crypto; extras opcionais adicionam decodificação de imagens baseada em Pillow, suporte a fontes WOFF2 baseado em Brotli, e layout de texto complexo baseado em HarfBuzz.
Principais Recursos
Renderizando Páginas com o Motor de Rasterização
Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) e sua contraparte Page.render retornam ambos um RasterizedPage — um raster RGB compactado produzido pelo rasterizador do motor. RasterizedPage expõe width, height e bytes brutos pixels, além de get_pixel() para consulta de um único pixel, to_png() / to_tiff() para bytes codificados em memória, e save() para escrever diretamente um arquivo .png ou .tif/.tiff. Trabalhar com o objeto na memória — em vez de apenas salvar em disco — é útil quando o chamador deseja inspecionar ou transformar pixels antes de decidir se deve mantê-los.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Rendered by the engine", x=72, y=700, font_size=18)
raster = document.render_page(0, dpi=150)
print(raster.width, raster.height)
corner = raster.get_pixel(0, 0)
print("top-left pixel:", corner)
with open("page-0.png", "wb") as handle:
handle.write(raster.to_png())
raster.save("page-0.tiff")
O mecanismo de filtro de fluxo
O conteúdo PDF e os fluxos de objetos são compactados com filtros nomeados como FlateDecode e LZWDecode. aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) e StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) implementam os lados de codificação e decodificação dessa cadeia de filtros — os mesmos codecs que o motor usa internamente ao escrever e ler os fluxos de um documento. Ambos aceitam um único nome de filtro ou uma lista para filtros encadeados, e StreamDecoder.decode() gera PdfValidationException ao encontrar um nome de filtro não reconhecido em vez de retornar bytes silenciosamente errados.
from aspose_pdf.engine.filters import StreamDecoder, StreamEncoder
raw = b"Sample content-stream payload.\n" * 40
compressed = StreamEncoder.encode(raw, "FlateDecode")
restored = StreamDecoder.decode(compressed, "FlateDecode", None)
assert restored == raw
print(f"{len(raw)} bytes -> {len(compressed)} bytes with FlateDecode")
O mecanismo de criptografia
aspose_pdf.engine.encryption.EncryptionUtils é a classe utilitária de método estático que SimplePdf invoca para cada operação relacionada à criptografia: Document.encrypt, decrypt() e change_passwords() todos se resolvem em chamadas EncryptionUtils nos bastidores. Seus métodos implementam AES-CBC e criptografia RC4 diretamente (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), derivação de chave para as revisões do manipulador de segurança padrão PDF (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6), e generate_file_id() para o ID aleatório de 16 bytes que novos documentos precisam.
from aspose_pdf.engine.encryption import EncryptionUtils
key = b"0123456789ABCDEF" # 16 bytes -> AES-128
ciphertext = EncryptionUtils.encrypt_aes_cbc(key, b"Reviewer notes: approved")
plaintext = EncryptionUtils.decrypt_aes_cbc(key, ciphertext)
assert plaintext == b"Reviewer notes: approved"
file_id = EncryptionUtils.generate_file_id()
print(file_id.hex())
Início Rápido
Instale o pacote, então renderize uma página diretamente da camada do motor em um único script.
asposefoss/pdf is not yet published — build from source until it ships. See the project README for build instructions.from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Engine-rendered page", x=72, y=740, font_size=20)
raster = document.render_page(0, dpi=150)
raster.save("engine-render.png")
document.save("engine-quickstart.pdf")
print("Saved engine-quickstart.pdf and engine-render.png")
Formatos suportados
| Formato | Extensão | Ler | Escrever |
|---|---|---|---|
| Sim | Sim | ||
| TIFF | tiff | - | Sim |
Leitura e gravação de PDF é Aspose.PDF FOSS para a função central do Python — o par de mecanismos Document/SimplePdf carrega e grava documentos PDF em todos os caminhos de código neste post. Document.render_page, Page.render e RasterizedPage.to_png() / to_tiff() produzem adicionalmente saída raster PNG e TIFF; estas são saídas de rasterização de página, e não formatos de carregamento de documento.
Código Aberto e Licenciamento
Aspose.PDF FOSS para Python é lançado sob a licença MIT: sem restrições de uso, sem taxas de tempo de execução e sem requisitos de registro para uso comercial ou pessoal. O código-fonte está hospedado em github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, e o pacote é publicado em PyPI como aspose-pdf-foss-for-python.