Executando verificação de segurança...
1

PDF Oxide agora tem bindings para Go, C#/.NET e Node — mesmo motor Rust, licença MIT

Faz uns seis meses publiquei o pdf_oxide — biblioteca PDF com motor em Rust. Na época só tinha binding Python. Nos últimos dois meses portei pra Go, C#/.NET e Node/TypeScript. Agora estão os quatro no ar.

O que o toolkit entrega em cada linguagem: extração de texto (plain, markdown, HTML) com estrutura de títulos e parágrafos preservada, texto estruturado (palavras, linhas, chars com coordenadas), extração de tabelas, busca full-text, extração de imagens, leitura e edição de campos de formulário, anotações, renderização de páginas pra PNG/JPEG ou thumbnails, e um DocumentEditor separado pra metadados, rotação / mover / deletar páginas, crop, flatten de anotações e salvar com criptografia. Também dá pra criar PDFs a partir de markdown, HTML, texto puro ou imagens, além de merge de múltiplos arquivos.

Instalação:

Node

npm install pdf-oxide

C# / .NET

dotnet add package PdfOxide

Go

go get github.com/yfedoseev/pdf_oxide/go

uma vez por máquina — busca a staticlib nativa do GitHub Releases:

go run github.com/yfedoseev/pdf_oxide/go/cmd/install@latest

Node e .NET já vêm com as bibliotecas nativas empacotadas (x64 + ARM64 pra Linux, macOS, Windows). No Go a staticlib é grande demais pro módulo, então é fetch-on-demand via installer — o script imprime as variáveis CGO_CFLAGS / CGO_LDFLAGS pra exportar.

Exemplo em Go:

doc, _ := pdfoxide.Open("paper.pdf")
defer doc.Close()
text, _ := doc.ExtractText(0)
md, _   := doc.ToMarkdown(0)

GitHub: https://github.com/yfedoseev/pdf_oxide
Docs: https://oxide.fyi

Média de 0.8ms por documento, p99 de 9ms, 100% de pass rate num corpus de 3.830 PDFs reais (veraPDF, Mozilla pdf.js, DARPA SafeDocs). O parser é Rust, então não tem gerenciamento manual de memória no caminho de input não-confiável. Overhead do cgo no Go é ~15% sobre chamadas Rust diretas em fixtures reais.

Benchmark:

BibliotecaMédiap99Pass RateLicença
pdf_oxide0.8ms9ms100%MIT / Apache-2.0
PyMuPDF4.6ms28ms99.3%AGPL-3.0
pypdfium24.1ms42ms99.2%Apache-2.0
pypdf12.1ms97ms98.4%BSD-3
pdfplumber23.2ms189ms98.8%MIT

Essa é a primeira release pública dos três novos bindings, então feedback de quem desenvolve em Go, C# ou Node seria bem útil — se a API parece idiomática na linguagem, se os padrões de erro fazem sentido (sentinelas com errors.Is no Go, exceções no .NET, erros síncronos no Node), como é a experiência de build e deploy nos seus ambientes (Alpine, Lambda, containers AOT, scratch images), e qualquer PDF real que quebra o parser. Abram issues no GitHub ou respondam aqui.

Carregando publicação patrocinada...