如何使用 google docs API in python 在页眉中添加图像并使首页页眉和页脚与其他页面不同

how to add image in header and keep first page header and footer different from other pages using google docs API in python

感谢 Tanaike's solution,我能够在我的文档中添加页眉和页脚。唯一的问题是我想让第一页的页眉和页脚与其他页面不同。

我还想在我的页眉中添加多个小图像,但在页眉中使用 insertInlineImage 添加图像会引发错误。

我的工作代码:

file_id = ##
def insert_data(file_id):
    requests = []
    header_footer_req = []

    index = 0
    header_footer_req.append(add_header(index))
    header_footer_req.append(add_footer())
    header_footer_res = docs.documents().batchUpdate(documentId=file_id, body={'requests': header_footer_req}).execute()
    header_id = header_footer_res['replies'][0]['createHeader']['headerId']
    footer_id = header_footer_res['replies'][1]['createFooter']['footerId']
    requests.append(add_header_content(index, header_id))
    requests.append(add_footer_content(footer_id))
    
    docs.documents().batchUpdate(documentId=file_id, body={'requests': requests}).execute()    

def add_header(index):
    header = {
        "createHeader": {
            "sectionBreakLocation": {
                "index": index
            },
            "type": "DEFAULT"
        }
    }
    return header


def add_header_content(index, headerId):
    headerText = {
        "insertText": {
            "location": {
                "segmentId": headerId,
                "index": index,
            },
            "text": "sample text"
        }
    }
    return headerText


def add_footer():
    footer = {
        "createFooter": {
            "type": "DEFAULT"
        }
    }
    return footer


def add_footer_content(footer_id):
    footer_data = {
        "insertText": {
            "location": {
                "segmentId": footer_id,
                "index": 0
            },
            "text": "This is my footer"
        }
    }
    return footer_data

预期样本输出: 第 1 页:

其余页面:

请注意,两个页面的页脚不同,它们是右对齐的并且是彩色的。它的左侧也有页码。

我相信你的目标如下。

  • 您想为 Google 文档创建页眉和页脚。
    • I'll keep the header and footer in my document same for all the pages. 开始,您想对第一页和其他页面使用相同的页眉和页脚。
  • 对于页眉,您想在右侧插入一张图片。
  • 对于页脚,您想在右侧插入 2 个文本。
  • 您想使用 python 的 googleapis 实现此目的。

在这种情况下,下面的修改脚本怎么样?

修改后的脚本:

在本次修改中,请将您的insert_data函数修改如下。

def insert_data(file_id):
    requests = []
    header_footer_req = []

    index = 0
    header_footer_req.append(add_header(index))
    header_footer_req.append(add_footer())
    header_footer_res = docs.documents().batchUpdate(documentId=file_id, body={'requests': header_footer_req}).execute()
    header_id = header_footer_res['replies'][0]['createHeader']['headerId']
    footer_id = header_footer_res['replies'][1]['createFooter']['footerId']

    # Add header content
    requests += [
        {
            "insertInlineImage": {
                "location": {
                    "segmentId": header_id,
                    "index": 0
                },
                "uri": "https://Whosebug.design/assets/img/logos/so/logo-Whosebug.png", # This is a sample image.
                "objectSize": {
                    "width": {
                        "magnitude": 100,
                        "unit": "PT"
                    }
                }
            }
        },
        {
            "updateParagraphStyle": {
                "paragraphStyle": {
                    "alignment": "END"
                },
                "range": {
                    "segmentId": header_id,
                    "startIndex": 0,
                    "endIndex": 1
                },
                "fields": "alignment"
            }
        }
    ]

    # Add footer content.
    text = "This is my footer\nsample text"
    requests += [
        {
            "insertText": {
                "location": {
                    "segmentId": footer_id,
                    "index": 0
                },
                "text": text
            }
        },
        {
            "updateParagraphStyle": {
                "paragraphStyle": {
                    "alignment": "END"
                },
                "range": {
                    "segmentId": footer_id,
                    "startIndex": 0,
                    "endIndex": len(text)
                },
                "fields": "alignment"
            }
        }
    ]

    docs.documents().batchUpdate(documentId=file_id, body={'requests': requests}).execute()
  • 如果要内容左对齐,请修改ENDSTART

注:

  • 在此示例脚本中,当页眉和页脚已创建时,会出现 Default header already exists. 之类的错误。因为无法将页眉和页脚添加到具有页眉和页脚的文档中。请注意这一点。

参考文献: