创建一个复杂的PDF

Contents
[ ]

Hello, World 示例展示了使用 Aspose.PDF 创建 PDF 文档的简单步骤。在本文中,我们将了解如何使用 Aspose.PDF for PHP via Java 创建更复杂的文档。作为一个示例,我们将使用一家虚构的提供客运渡轮服务的公司的文档。

如果我们从头开始创建一个文档,我们需要遵循以下步骤:

  1. 实例化一个 Document 对象。在这一步中,我们将创建一个带有一些元数据但没有页面的空PDF文档。

  2. 向文档对象添加一个页面。现在,我们的文档将有一页。

  3. 添加一个图像。这是一种基于PDF操作符的低级操作的复杂操作。

    • 从流中加载图像
    • 将图像添加到页面资源的图像集合中
    • 使用GSave操作符:此操作符保存当前图形状态。
    • 创建一个矩阵对象。
    • 使用ConcatenateMatrix操作符:定义图像的放置方式。
    • 使用Do操作符:此操作符绘制图像。
    • 使用GRestore操作符:此操作符恢复图形状态。
  4. 为标题创建一个文本片段。对于标题,我们将使用Arial字体,字体大小为24pt,并居中对齐。

  5. 为页面添加标题 段落.

  6. 为描述创建一个 TextFragment。对于描述,我们将使用 Arial 字体,字体大小 24pt,居中对齐。

  7. 将(描述)添加到页面段落。

  8. 创建一个表格,添加表格属性。

  9. 将(表格)添加到页面 段落.

  10. 保存文档 “Complex.pdf”.


    $document = new Document();
    //添加页面
    $page = $document->getPages()->add();
    // -------------------------------------------------------------
    // 添加图像
    $imageFileName = $dataDir . DIRECTORY_SEPARATOR . 'logo.png';
    $page->AddImage($imageFileName, new Rectangle(20, 730, 120, 830));

    // -------------------------------------------------------------
    // 添加标题
    $fontRepository = new FontRepository();
    $fontArial = $fontRepository->findFont("Arial");

    $header = new TextFragment("New ferry routes in Fall 2020");
    $header->getTextState()->setFont($fontArial);
    $header->getTextState()->setFontSize(24);
    $header->setHorizontalAlignment(2);
    $header->setPosition(new Position(130, 720));
    $page->getParagraphs()->add($header);

    // 添加描述
    $descriptionText = "Visitors must buy tickets online and tickets are limited to 5,000 per day. Ferry service is operating at half capacity and on a reduced schedule. Expect lineups.";
    $description = new TextFragment($descriptionText);
    $description->getTextState()->setFont($fontRepository->findFont("Times New Roman"));
    $description->getTextState()->setFontSize(14);
    $header->setHorizontalAlignment(1);
    $page->getParagraphs()->add($description);

    // 添加表格
    $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("Departs City");
    $headerRowCell->setBackgroundColor($grayColor);
    $headerRowCell->getDefaultCellTextState()->setForegroundColor($whiteSmokeColor);

    $headerRowCell = $headerRow->getCells()->add("Departs Island");
    $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);