格式化 PDF 文档
获取文档窗口和页面显示属性
本主题帮助您了解如何获取文档窗口的属性、查看器应用程序以及页面的显示方式。
要设置这些不同的属性,请使用 Document 类打开 PDF 文件。您现在可以获得 Document 对象的方法,例如:
-
isCenterWindow – 在屏幕上居中文档窗口。默认值:false。
-
setDirection – 阅读顺序。 这决定了页面在并排显示时的布局方式。默认:从左到右。
-
isDisplayDocTitle – 在文档窗口标题栏中显示文档标题。默认:false(显示标题)。
-
isHideMenubar – 获取标志,指定当文档处于活动状态时是否应隐藏菜单栏。
-
isHideToolBar – 获取标志,指定当文档处于活动状态时是否应隐藏工具栏。
-
isHideWindowUI – 获取标志,指定当文档处于活动状态时是否应隐藏用户界面元素。
-
getNonFullScreenPageMode – 获取页面模式,指定在退出全屏模式时如何显示文档。- getPageLayout – 页面布局。
-
getPageMode – 获取页面模式,指定文档打开时的显示方式。
以下代码片段向您展示如何使用 Document 类获取属性。
// 打开文档
$document = new Document($inputFile);
// 获取不同的文档属性
// 文档窗口的位置 - 默认值:false
$responseData = "CenterWindow : " . $document->isCenterWindow();
// 主要阅读顺序;确定页面的位置
// 并排显示时 - 默认值:L2R
$responseData = $responseData . "Direction : " . $document->getDirection();
// 窗口的标题栏是否应显示文档标题。
// 如果为 false,标题栏显示 PDF 文件名 - 默认值:false
$responseData = $responseData . "DisplayDocTitle : " . $document->isDisplayDocTitle();
// 是否调整文档窗口的大小以适应
// 第一个显示页面的大小 - 默认值:false
$responseData = $responseData . "FitWindow : " . $document->isFitWindow();
// 是否隐藏查看器应用程序的菜单栏 - 默认值:false
$responseData = $responseData . "HideMenuBar :" . $document->isHideMenubar();
// 是否隐藏查看器应用程序的工具栏 - 默认值:false
$responseData = $responseData . "HideToolBar :" . $document->isHideToolBar();
// 是否隐藏 UI 元素如滚动条
// 只显示页面内容 - 默认值:false
$responseData = $responseData . "HideWindowUI :" . $document->isHideWindowUI();
// 文档的页面模式。退出全屏模式时如何显示文档。
$responseData = $responseData . "NonFullScreenPageMode :" . $document->getNonFullScreenPageMode();
// 页面布局,即单页、一列
$responseData = $responseData . "PageLayout :" . $document->getPageLayout();
// 文档打开时的显示方式。
$responseData = $responseData . "Page Mode :" . $document->getPageMode();
$document->close();
设置文档窗口和页面显示属性
本主题解释如何设置文档窗口、查看器应用程序和页面显示的属性。
要设置这些不同的属性:
- 使用 Document 类打开 PDF 文件。
- 设置 Document 对象的属性。
- 使用 Save 方法保存更新后的 PDF 文件。
可用的方法有:
以下代码片段展示了如何使用 Document 类设置属性。
// 打开文档
$document = new Document($inputFile);
// 设置不同的文档属性
// 指定文档窗口的位置 - 默认: false
$document->setCenterWindow(true);
// 主要阅读顺序;确定页面的位置
// 当并排显示时 - 默认: L2R
$document->setDirection(Direction::$R2L);
// 指定窗口的标题栏是否应显示文档标题
// 如果为false,标题栏显示PDF文件名 - 默认: false
$document->setDisplayDocTitle(true);
// 指定是否调整文档窗口的大小以适应
// 首次显示的页面大小 - 默认: false
$document->setFitWindow(true);
// 指定是否隐藏查看器应用程序的菜单栏 - 默认:
// false
$document->setHideMenubar(true);
// 指定是否隐藏查看器应用程序的工具栏 - 默认:
// false
$document->setHideToolBar(true);
// 指定是否隐藏UI元素如滚动条
// 仅显示页面内容 - 默认: false
$document->setHideWindowUI(true);
// 文档的页面模式。指定如何显示文档在退出
// 全屏模式时。
$document->setNonFullScreenPageMode(PageMode::$UseOC);
// 指定页面布局,即单页,一列
$document->setPageLayout(PageLayout::$TwoColumnLeft);
// 指定文档打开时应如何显示
// 即显示缩略图,全屏,显示附件面板
$document->setPageMode(PageMode::$UseThumbs);
// 保存更新的PDF文件
$document->save($outputFile);
$document->close();
在现有 PDF 文件中嵌入字体
PDF 阅读器支持14 种核心字体,以便文件可以在任何平台上以相同的方式显示。当 PDF 包含超出核心字体的字体时,嵌入字体以避免字体替换。
Aspose.PDF for PHP via Java 支持在现有 PDF 文档中嵌入字体。您可以嵌入完整字体或子集。要嵌入字体:
- 使用 Document 类打开现有的 PDF 文件。
- 使用 com.aspose.pdf.Font 类嵌入字体。
- setEmbedded(true) 方法嵌入完整字体。
- isSubset(true) 方法 嵌入字体的子集。
字体子集仅嵌入使用到的字符,适用于字体用于短句或口号的情况,例如,公司字体用于标志而不是正文时。 使用子集可以减少输出 PDF 的文件大小。
然而,如果正文文本使用自定义字体,则将其全部嵌入。
以下代码片段显示了如何在 PDF 文件中嵌入字体。
// 打开文档
$document = new Document($inputFile);
$pages = $document->getPages();
for ($i = 1; $i <= $pages->size(); $i++) {
$page = $pages->get_Item($i);
$fonts = $page->getResources()->getFonts();
if (!is_null($fonts)) {
for ($fontIndex = 1; $fontIndex <= $fonts->size(); $fontIndex++) {
$pageFont = $fonts->get_Item($fontIndex);
// 检查字体是否已经嵌入
if (!$pageFont->isEmbedded())
$pageFont->setEmbedded(true);
}
}
$forms = $page->getResources()->getForms();
// 检查表单对象
for ($formIndex = 0; $formIndex < -$forms->size(); $formIndex++) {
$formFonts = $forms->get_Item($formIndex)->getResources()->getFonts();
if (!is_null($formFonts)) {
for ($fontIndex = 1; $fontIndex <= $formFonts->size(); $fontIndex++) {
$pageFont = $formFonts->get_Item($fontIndex);
// 检查字体是否已经嵌入
if (!$pageFont->isEmbedded())
$pageFont->setEmbedded(true);
}
}
}
$responseData = "Ok";
}
// 保存更新后的 PDF 文件
$document->save($outputFile);
$document->close();
创建PDF时嵌入字体
如果需要使用Adobe Reader支持的14种核心字体以外的任何字体,那么在生成PDF文件时必须嵌入字体描述。如果字体信息没有嵌入,Adobe Reader会从操作系统中获取它(如果系统中安装了该字体),或者根据PDF中的字体描述构造一个替代字体。请注意,嵌入的字体必须安装在主机上,即在以下代码中‘Univers Condensed’字体已安装在系统上。
我们使用Font类的setEmbedded属性将字体信息嵌入到PDF文件中。将此属性的值设置为‘true’将会把完整的字体文件嵌入到PDF中,需注意这会增加PDF文件的大小。以下是可用于将字体信息嵌入PDF的代码片段。
// 通过调用其空构造函数实例化PDF对象
$document = new Document();
// 在Pdf对象中创建一个部分
$page = $document->getPages()->add();
$fragment = new TextFragment("");
$segment = new TextSegment("This is a sample text using Custom font.");
$fontRepository = new FontRepository();
$ts = new TextState();
$ts->setFont($fontRepository->findFont("Univers Condensed"));
$ts->getFont()->setEmbedded(true);
$segment->setTextState($ts);
$fragment->getSegments()->add($segment);
$page->getParagraphs()->add($fragment);
// 保存更新的PDF文件
$document->save($outputFile);
$document->close();
设置默认字体名称保存 PDF
当 PDF 文档包含的字体在文档本身和设备上都不可用时,API 会用默认字体替换这些字体。当字体可用时(即安装在设备上或嵌入到文档中),输出 PDF 应该使用相同的字体(不应替换为默认字体)。默认字体的值应包含字体的名称(而不是字体文件的路径)。我们实现了一个功能,可以在将文档保存为 PDF 时设置默认字体名称。以下代码片段可以用来设置默认字体:
// 加载现有的 PDF 文档
$document = new Document($inputFile);
$newName = "Arial";
// 初始化 PDF 格式的保存选项
$ops = new PdfSaveOptions();
// 设置默认字体名称
$ops->setDefaultFontName($newName);
// 保存 PDF 文件
$document->save($outputFile, $ops);
// 保存更新后的 PDF 文件
$document->close();
从 PDF 文档中获取所有字体
如果您想从 PDF 文档中获取所有字体,可以使用 Document 类中提供的 Document.getFontUtilities().getAllFonts() 方法。 请检查以下代码片段以获取现有 PDF 文档中的所有字体:
// 加载现有的 PDF 文档
$document = new Document($inputFile);
// 从文档中获取所有字体
$fonts = $document->getFontUtilities()->getAllFonts();
foreach ($fonts as $font) {
$responseData = $responseData . $f->getFontName() . PHP_EOL;
}
// 保存更新后的 PDF 文件
$document->close();
获取设置 PDF 文件的缩放因子
有时,你可能想设置或获取 PDF 文档的缩放因子。你可以使用 Aspose.PDF 轻松完成此需求。
GoToAction 对象允许你获取与 PDF 文件关联的缩放值。同样,它也可以用于设置文件的缩放因子。
// 加载现有的 PDF 文档
$document = new Document($inputFile);
// 创建 GoToAction 对象
$action = $document->getOpenAction();
// 获取 PDF 文件的缩放因子
$responseData = $action->getDestination()->getZoom();
// 保存更新后的 PDF 文件
$document->close();
以下代码片段显示了如何获取 PDF 文件的缩放因子。
// 加载现有的 PDF 文档
$document = new Document($inputFile);
$zoom = 0.5;
// 设置文档的缩放因子
$page = $document->getPages()->get_Item(1);
$actionzoom = new GoToAction(
new XYZExplicitDestination($page, $page->getMediaBox()->getWidth(), $page->getMediaBox()->getHeight(), $zoom)
);
// 设置操作以适应页面宽度缩放
$actionFitToWidth = new GoToAction(
new FitHExplicitDestination($page, $page->getMediaBox()->getWidth())
);
// 设置操作以适应页面高度缩放
$actionFittoHeight = new GoToAction(
new FitVExplicitDestination($page, $page->getMediaBox()->getHeight())
);
$document->setOpenAction($actionzoom);
$document->setOpenAction($actionFittoWidth);
$document->setOpenAction($actionFittoHeight);
// 保存更新的 PDF 文件
$document->save($outputFile);
$document->close();