摘要
可对 PDF 文档进行操作,包括合并页面、删除页面、设置文档打开方式、添加文件附件以及创建或更改文档安全性设置。
讨论
PDFDocumentOpen 和 PDFDocumentCreate 是用于对 PDFDocument 对象进行引用的两个函数。
使用 appendPages、insertPages 或 attachFile 方法时,需要传递一个表示现有 PDF 文件路径的字符串。如果传递了 PDFDocument 对象,则该方法将失效。同时,所有要追加、插入或附加的文档必须具有相同的 PDF 安全性。例如,如果要将三个文档追加到一个多页面 PDF 中,并且仅第一个文档具有密码保护,那么在使用 appendPages 之前,必须同样为其余两个文档设置该密码。
在仅替换发生更改的页面时,deletePages 方法会十分有用。处理大量页面会耗费很长时间。如果更改的页面相对较少,那么仅删除这些页面,然后再使用 insertPages 方法插入刚刚更新的页面会比较省时。
有关如何创建地图册的详细说明,请参阅使用 ArcGIS 构建地图册帮助主题。
语法
PDFDocument (pdf_path)
参数 | 说明 | 数据类型 |
pdf_path | 调用 saveAndClose 方法时,用于指定生成的 PDF 文件的路径和文件名的字符串。 | String |
PDFDocumentCreate 函数接收路径以确定新创建的 PDF 文件的保存位置和文件名。尽管如此,如果不对 PDF 文件执行插入或追加页面以及保存等后续操作,仍不能生成 PDF 文件。PDFDocumentCreate 将返回脚本应执行和保存的 PDFDocument 对象。使用此函数的常见情况是创建 PDF 地图册。这些步骤通常包括从地图文档导出一定数量的独立 PDF 文件、创建新的 PDFDocument 对象、从已导出的 PDF 文件和其他文档追加内容以及保存最终的 PDF 地图册。
请注意,既不可能创建空白 PDF 文件,PDFDocumentCreate 函数也不可能将任何空白页添加到文档内容中。要使 saveAndClose 方法能够成功创建文件,必须使用 appendPages 或 insertPages 方法将内容添加到 PDFDocument 对象中。
有关如何创建地图册的详细说明,请参阅使用 ArcGIS 构建地图册帮助主题。
PDFDocumentCreate 示例
此脚本将创建新 PDF 文档、追加来自三个独立 PDF 文档的内容并保存生成的 PDF 文件。
import arcpy, os
#Set file name and remove if it already exists
pdfPath = r"C:\Project\ParcelAtlasMapBook.pdf"
if os.path.exists(pdfPath):
os.remove(pdfPath)
#Create the file and append pages
pdfDoc = arcpy.mapping.PDFDocumentCreate(pdfPath)
pdfDoc.appendPages(r"C:\Project\Title.pdf")
pdfDoc.appendPages(r"C:\Project\ParcelAtlas.pdf")
pdfDoc.appendPages(r"C:\Project\ContactInfo.pdf")
#Commit changes and delete variable reference
pdfDoc.saveAndClose()
del pdfDoc
属性
属性 | 说明 | 数据类型 |
pageCount (只读) | 返回一个整型,该整型表示 PDF 文档的总页数 | Long |
方法概述
方法 | 说明 |
appendPages (pdf_path, {input_pdf_password}) | 将一个 PDF 文档附加在另一文档结尾 |
attachFile (file_path, {description}) | 将文件附加到现有 PDF 文档(当在 PDF 查看器应用程序中打开 PDF 文件后,用户可以访问附件。) |
deletePages (page_range) | 用于删除现有 PDF 文档内一个或多个页面。 |
insertPages (pdf_path, {before_page_number}, {input_pdf_password}) | 可将一个 PDF 文档的内容插入到另一 PDF 文档开头处或页面之间。 |
saveAndClose () | 保存对当前引用的 PDFDocument 所做的任何更改。 |
updateDocProperties ({pdf_title}, {pdf_author}, {pdf_subject}, {pdf_keywords}, {pdf_open_view}, {pdf_layout}) | 允许您更新 PDF 文档元数据并且还可以设置某些行为,当在 Adobe Reader 或 Adobe Acrobat 中打开文档时这些行为将触发如初始视图模式和页面缩略图视图等模式 |
updateDocSecurity (new_master_password, {new_user_password}, {encryption}, {permissions}) | 提供用于对 PDF 文件设置密码、加密和安全性限制的机制。 |
方法
appendPages (pdf_path, {input_pdf_password})
参数 | 说明 | 数据类型 |
pdf_path | 包含要附加的输入 PDF 文档位置和名称的字符串 | String |
input_pdf_password | 用于定义受保护文件的主密码的字符串 (默认值为 None) | String |
附加受保护的 PDF 文档(即每一个文档都有不同的安全性设置)时,输出设置将取决于要附加页面的主文档。例如,如果被附加的文档未保存密码信息,但是附加的页面保存了密码信息,则生成的文档没有保存的密码信息。
attachFile (file_path, {description})
参数 | 说明 | 数据类型 |
file_path | 包含要附加到 PDF 文档的文件的位置和名称的字符串。 | String |
description | 要用作附件描述的可选字符串。在 PDF 查看器应用程序中查看附件时,用户将看到此字符串。 | String |
可以使用 attachFile 方法将任何类型的文件附加到 PDF 文档。
deletePages (page_range)
参数 | 说明 | 数据类型 |
page_range | 用于定义要删除的一个或多个页面的字符串。通过将单个值以字符串的形式进行传递,删除单个页面(例如,"3")。可在每个值之间使用逗号来删除多个页面(例如,"3, 5, 7")。还可以应用范围(例如,"1, 3, 5-12")。 | String |
因为每次删除页面后,内置的 PDF 页码会自动调整,所以跟踪删除的页面十分重要。例如,把第 1 页或第 2 页删除后,第 3 页将立即成为第 2 页。如果删除第 1 页和第 2 页,则第 3 页将成为第 1 页。如果使用 deletePages,然后立即使用 appendPages 或 insertPages,则需要考虑这一点。
insertPages (pdf_path, {before_page_number}, {input_pdf_password})
参数 | 说明 | 数据类型 |
pdf_path | 包含要插入的输入 PDF 文档位置和名称的字符串。 | String |
before_page_number | 用于在当前引用的 PDFDocument 中定义将在其前面插入新页面的页码的整数。例如,如果 before_page_value 为 1,则插入的页面将在所有页面的前面插入。 (默认值为 1) | String |
input_pdf_password | 用于定义受保护文件的主密码的字符串。 (默认值为 None) | String |
要将页面添加到当前 PDF 文档的结尾处,请使用 appendPages。
插入具有不同安全性设置的受保护 PDF 文档时,输出设置将取决于页面要插入的主文档。例如,如果被插入的文档未保存密码信息,但是插入的页面保存了密码信息,则生成的文档没有保存的密码信息。
saveAndClose ()
saveAndClose 方法必须用于要保留的更改。如果在执行 saveAndClose 前就已存在脚本,则不会保存更改。
updateDocProperties ({pdf_title}, {pdf_author}, {pdf_subject}, {pdf_keywords}, {pdf_open_view}, {pdf_layout})
参数 | 说明 | 数据类型 |
pdf_title | 用于定义文档标题(PDF 元数据属性)的字符串。 (默认值为 None) | String |
pdf_author | 用于定义文档创作者(PDF 元数据属性)的字符串。 (默认值为 None) | String |
pdf_subject | 用于定义文档主题(PDF 元数据属性)的字符串。 (默认值为 None) | String |
pdf_keywords | 用于定义文档关键字(PDF 元数据属性)的字符串。 (默认值为 None) | String |
pdf_open_view | 用于定义查看 PDF 文件时要触发的行为的字符串或数字。默认值为 USETHUMBS,即在打开 PDF 时自动显示 Adobe Reader“页面”面板。
(默认值为 USE_THUMBS) | String |
pdf_layout | 用于定义查看 PDF 文件时要触发的初始视图模式的字符串或数字。
(默认值为 SINGLE_PAGE) | String |
FULL_SCREEN 的 pdf_open 设置将在打开 PDF 文档时提示您关于全屏模式的警告。将 pdf_open 设置为其他选项不会清除此设置,除非将 pdf_open 设置为 USE_NONE。
updateDocSecurity (new_master_password, {new_user_password}, {encryption}, {permissions})
参数 | 说明 | 数据类型 |
new_master_password | 用于定义主文档密码的字符串。向受保护 PDF 附加和插入页面时需要此密码。 | String |
new_user_password | 用于定义打开 PDF 文档进行查看时所需的用户密码的字符串。 (默认值为 None) | String |
encryption | 用于定义 PDF 中使用的加密方法的字符串。
(默认值为 RC4) | String |
permissions | 用于定义受文档安全性设置限制的功能的字符串。权限参数可以接受用于描述要限制的所有选项的字符串列表。可以在 Adobe Acrobat 的文档属性文档限制摘要页面中查看文档限制。
(默认值为 ALL) | String |
可通过将 new_master_password 和 new_user_password 属性设置为空字符串,以便轻松删除受保护 PDF 文档的密码。
代码示例
PDFDocument 示例 1
此脚本将创建新的 PDF 文档、追加两个独立 PDF 文档中的内容并保存生成的 PDF 文件。
import arcpy, os
#Set file name and remove if it already exists
pdfPath = r"C:\Project\ParcelAtlasMapBook.pdf"
if os.path.exists(pdfPath):
os.remove(pdfPath)
#Create the file and append pages
pdfDoc = arcpy.mapping.PDFDocumentCreate(pdfPath)
pdfDoc.appendPages(r"C:\Project\Title.pdf")
pdfDoc.appendPages(r"C:\Project\ParcelAtlas.pdf")
#Commit changes and delete variable reference
pdfDoc.saveAndClose()
del pdfDoc
PDFDocument 示例 2
以下脚本修改了示例 1 中所创建的 PDF 文档的元数据属性,并对文档的打开样式进行了设置。
import arcpy
pdfDoc = arcpy.mapping.PDFDocumentOpen(r"C:\Project\ParcelAtlasMapBook.pdf")
pdfDoc.updateDocProperties(pdf_title="Atlas Map",
pdf_author="Author",
pdf_subject="Map Book",
pdf_keywords="Atlas; Map Books",
pdf_open_view="USE_THUMBS",
pdf_layout="SINGLE_PAGE")
pdfDoc.saveAndClose()
del pdfDoc
PDFDocument 示例 3
以下脚本将用户密码设置为 esri,使用 RC4 压缩方法对 PDF 进行加密并且在打开文档时需要提供密码。
import arcpy
pdfDoc = arcpy.mapping.PDFDocumentOpen(r"C:\Project\ParcelAtlasMapBook.pdf")
pdfDoc.updateDocSecurity("master", "user", "RC4", "OPEN")
pdfDoc.saveAndClose()
del pdfDoc
PDFDocument 示例 4
以下脚本将在现有多页文档的结尾追加最后一页内容。对受保护的 PDF 文档进行这种更改时需要提供主密码。
import arcpy
pdfDoc = arcpy.mapping.PDFDocumentOpen(r"C:\Project\ParcelAtlasMapBook.pdf", "master")
pdfDoc.appendPages(r"C:\Project\ContactInfo.pdf")
pdfDoc.saveAndClose()
del pdfDoc
PDFDocument 示例 5
以下脚本将使用 deletePages 然后使用 insertPages 替换现有 PDF 中的四页内容。请注意在现在显示为第 3 页的页面前插入新第 3 页的方法,在最初的第 3 页移除之前,现在的第 3 页其实是第 4 页。在 5-7 页中同样应用了该方法。
import arcpy
pdfDoc = arcpy.mapping.PDFDocumentOpen(r"C:\Project\ParcelAtlasMapBook.pdf", "master")
pdfDoc.deletePages("3, 5-7")
pdfDoc.insertPages(r"C:\Project\NewPage3.pdf", 3, "master")
pdfDoc.insertPages(r"C:\Project\NewPages5-7.pdf", 5, "master")
pdfDoc.saveAndClose()
del pdfDoc