Pular para o conteúdo

Configuração do compat-legacy

O adaptador expõe três superfícies de configuração:

  1. Modo estrito — uma chave de auditoria que transforma a perda silenciosa de parâmetros em exceções. Ela vem desativada por padrão.
  2. Constantes legadas — as constantes K_* / PDF_* do TCPDF, definidas automaticamente com os padrões do TCPDF 6.2.13 para que o código legado que as lê continue funcionando.
  3. AdaptationConfig — um objeto de configuração moderno e imutável que substitui a configuração baseada em constantes.

Você ainda configura a maior parte das definições do documento pelos métodos do TCPDF que já usa (SetMargins(), SetFont() e assim por diante). As seções a seguir abordam apenas o que é específico da camada de compatibilidade.

O modo estrito é a configuração principal durante uma migração. Ele não altera a saída renderizada. Ele controla se uma chamada que não consegue reproduzir o comportamento do TCPDF falha explicitamente ou degrada silenciosamente.

examples/config-strict.php
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF();
$pdf->setStrictMode(true); // audit: throw on silent parameter loss
$isOn = $pdf->isStrictMode(); // true
$pdf->setStrictMode(false); // back to backward-compatible default

Esses resultados são verificados por tests/Unit/Compat/Tcpdf/TcpdfStrictModeTest.php:

ModoMétodo de ignorar-silenciosamente chamadoResultado
Desativado (padrão)por exemplo, Image() com parâmetros extrasExecuta; os parâmetros ignorados não têm efeito
Ativadomesma chamadaLança TcpdfNotImplementedException nomeando os parâmetros ignorados
Ativadoum método que ignora silenciosamente chamado apenas com parâmetros suportadosO método não lança (por exemplo, SetProtection([], 'u', 'o', 0, []))

O modo estrito é aditivo. Quando um método aceita um parâmetro, a delegação ainda ocorre; o modo estrito apenas adiciona uma proteção de exceção para os parâmetros descartados. Use-o em um job dedicado de integração contínua (CI) ou em uma execução pontual de auditoria, não em produção. Isso segue o princípio de falhar explicitamente no tratamento de erros do Application Security Verification Standard (ASVS) 5.0 do Open Worldwide Application Security Project (OWASP) (cláusula reference_id registrada no sidecar do RAG): quem chama precisa conseguir observar quando sua intenção não foi atendida.

Não publique código de produção com o modo estrito ativado. Um parâmetro silenciosamente ignorado é um problema de experiência do desenvolvedor, não uma falha em tempo de execução, e uma exceção em um caminho de renderização de produção é pior do que uma saída degradada. Audite, corrija e então desative o modo — consulte /integrations/tcpdf-compat/migration/.

O TCPDF legado lê a configuração a partir das constantes K_* e PDF_*. O adaptador as define automaticamente durante a construção apenas se elas ainda não estiverem definidas, usando os padrões do TCPDF 6.2.13. Se a aplicação já define uma constante (por exemplo, um K_PATH_FONTS personalizado), o valor é preservado.

Padrões selecionados (lista completa: src/Compat/Tcpdf/Config/LegacyDefaults.php):

ConstantePadrãoObservação
PDF_PAGE_FORMATA4
PDF_PAGE_ORIENTATIONP
PDF_UNITmm
PDF_MARGIN_LEFT / RIGHT15unidades do usuário
PDF_MARGIN_TOP27unidades do usuário
PDF_MARGIN_BOTTOM25unidades do usuário
PDF_FONT_NAME_MAINhelvetica
PDF_FONT_SIZE_MAIN10
K_CELL_HEIGHT_RATIO1.25
K_TCPDF_CALLS_IN_HTMLfalsereforçada — sempre false; a marcação não pode disparar a execução de PHP
K_TCPDF_THROW_EXCEPTION_ERRORtruereforçadaError() sempre lança; nunca die()
K_TIMEZONEUTC

Duas dessas constantes são fixadas deliberadamente por segurança e não podem ser flexibilizadas por configuração: K_TCPDF_CALLS_IN_HTML é sempre false, e K_TCPDF_THROW_EXCEPTION_ERROR é, na prática, sempre true. Se o código legado depende de qualquer um desses comportamentos legados inseguros, esse código precisa mudar — consulte /integrations/tcpdf-compat/security-and-operations/.

Defina as constantes personalizadas antes da primeira construção do adaptador, normalmente no bootstrap da aplicação:

examples/config-constants.php
<?php
declare(strict_types=1);
// Define BEFORE constructing the adapter; the adapter will not override it.
define('PDF_CREATOR', 'My Application');
define('PDF_AUTHOR', 'My Application');
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF();
// Creator and Author are seeded from your constants.

Se você não quiser depender de constantes globais, use o objeto de valor de configuração imutável NextPDF\Compat\Tcpdf\Config\AdaptationConfig. Ele é final readonly, e cada campo assume, por padrão, o valor do TCPDF 6.2.13. Você pode construí-lo apenas com os campos que deseja alterar.

Você também pode construí-lo a partir de quaisquer constantes legadas que estejam definidas no momento:

examples/config-adaptation.php
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\Config\AdaptationConfig;
// Snapshot the currently-defined legacy constants into an object:
$config = AdaptationConfig::fromLegacyConstants();
echo $config->pageFormat; // 'A4' unless a constant overrides it
echo $config->fontNameMain; // 'helvetica'
echo $config->marginLeft; // 15.0

AdaptationConfig é o destino de migração da configuração. À medida que você move os pontos de chamada para a API moderna, substitua as consultas a constantes por campos explícitos de AdaptationConfig. A configuração permanece tipada e local, em vez de global.

Quando o adaptador constrói um documento, ele resolve a configuração nesta ordem. Os passos posteriores não substituem os anteriores:

  1. Argumentos do construtor (orientation, unit, format, …) — precedência máxima para os valores que cobrem.
  2. Constantes legadas preexistentes definidas pela aplicação.
  3. Constantes padrão do TCPDF 6.2.13, definidas automaticamente por LegacyDefaults para qualquer constante ainda não definida.

Os argumentos do construtor unicode, encoding e diskcache são aceitos por compatibilidade de assinatura e não têm efeito. O NextPDF é sempre Unicode e UTF-8, e não mantém cache de páginas em disco. A flag do construtor pdfa também é aceita, mas a conformidade de arquivamento PDF/A requer uma edição comercial (consulte /integrations/tcpdf-compat/security-and-operations/).

  • src/Compat/Tcpdf/Config/LegacyDefaults.php — os padrões de referência das constantes
  • src/Compat/Tcpdf/Config/AdaptationConfig.php — objeto de configuração moderno
  • /integrations/tcpdf-compat/migration/ — como remover a configuração das constantes globais
  • /integrations/tcpdf-compat/security-and-operations/ — as duas flags reforçadas e não configuráveis