Creando un PDF complejo
El ejemplo de Hola, Mundo mostró pasos simples para crear un documento PDF usando Aspose.PDF. En este artículo, echaremos un vistazo a la creación de un documento más complejo con Aspose.PDF para PHP a través de Java. Como ejemplo, tomaremos un documento de una empresa ficticia que opera servicios de ferry para pasajeros.
Si creamos un documento desde cero, necesitamos seguir ciertos pasos:
-
Instanciar un objeto Document. En este paso crearemos un documento PDF vacío con algunos metadatos pero sin páginas.
-
Añadir una Página al objeto documento. Así, ahora nuestro documento tendrá una página.
-
Añadir una Imagen. Es una operación compleja basada en acciones de bajo nivel con operadores PDF.
- Cargar imagen desde el flujo
- Añadir imagen a la colección de Imágenes de los Recursos de la Página
- Usar el operador GSave: este operador guarda el estado gráfico actual.
- Crear un objeto Matriz.
- Usar el operador ConcatenateMatrix: define cómo debe colocarse la imagen.
- Usar el operador Do: este operador dibuja la imagen.
- Usar el operador GRestore: este operador restaura el estado gráfico.
-
Crear un FragmentoDeTexto para el encabezado. Para el encabezado usaremos la fuente Arial con tamaño de fuente 24pt y alineación centrada.
-
Agregar encabezado a la página Párrafos.
-
Crear un TextFragment para la descripción. Para la descripción usaremos la fuente Arial con tamaño de fuente 24pt y alineación centrada.
-
Agregar (descripción) a los Párrafos de la página.
-
Crear una tabla, agregar propiedades de la tabla.
-
Agregar (tabla) a los Párrafos de la página.
-
Guardar un documento “Complejo.pdf”.
$document = new Document();
//Agregar página
$page = $document->getPages()->add();
// -------------------------------------------------------------
// Agregar imagen
$imageFileName = $dataDir . DIRECTORY_SEPARATOR . 'logo.png';
$page->AddImage($imageFileName, new Rectangle(20, 730, 120, 830));
// -------------------------------------------------------------
// Agregar Encabezado
$fontRepository = new FontRepository();
$fontArial = $fontRepository->findFont("Arial");
$header = new TextFragment("Nuevas rutas de ferry en otoño 2020");
$header->getTextState()->setFont($fontArial);
$header->getTextState()->setFontSize(24);
$header->setHorizontalAlignment(2);
$header->setPosition(new Position(130, 720));
$page->getParagraphs()->add($header);
// Agregar descripción
$descriptionText = "Los visitantes deben comprar boletos en línea y los boletos están limitados a 5,000 por día. El servicio de ferry está operando a media capacidad y con un horario reducido. Espere filas.";
$description = new TextFragment($descriptionText);
$description->getTextState()->setFont($fontRepository->findFont("Times New Roman"));
$description->getTextState()->setFontSize(14);
$header->setHorizontalAlignment(1);
$page->getParagraphs()->add($description);
// Agregar tabla
$table = new Table();
$table->setColumnWidths("200");
$colors = new Color();
$darkSlateGrayColor = $colors->getDarkSlateGray();
$blackColor = $colors->getBlack();
$grayColor = $colors->getGray();
$whiteSmokeColor = $colors->getWhiteSmoke();
$table->setBorder(new BorderInfo(BorderSide::$Box, 1.0, $darkSlateGrayColor));
$table->setDefaultCellBorder(new BorderInfo(BorderSide::$Box, 0.5, $blackColor));
$table->getMargin()->setBottom(10);
$table->getDefaultCellTextState()->setFont($fontRepository->findFont("Helvetica"));
$headerRow = $table->getRows()->add();
$headerRowCell = $headerRow->getCells()->add("Sale de la ciudad");
$headerRowCell->setBackgroundColor($grayColor);
$headerRowCell->getDefaultCellTextState()->setForegroundColor($whiteSmokeColor);
$headerRowCell = $headerRow->getCells()->add("Sale de la isla");
$headerRowCell->setBackgroundColor($grayColor);
$headerRowCell->getDefaultCellTextState()->setForegroundColor($whiteSmokeColor);
$timenow = new DateTime('06:00');
for ($i = 0; $i < 10; $i++) {
$dataRow = $table->getRows()->add();
$cell = $dataRow->getCells()->add($timenow->format('H:i'));
$timenow->add(new DateInterval('PT30M'));
$dataRow->getCells()->add($timenow->format('H:i'));
}
$page->getParagraphs()->add($table);
$document->save($outputFile);