Feito para a classe.
https://github.com/JoseQuintas/sefazclass/commit/9d0924debd83a2fd70b72089bdad2d0a60a2d74fInicio as colunas como IMPRIME_IMPRIMEXMLTEM, que seria algo como só vai imprimir se tem no XML... rs
::aLayout[ LAYOUT_EAN, LAYOUT_IMPRIME ] := LAYOUT_IMPRIMEXMLTEM
E criei os métodos onde pode indicar não.
METHOD SetEanOff() INLINE ::aLayout[ LAYOUT_EAN, LAYOUT_IMPRIME ] := LAYOUT_NAOIMPRIME
Na definição de layout a partir do XML, só vai considerar o campo se estiver como baseado no XML (LAYOUT_IMPRIMEXMLTEM)
IF ! Empty( ::aItem[ "cEAN" ] )
IF ::aLayout[ LAYOUT_EAN, LAYOUT_IMPRIME ] == LAYOUT_IMPRIMEXMLTEM
::aLayout[ LAYOUT_EAN, LAYOUT_IMPRIME ] := LAYOUT_IMPRIMENORMAL
ENDIF
ENDIF
No uso é algo como isto:
oPDF := hbnfeDaNfe():New()
oPDF:SetEanOff()
oPDF:ToPDF( "arq.xml", "arq.pdf" )
Fiz o mesmo pra todos os outros campos opcionais. Com isso, o default é pra sair se existir no XML, como era antes.