Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 复制.docx文件的一部分(保留格式和图像)_Python_Python Docx - Fatal编程技术网

Python 复制.docx文件的一部分(保留格式和图像)

Python 复制.docx文件的一部分(保留格式和图像),python,python-docx,Python,Python Docx,你好,所以 我试图将.docx文件的一部分复制到另一个.docx文件中,同时使用python保留复制部分以及任何图像的格式 我尝试过PythonDocx,但找不到任何关于图像的内容。此处链接到我以前的qn: 我有没有办法复制文档的一部分,比如DocA,并将其插入DocB的结尾(包括图像和格式,基本上是干净的复制和粘贴情况) 非常感谢 编辑: 我使用以下代码在DocA中找到了包含图像的段落。我知道这是一种非常黑客的方式,因为我是python docx的完全初学者,但这里是: for x in do

你好,所以

我试图将.docx文件的一部分复制到另一个.docx文件中,同时使用python保留复制部分以及任何图像的格式

我尝试过PythonDocx,但找不到任何关于图像的内容。此处链接到我以前的qn:

我有没有办法复制文档的一部分,比如DocA,并将其插入DocB的结尾(包括图像和格式,基本上是干净的复制和粘贴情况)

非常感谢

编辑: 我使用以下代码在DocA中找到了包含图像的段落。我知道这是一种非常黑客的方式,因为我是python docx的完全初学者,但这里是:

for x in document.paragraphs:
    if "<w:pict" in x._p.xml:
        print(x._p.xml)
文件中x的
。段落:

如果“这可能不是你问题的直接答案,但值得考虑

如果您可以控制
docA
,您是否考虑过使用docx模板?在我的问题中,我需要从模板生成报告,因此我必须将python变量中的信息复制到文档中,以生成报告。我找到了此项目库,它可以:

最后,您可以这样替换变量中的内容:

from docxtpl import DocxTemplate

doc = DocxTemplate("my_word_template.docx")
context = { 'company_name' : "World company" }
doc.render(context)
doc.save("generated_doc.docx")
我没有检查,但我相信这确实保留了格式。下面是一个例子,说明了在替换变量之前我的模板是什么样子的:


检查此代码您可以在特定文本后识别图像的位置:

tags = []
for t in document.element.getiterator():
    if t.tag in ['{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r','{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t','{http://schemas.openxmlformats.org/wordprocessingml/2006/main}drawing']:
        if t.tag == '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}drawing':
            print('Picture Found')
        else:
            print(t.text)

检查此代码。您可以通过以下方式提取两个文本之间的图像位置和图像名称:

tags = []
text = []
for t in doc.element.getiterator():
    if t.tag in ['{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r', '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t','{http://schemas.openxmlformats.org/drawingml/2006/picture}cNvPr','{http://schemas.openxmlformats.org/wordprocessingml/2006/main}drawing']:
        if t.tag == '{http://schemas.openxmlformats.org/drawingml/2006/picture}cNvPr':
            print('Picture Found: ',t.attrib['name'])
            tags.append('Picture')
            text.append(t.attrib['name'])
        elif t.text:
            tags.append('text')
            text.append(t.text)
您可以从文本列表中检查上一个和下一个文本,并从标记列表中检查它们的标记

如果已提取图像位置和图像名称,则可以使用此代码将图像添加到docx文件中

from docx import Document
document = Document()

p = document.add_paragraph()
r = p.add_run()
r.add_text('Good Morning every body,This is my ')
r.add_picture('/tmp/foo.jpg')
r.add_text(' do you like it?')

document.save('demo.docx')
您可以通过解压docx文件来访问图像。解压时会得到不同的文件夹。您可以从
word/media
文件夹访问文件中的所有图像

检查此链接以解压缩docx文件

Hi:)是的,我尝试过使用python docx模板,但问题是docx中的图像。我已经完成了所有工作(包括图像文件提取),但我只需要知道图像在docx中的位置,这样我就可以知道将图像插入DocB的位置(即{company_logo_img})。感谢您的回复:)您好!感谢您在上一个问题中的帮助:)我运行了您的代码,但找不到图像。但是,我成功地隔离了包含图像的段落(尽管是以非常原始的方式),这是一个开始..我已经编辑了上面的qn。现在我必须找到一种方法将img复制到另一个文档..再次您好:)非常抱歉..澄清一下,问题可能是docx文件没有将图像分类为内联形状或其他东西。您的代码输出是[]用于标记,这不是您的错(我有一种感觉,它与标记有关)。我将尝试不同的标记,看看哪一个标记成功。我编辑了qn,以包含包含图像的obj段落中的XML数据。您可以通过id element id=“Picture 5”提取图像的名称“然后使用此代码在docx中添加图像
从docx导入文档从docx.shared import Inches Document=Document()p=Document.add_段落()r=p.add_run()r.add_text('Good Morning every body,this is is my')r.add_图片('/tmp/foo.jpg')r.add_文本('you like it?'))文档.save('demo.docx')
from docx import Document
document = Document()

p = document.add_paragraph()
r = p.add_run()
r.add_text('Good Morning every body,This is my ')
r.add_picture('/tmp/foo.jpg')
r.add_text(' do you like it?')

document.save('demo.docx')