使用Python格式化PDF文档

格式化 PDF 文档

获取文档窗口和页面显示属性

本主题帮助您了解如何获取文档窗口、查看器应用程序的属性,以及页面如何显示。要设置这些属性:

使用 Document 类打开 PDF 文件。现在,您可以设置 Document 对象的属性,例如

  • CenterWindow – 将文档窗口置于屏幕中央。默认值:false。
  • Direction – 阅读顺序。这决定了页面并排显示时的布局方式。默认值:从左到右。
  • DisplayDocTitle – 在文档窗口标题栏中显示文档标题。默认值:false(显示标题)。
  • HideMenuBar – 隐藏或显示文档窗口的菜单栏。默认值:false(显示菜单栏)。
  • HideToolBar – 隐藏或显示文档窗口的工具栏。默认值:false(显示工具栏)。
  • HideWindowUI – 隐藏或显示文档窗口元素,如滚动条。 默认值:false(显示UI元素)。
  • NonFullScreenPageMode – 文档在非全屏模式下的显示方式。
  • PageLayout – 页面布局。
  • PageMode – 文档首次打开时的显示方式。选项包括显示缩略图、全屏、显示附件面板。

下面的代码片段展示了如何使用 Document 类获取属性。


    import aspose.pdf as ap

    # 打开文档
    document = ap.Document(input_pdf)

    # 获取不同的文档属性
    # 文档窗口的位置 - 默认值:false
    print("CenterWindow :", document.center_window)

    # 主要阅读顺序;决定页面的位置
    # 并排显示时 - 默认值:L2R
    print("Direction :", document.direction)

    # 窗口的标题栏是否应显示文档标题
    # 如果为false,则标题栏显示PDF文件名 - 默认值:false
    print("DisplayDocTitle :", document.display_doc_title)

    # 是否调整文档窗口的大小以适应
    # 首次显示的页面 - 默认值:false
    print("FitWindow :", document.fit_window)

    # 是否隐藏查看器应用程序的菜单栏 - 默认值:false
    print("HideMenuBar :", document.hide_menubar)

    # 是否隐藏查看器应用程序的工具栏 - 默认值:false
    print("HideToolBar :", document.hide_tool_bar)

    # 是否隐藏UI元素,如滚动条
    # 仅显示页面内容 - 默认值:false
    print("HideWindowUI :", document.hide_window_ui)

    # 文档的页面模式。退出全屏模式时如何显示文档。
    print("NonFullScreenPageMode :", document.non_full_screen_page_mode)

    # 页面布局,即单页,一列
    print("PageLayout :", document.page_layout)

    # 文档打开时的显示方式
    # 即显示缩略图、全屏、显示附件面板
    print("pageMode :", document.page_mode)

设置文档窗口和页面显示属性

本主题说明如何设置文档窗口、查看器应用程序和页面显示的属性。要设置这些不同的属性:

  1. 使用 Document 类打开 PDF 文件。
  2. 设置 Document 对象的属性。
  3. 使用保存方法保存更新的 PDF 文件。

可用的属性有:

  • CenterWindow
  • Direction
  • DisplayDocTitle
  • FitWindow
  • HideMenuBar
  • HideToolBar
  • HideWindowUI
  • NonFullScreenPageMode
  • PageLayout
  • PageMode

每个属性的使用和描述如下代码所示。以下代码片段演示了如何使用 Document 类设置属性。


    import aspose.pdf as ap

    # 打开文档
    document = ap.Document(input_pdf)

    # 设置不同的文档属性
    # 指定将文档窗口居中显示 - 默认: false
    document.center_window = True

    # 主要阅读顺序; 确定页面的位置
    # 当并排显示时 - 默认: L2R
    document.direction = ap.Direction.R2L

    # 指定窗口的标题栏是否应显示文档标题
    # 如果为 false,标题栏显示 PDF 文件名 - 默认: false
    document.display_doc_title = True

    # 指定是否调整文档窗口的大小以适应
    # 首次显示的页面 - 默认: false
    document.fit_window = True

    # 指定是否隐藏查看器应用程序的菜单栏 - 默认: false
    document.hide_menubar = True

    # 指定是否隐藏查看器应用程序的工具栏 - 默认: false
    document.hide_tool_bar = True

    # 指定是否隐藏 UI 元素,如滚动条
    # 仅显示页面内容 - 默认: false
    document.hide_window_ui = True

    # 文档的页面模式。指定在退出全屏模式时如何显示文档。
    document.non_full_screen_page_mode = ap.PageMode.USE_OC

    # 指定页面布局,即单页,一列
    document.page_layout = ap.PageLayout.TWO_COLUMN_LEFT

    # 指定打开文档时的显示方式
    # 即显示缩略图,全屏,显示附件面板
    document.page_mode = ap.PageMode.USE_THUMBS

    # 保存更新的 PDF 文件
    document.save(output_pdf)

嵌入标准Type 1字体

一些PDF文档具有来自特殊Adobe字体集的字体。来自此集合的字体称为“标准Type 1字体”。此集合包括14种字体,嵌入这种类型的字体需要使用特殊的标志,即embed_standard_fonts。以下是可以用于获取嵌入所有字体(包括标准Type 1字体)的文档的代码片段:


    import aspose.pdf as ap

    # 加载一个现有的PDF文档
    document = ap.Document(input_pdf)
    # 设置文档的EmbedStandardFonts属性
    document.embed_standard_fonts = True
    for page in document.pages:
        if page.resources.fonts != None:
            for page_font in page.resources.fonts:
                # 检查字体是否已经嵌入
                if not page_font.is_embedded:
                    page_font.is_embedded = True

    document.save(output_pdf)

在创建PDF时嵌入字体

如果您需要使用 Adobe Reader 支持的 14 种核心字体以外的任何字体,则必须在生成 PDF 文件时嵌入字体描述。如果字体信息没有嵌入,Adobe Reader 将从操作系统中获取(如果已经安装在系统上),或者根据 PDF 中的字体描述构建替代字体。

请注意,嵌入的字体必须安装在主机上,即在以下代码中,‘Univers Condensed’ 字体安装在系统上。

我们使用属性 ‘is_embedded’ 将字体信息嵌入到 PDF 文件中。将此属性的值设置为 ‘True’ 将把完整的字体文件嵌入到 PDF 中,虽然这会增加 PDF 文件的大小。以下是用于将字体信息嵌入 PDF 的代码片段。


    import aspose.pdf as ap

    # 通过调用其空构造函数实例化 Pdf 对象
    doc = ap.Document()

    # 在 Pdf 对象中创建一个部分
    page = doc.pages.add()

    fragment = ap.text.TextFragment("")
    segment = ap.text.TextSegment(" 这是使用自定义字体的示例文本。")
    ts = ap.text.TextState()
    ts.font = ap.text.FontRepository.find_font("Arial")
    ts.font.is_embedded = True
    segment.text_state = ts
    fragment.segments.append(segment)
    page.paragraphs.add(fragment)

    # 保存 PDF 文档
    doc.save(output_pdf)

保存 PDF 时设置默认字体名称

当 PDF 文档包含的字体在文档本身和设备上都不可用时,API 会将这些字体替换为默认字体。如果字体可用(安装在设备上或嵌入到文档中),输出的 PDF 应该具有相同的字体(不应被默认字体替换)。默认字体的值应包含字体的名称(而不是字体文件的路径)。我们实现了一个功能,可以在将文档保存为 PDF 时设置默认字体名称。以下代码片段可用于设置默认字体:


    import aspose.pdf as ap

    # 加载一个现有的缺少字体的 PDF 文档
    document = ap.Document(input_pdf)

    pdfSaveOptions = ap.PdfSaveOptions()
    # 指定默认字体名称
    newName = "Arial"
    pdfSaveOptions.default_font_name = newName
    document.save(output_pdf, pdfSaveOptions)

从 PDF 文档中获取所有字体

如果您想从 PDF 文档中获取所有字体,可以使用 font_utilities 方法,该方法在 Document 类中提供。 请查看以下代码片段以从现有的 PDF 文档中获取所有字体:


    import aspose.pdf as ap

    doc = ap.Document(input_pdf)
    fonts = doc.font_utilities.get_all_fonts()
    for font in fonts:
        print(font.font_name)

使用 FontSubsetStrategy 改进字体嵌入

以下代码片段显示了如何设置使用 font_utilities 属性的 FontSubsetStrategy


    import aspose.pdf as ap

    doc = ap.Document(input_pdf)
    # 在 SubsetAllFonts 的情况下,所有字体将作为子集嵌入到文档中。
    doc.font_utilities.subset_fonts(ap.FontSubsetStrategy.SUBSET_ALL_FONTS)
    # 字体子集将嵌入完全嵌入的字体,但未嵌入到文档中的字体将不受影响。
    doc.font_utilities.subset_fonts(ap.FontSubsetStrategy.SUBSET_EMBEDDED_FONTS_ONLY)
    doc.save(output_pdf)

获取和设置 PDF 文件的缩放因子

有时,你可能想要确定 PDF 文档当前的缩放因子是多少。使用 Aspose.Pdf,你可以找出当前值并设置一个新的值。

GoToAction 类的 Destination 属性允许你获取与 PDF 文件关联的缩放值。同样,它也可以用于设置文件的缩放因子。

设置缩放因子

以下代码片段展示了如何设置 PDF 文件的缩放因子。


    import aspose.pdf as ap

    # 实例化新的 Document 对象
    doc = ap.Document(input_pdf)

    action = ap.annotations.GoToAction(ap.annotations.XYZExplicitDestination(1, 0.0, 0.0, 0.5))
    doc.open_action = action
    # 保存文档
    doc.save(output_pdf)

获取缩放因子

以下代码片段展示了如何获取 PDF 文件的缩放因子。


    import aspose.pdf as ap

    # 实例化新的 Document 对象
    doc = ap.Document(input_pdf)

    # 创建 GoToAction 对象
    action = doc.open_action

    # 获取 PDF 文件的缩放因子
    print(action.destination.zoom)

设置打印对话框预设属性

Aspose.PDF 允许设置 PDF 文档的 DUPLEX_FLIP_LONG_EDGE 成员。它允许您更改 PDF 文档的 DuplexMode 属性,该属性默认设置为 simplex。这可以通过以下两种不同的方法实现。


    import aspose.pdf as ap

    doc = ap.Document()
    doc.pages.add()
    doc.duplex = ap.PrintDuplex.DUPLEX_FLIP_LONG_EDGE
    doc.save(output_pdf)

使用 PDF 内容编辑器设置打印对话框预设属性


    import aspose.pdf as ap

    ed = ap.facades.PdfContentEditor()
    ed.bind_pdf(input_pdf)
    if (ed.get_viewer_preference() & ap.facades.ViewerPreference.DUPLEX_FLIP_SHORT_EDGE) > 0:
        print("该文件具有双面翻转短边")

    ed.change_viewer_preference(ap.facades.ViewerPreference.DUPLEX_FLIP_SHORT_EDGE)
    ed.save(output_pdf)