Três bibliotecas. Três trabalhos distintos. Escolher a errada lhe custará semanas de soluções de contorno, e escolher as três quando você só precisa de uma custa uma sobrecarga de manutenção que você não orçou. Aqui está um relato direto do que cada biblioteca PDF losLab realmente faz, onde ela se encaixa e onde passa a tarefa para as suas irmãs
HotPDF: escrevendo PDF do zero no Delphi
O HotPDF é um componente VCL nativo para gerar documentos PDF. Seu modelo é imperativo e centrado na página: você constrói uma instância THotPDF, define as propriedades do documento, chama BeginDoc, desenha na CurrentPage, adiciona páginas conforme necessário e fecha com EndDoc. A ordem importa porque BeginDoc compromete o dicionário de criptografia e as configurações de compressão no momento em que é executado; qualquer coisa atribuída após esse ponto é ignorada silenciosamente em vez de aplicada retroativamente
A superfície de desenho abrange o conjunto completo de operadores PDF no nível do Delphi: TextOut para texto Unicode posicionado, SetFont com incorporação de TrueType, primitivas vetoriais (linhas, curvas de Bezier, elipses, retângulos), colocação de imagem a partir de arquivo ou memória, e geração de código de barras. As coordenadas são em pontos a partir do canto inferior esquerdo com Y aumentando para cima, o que pega todo mundo pelo menos uma vez. O estado da fonte não sobrevive ao AddPage, de modo que uma chamada para SetFont é necessária após cada quebra de página
Campos AcroForm são cidadãos de primeira classe. Você pode adicionar campos de texto, caixas de seleção, botões de rádio, caixas de combinação, caixas de listagem e botões de comando diretamente a um objeto de página com uma única chamada cada. O HotPDF também pode carregar um PDF existente através de LoadFromFile e preencher ou ler valores de campos, o que o torna útil em dois fluxos de trabalho separados: construção de formulários e automação do seu preenchimento
A criptografia também é tratada no nível do documento. CryptKeyLength seleciona o esquema (RC4 de 40 bits até AES-256), ActivateProtection o arma, e ProtectOptions define as flags de permissão ISO. Os dois modos de revisão do AES-256 (R5 e R6, controlados por UseAES256R6) existem porque a revisão 6 corrige uma fraqueza conhecida na revisão 5, mas requer um visualizador capaz de ler PDF 2.0; escolher entre eles é uma decisão de compatibilidade, não uma conveniência
O suporte à assinatura digital no HotPDF abrange os perfis base do PAdES, portanto ele é adequado para fluxos de trabalho onde a assinatura deve atender aos requisitos do ETSI EN 319 142. Se a sua necessidade é apenas a geração da saída, o HotPDF é a biblioteca a se buscar primeiro
PDFium Component: renderizando, visualizando e lendo PDFs existentes
O PDFium Component encapsula o motor PDFium do Google como um componente VCL, o que lhe dá um papel fundamentalmente diferente do HotPDF. Onde o HotPDF escreve, o PDFium Component lê e renderiza. O objeto central é o TPdf, um gerenciador de documentos que abre um arquivo ao definir FileName e em seguida Active := True. Falhas de carregamento não são levantadas como exceções; Active simplesmente permanece False, de modo que verificá-lo após a atribuição não é opcional
A renderização passa através do TPdfView, um componente visual que você solta em um formulário e vincula a uma instância de TPdf via PdfView.Pdf := Pdf. O zoom e o modo de ajuste residem na visualização, não no documento. Uma sutileza que confunde as pessoas: Pdf.PageNumber e PdfView.PageNumber são propriedades independentes. Definir uma não atualiza a outra, e as APIs de extração baseadas em visualização (caixas de palavras, unidades de leitura) usam a página atual da visualização, não a do documento
A extração de texto é onde o PDFium Component não tem concorrente direto na linha da losLab. ReadablePageContent retorna o texto estruturado com consciência de ordem de leitura, PageWordBoxes fornece retângulos delimitadores em nível de palavra, e DocumentReadingUnits percorre todo o documento. Para trabalho de acessibilidade, IsTagged informa se uma árvore de estrutura está presente e ValidatePdfUa roda uma verificação de conformidade UA. Essas APIs tornam o PDFium Component a escolha natural para qualquer fluxo de trabalho que precise entender o que há dentro de um PDF existente em vez de produzir um novo
O preenchimento de formulários também funciona no lado do PDFium, através da mesma camada AcroForm que a engine (motor) subjacente expõe. Isso é apropriado quando o documento de origem já existe e você está automatizando sua conclusão em vez de construir os próprios campos do formulário
PDFlibPas: manipulação, assinatura de conformidade e acesso direto a arquivos
O PDFlibPas (versão 3.73.0) fica na outra extremidade do espectro de complexidade. Ele expõe três camadas de API em cima do mesmo modelo de documento: uma fachada plana baseada em handles (TPDFlib) compatível com a convenção de chamada do Quick-PDF, uma camada completa de árvore de objetos (TPDFDocument) e um analisador (parser) baseado em fluxo (TSmartPDFReader / TSmartPDFWriter) que opera diretamente sobre os bytes do arquivo sem carregar o gráfico completo de objetos
A camada de streaming é o que faz do PDFlibPas a escolha certa para documentos muito grandes. TSmartPDFWriter pode adicionar uma atualização incremental a um arquivo no disco sem reconstruir a tabela inteira de referências cruzadas, que é o mecanismo subjacente tanto da re-gravação eficiente quanto dos carimbos PAdES de validação de longo prazo. Para fluxos de trabalho de assinatura de nível de conformidade, onde o hash assinado deve cobrir uma faixa de bytes específica e a assinatura é aplicada sem reescrever o documento, essa camada é a única via viável
A manipulação de documentos ao nível de TPDFDocument inclui a fusão com Merge, cópia seletiva de páginas via CopyPagesFromDoc com uma string de intervalos, e governança de versões através de SetMinimumVersion e LockSaveVersion. A trava de versão emite o erro 602 se você tentar salvar uma funcionalidade que empurraria a saída para cima da versão travada, o que é útil quando você precisa garantir que a saída fique dentro de uma revisão PDF específica para compliance arquivística
O suporte a PDF/A (ISO 19005) assenta na bancada de conformidade do PDFlibPas. Note que a criptografia e o PDF/A são mutuamente exclusivos por especificação: você não pode ter ambos em um arquivo. Fluxos de trabalho que precisam de uma cópia criptografada para distribuição e uma cópia PDF/A para arquivo devem gerar dois artefatos separados
Escolhendo entre elas
A árvore de decisão típica é curta. Se você estiver gerando um novo documento a partir de dados, use o HotPDF. Se estiver renderizando ou extraindo texto de um documento existente em um aplicativo VCL do Delphi, use o PDFium Component. Se estiver manipulando, fundindo ou assinando PDFs existentes em escala ou com a semântica de salvamento incremental, use o PDFlibPas. Muitos sistemas de produção utilizam dois dos três: HotPDF para gerar saída e PDFlibPas para aplicar-lhe um carimbo de validação a longo prazo antes do arquivamento, por exemplo, ou PDFium Component para pré-visualizar o que o HotPDF produziu antes de enviá-lo ao destino final
Todas as três acompanham código-fonte Pascal nativo para Delphi e C++Builder, sem dependências de tempo de execução além da VCL. O PDFium Component, adicionalmente, embuti a DLL PDFium, que cobre a renderização e o trabalho de análise (parsing) da engine. A página do produto de cada biblioteca porta sua referência completa de API e seu histórico de versões atual
Detalhes sobre as bibliotecas individuais: Componente HotPDF, Componente PDFium, e PDFlibPas