描述
可对 PDF 文档进行管理,包括合并和删除页面、设置文档打开方式以及创建或更改文档安全性设置。
讨论
PDFDocumentOpen 和 PDFDocumentCreate 是用于对 PDFDocument 对象进行引用的两个函数。
创建新 PDF 文件的一个常见情况是用于创建地图册。一般步骤包括创建新 PDFDocument 对象、从现有 PDF 文件追加内容以及将 PDFDocument 对象保存到磁盘。另一个最常见情形是修改现有 PDF 文件内容或属性。一旦引用了 PDFDocument,可执行 appendPages、insertPages、deletePages,还可使用 updateDocProperties 和 updateDocSecurity 方法修改 PDF 文件设置。
在仅替换发生更改的页面时,deletePages 方法会十分有用。处理大量页面会耗费很长时间。如果更改的页面相对较少,那么仅删除这些页面,然后再使用 insertPages 方法插入刚刚更新的页面会比较省时。
目前,使用 Python 设置文档的 PDF 安全性时,将限定为 RC4 加密。如果在 ArcGIS Pro 中设置 PDF 安全性,则将限定为 AES 256-bit 加密。这意味着如果您使用 Python 管理 PDF 文档,则将被限定为只能处理不具安全性或仅使用 RC4 加密的 PDF 文档。
属性
属性 | 说明 | 数据类型 |
pageCount (只读) | 返回一个整型,该整型表示 PDF 文档的总页数。 | Long |
方法概述
方法 | 说明 |
appendPages (pdf_path, {input_pdf_password}) | 将一个 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}) | 提供用于对 PDF 文件设置密码、加密和安全性限制的机制。 |
方法
appendPages (pdf_path, {input_pdf_password})
参数 | 说明 | 数据类型 |
pdf_path | 包含要附加的输入 PDF 文档位置和名称的字符串。 | String |
input_pdf_password | 用于定义受保护文件的主密码的字符串。必须为主密码;用户密码将不起作用。 (默认值为 None) | String |
附加受保护的 PDF 文档(即每一个文档都有不同的安全性设置)时,输出设置将取决于要附加页面的主文档。例如,如果被附加的文档未保存密码信息,但是附加的页面保存了密码信息,则生成的文档没有保存的密码信息。
要将页面添加到当前 PDF 的开头处,请使用 insertPages。
deletePages (page_range)
参数 | 说明 | 数据类型 |
page_range | 用于定义要删除的一个或多个页面的字符串。通过将单个值以字符串的形式进行传递,删除单个页面(例如,"3")。可在每个值之间使用逗号来删除多个页面(例如,"3, 5, 7")。还可以应用范围(例如,"1, 3, 5-12")。 | String |
因为每次删除页面后,内置的 PDF 页码会自动调整,所以跟踪删除的页面十分重要。例如,把第 1 页或第 2 页删除后,第 3 页将立即成为第 2 页。如果删除第 1 页和第 2 页,则第 3 页将成为第 1 页。在使用 deletePages 后立即使用 insertPages 和一个 before_page_number 值时,您需要考虑这个问题。
insertPages (pdf_path, {before_page_number}, {input_pdf_password})
参数 | 说明 | 数据类型 |
pdf_path | 包含要插入的输入 PDF 文档位置和名称的字符串。 | String |
before_page_number | 用于在当前引用的 PDFDocument 中定义将在其前面插入新页面的页码的整数。例如,如果 before_page_value 为 1,则插入的页面将在所有页面的前面插入。 (默认值为 1) | Integer |
input_pdf_password | 用于定义受保护文件的主密码的字符串。必须为主密码;用户密码将不起作用。 (默认值为 None) | String |
插入具有不同安全性设置的受保护 PDF 文档时,输出设置将取决于要插入页面的主文档。例如,如果被插入的页面未保存密码信息,但是插入的页面保存了密码信息,则生成的文档没有保存的密码信息。
要将页面添加到当前 PDF 的结尾处,请使用 appendPages。
saveAndClose ()
saveAndClose 方法必须用于要保留的更改。如果在执行 saveAndClose 前就已存在脚本,则不会保存更改。如果使用 PDFDocumentCreate 创建新文件,那么在运行 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})
参数 | 说明 | 数据类型 |
new_master_password | 用于定义主文档密码的字符串。向受保护 PDF 附加和插入页面时需要此密码。 | String |
new_user_password | 用于定义打开 PDF 文档进行查看时所需的用户密码的字符串。 (默认值为 None) | String |
encryption | 用于定义 PDF 中使用的加密方法的字符串。这是支持的唯一加密类型。
(默认值为 RC4) | String |
可通过将 new_master_password 和 new_user_password 属性设置为空字符串,移除受保护 PDF 文档的密码。
代码示例
此脚本将创建新 PDF 文档、追加三个独立 PDF 文档的内容并保存生成的 PDF 文件。
import arcpy, os
#Set file name and remove if it already exists
pdfPath = r"C:\Projects\YosemiteNP\AttractionsMapBook.pdf"
if os.path.exists(pdfPath):
os.remove(pdfPath)
#Create the file and append pages
pdfDoc = arcpy.mp.PDFDocumentCreate(pdfPath)
pdfDoc.appendPages(r"C:\Projects\YosemiteNP\Title.pdf")
pdfDoc.appendPages(r"C:\Projects\YosemiteNP\MapPages.pdf")
pdfDoc.appendPages(r"C:\Projects\YosemiteNP\ContactInfo.pdf")
#Commit changes and delete variable reference
pdfDoc.saveAndClose()
del pdfDoc
以下脚本修改 PDF 文档元数据属性并且设置文档以何种样式打开。
import arcpy
pdfDoc = arcpy.mp.PDFDocumentOpen(r"C:\Projects\YosemiteNP\AttractionsMapBook.pdf")
pdfDoc.updateDocProperties(pdf_title="Yosemite Main Attrations Map Book",
pdf_author="Esri",
pdf_subject="Main Attractions Map Book",
pdf_keywords="Yosemite; Map Books; Attractions",
pdf_open_view="USE_THUMBS",
pdf_layout="SINGLE_PAGE")
pdfDoc.saveAndClose()
del pdfDoc
以下脚本将设置 user_password 和 master_password,使用 RC4 压缩方法对 PDF 进行加密并且在打开文档时需要提供密码。确保已阅读上述类描述中的受保护 PDF 限制。
import arcpy
pdfDoc = arcpy.mp.PDFDocumentOpen(r"C:\Projects\YosemiteNP\AttractionsMapBook.pdf")
pdfDoc.updateDocSecurity("master", "user", "RC4", "OPEN")
pdfDoc.saveAndClose()
del pdfDoc
以下脚本将使用 deletePages 然后使用 insertPages 替换现有 PDF 中的四页内容。请注意在当前显示的第 3 页的页面前插入新第 3 页的方法,在最初的第 3 页移除之前,现在的第 3 页其实是第 4 页。在 5-7 页中同样应用了该方法。确保已阅读上述类描述中的受保护 PDF 限制。
import arcpy
pdfDoc = arcpy.mp.PDFDocumentOpen(r"C:\Projects\YosemiteNP\AttractionsMapBook.pdf", "master")
pdfDoc.deletePages("3, 5-7")
pdfDoc.insertPages(r"C:\Projects\Yosemite\NewPage3.pdf", 3, "master")
pdfDoc.insertPages(r"C:\Projects\Yosemite\NewPages5-7.pdf", 5, "master")
pdfDoc.saveAndClose()
del pdfDoc