Creando un PDF complejo

Contents
[ ]

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:

  1. Instanciar un objeto Document. En este paso crearemos un documento PDF vacío con algunos metadatos pero sin páginas.

  2. Añadir una Página al objeto documento. Así, ahora nuestro documento tendrá una página.

  3. 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.
  4. Crear un FragmentoDeTexto para el encabezado. Para el encabezado usaremos la fuente Arial con tamaño de fuente 24pt y alineación centrada.

  5. Agregar encabezado a la página Párrafos.

  6. 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.

  7. Agregar (descripción) a los Párrafos de la página.

  8. Crear una tabla, agregar propiedades de la tabla.

  9. Agregar (tabla) a los Párrafos de la página.

  10. 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);