El problema sería que hay hijas que redefinen métodos del padre... por lo que supongo que podrías tratar al padre como una extensión más. De esa manera te aseguras de utilizar los métodos originales del padre. O sea:
Código PHP:
$pdf_extension_handler->LoadExtension('ClasePadre');
$pdf_extension_handler->LoadExtension('Extension1');
$pdf_extension_handler->LoadExtension('Extension2');
Y cuando quieras utilizar métodos originales del padre:
Código PHP:
$pdf_extension_handler->SetExtension('ClasePadre');
$pdf_extension_handler->extension->MetodoClasePadre();
La forma de utilizar esa clase (Extensions handler) sí se intuía.
En este momento no puedo hacer pruebas (y tal vez permanezca así durante unos diez días más mientras me ponen el speedy)... pero voy a exponerles mis dudas respecto al método de sism82:
- El objeto $pdf_extension_handler mantiene un arreglo de referencias a varias instancias de distintas hijas de FPDF.
- Aunque desde $pdf_extension_handler manejemos el comportamiento de todas ellas juntas... siempre van a seguir trabajando individualmente sin conocerse entre sí.
¿Cuál es el problema?
- No he utilizado FPDF, pero a raíz de este tema he estado mirando un poco el código (repito, no he hecho pruebas) y cuando uno crea una instancia de FPDF (o de una de sus hijas), uno sigue una secuencia. Voy a poner un ejemplo sencillo:
Código PHP:
$pdf = new Familiar_de_FPDF();
$pdf->AddPage();
$pdf->Método_para_escribir_texto('Este es un texto');
$pdf->Método_para_insertar_salto_de_linea();
$pdf->Método_para_escribir_texto('Este es un poco más de texto');
$pdf->Output();
Utilizando la manera expuesta por sism82, Suponiendo que quiero escribir JavaScript y texto HTML (para eso tendría que utilizar dos extensiones), internamente tendría tres instancias:
Código PHP:
$extensions['FPDF']; // El padre, si se trabaja como puse al comienzo de este post
$extensions['FPDF_HTML']; // Me acabo de inventar el nombre... tal vez así se llame de verdad
$extensions['FPDF_JS']; // Igual
Entonces lo utilizaríamos así:
Código PHP:
pdf_extension_handler->SetExtension('FPDF');
$pdf_extension_handler->extension->Metodo_de_FPDF();
$pdf_extension_handler->SetExtension('FPDF_JS');
$pdf_extension_handler->extension->Metodo_de_FPDF_JS();
$pdf_extension_handler->SetExtension('FPDF_HTML');
$pdf_extension_handler->extension->Metodo_de_FPDF_HTML();
Y si quiero utilizar el método Output() para generar por fin el pdf????
$pdf_extension_handler->extension->output()
Dará el output del objeto que se estaba utilizando... pero no se generará lo que queríamos. Tampoco podríamos ir seleccionando una por una las extensiones y dándole Output... con esto quiero decir que estamos generando varios documentos pdf en varias instancias... y no es lo que deseamos.
Saludos