Hướng dẫn python-docx add picture - python-docx thêm hình ảnh

23

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi sử dụng Python-docx để tạo tài liệu Microsoft Word. Người dùng muốn điều đó khi anh ấy viết ví dụ: "Chào buổi sáng mỗi cơ thể, đây là %của tôi (hồ sơ_img) Bạn có thích nó không?" Trong trường HTML, tôi tạo một tài liệu Word và tôi xem lại hình ảnh của người dùng từ cơ sở dữ liệu và tôi thay thế từ khóa %(hồ sơ_img) s bằng hình ảnh của người dùng không ở cuối tài liệu. Với Python-docx, chúng tôi sử dụng hướng dẫn này để thêm hình ảnh:NOT at the END OF THE DOCUMENT. With Python-docx we use this instruction to add a picture:

document.add_picture('profile_img.png', width=Inches(1.25))

Hình ảnh được thêm vào tài liệu nhưng vấn đề được thêm vào cuối tài liệu. Có phải không thể thêm một hình ảnh ở một vị trí cụ thể trong tài liệu Microsoft Word với Python? Tôi đã không tìm thấy bất kỳ câu trả lời nào cho điều này trên mạng nhưng đã thấy mọi người hỏi giống nhau ở những nơi khác mà không có giải pháp.

Cảm ơn (Lưu ý: Tôi không phải là một lập trình viên kinh nghiệm cực kỳ

Hướng dẫn python-docx add picture - python-docx thêm hình ảnh

Martineau

Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges

Hỏi ngày 4 tháng 10 năm 2015 lúc 9:59Oct 4, 2015 at 9:59

Hướng dẫn python-docx add picture - python-docx thêm hình ảnh

2

Trích dẫn tài liệu Python-DOCX:

Phương thức tài liệu.add_picture () thêm một hình ảnh được chỉ định vào cuối tài liệu trong một đoạn của riêng nó. Tuy nhiên, bằng cách đào sâu hơn một chút vào API, bạn có thể đặt văn bản ở hai bên của hình ảnh trong đoạn của nó hoặc cả hai.

Khi chúng tôi "đào sâu hơn một chút", chúng tôi khám phá API Run.add_picture().

Đây là một ví dụ về việc sử dụng nó:

from docx import Document
from docx.shared import Inches

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')

Đã trả lời ngày 4 tháng 10 năm 2015 lúc 10:41Oct 4, 2015 at 10:41

RobᵩrobᵩRobᵩ

158K17 Huy hiệu vàng226 Huy hiệu bạc 301 Huy hiệu đồng17 gold badges226 silver badges301 bronze badges

2

Chà, tôi không biết liệu điều này sẽ áp dụng cho bạn nhưng đây là những gì tôi đã làm để đặt hình ảnh ở một điểm cụ thể cho tài liệu DOCX: Tôi đã tạo một tài liệu DOCX cơ sở (tài liệu mẫu). Trong tệp này, tôi đã chèn một số bảng không có đường viền, được sử dụng làm người giữ chỗ cho hình ảnh. Khi tạo tài liệu, trước tiên tôi mở mẫu và cập nhật tệp tạo hình ảnh bên trong các bảng. Vì vậy, bản thân mã không khác nhiều so với mã ban đầu của bạn, sự khác biệt duy nhất là tôi đang tạo đoạn văn và hình ảnh bên trong một bảng cụ thể.

from docx import Document
from docx.shared import Inches

doc = Document('addImage.docx')
tables = doc.tables
p = tables[0].rows[0].cells[0].add_paragraph()
r = p.add_run()
r.add_picture('resized.png',width=Inches(4.0), height=Inches(.7))
p = tables[1].rows[0].cells[0].add_paragraph()
r = p.add_run()
r.add_picture('teste.png',width=Inches(4.0), height=Inches(.7))
doc.save('addImage.docx')

Đã trả lời ngày 12 tháng 9 năm 2016 lúc 12:23Sep 12, 2016 at 12:23

Lũ sóngWand

8599 Huy hiệu bạc5 Huy hiệu Đồng9 silver badges5 bronze badges

1

Đây là giải pháp của tôi. Nó có lợi thế trên đề xuất đầu tiên mà nó bao quanh bức tranh với một tiêu đề (với tiêu đề kiểu 1) và một phần để nhận xét bổ sung. Lưu ý rằng bạn phải thực hiện các phần chèn theo thứ tự ngược lại chúng xuất hiện trong tài liệu Word.

Đoạn trích này đặc biệt hữu ích nếu bạn muốn chèn hình ảnh trong một tài liệu hiện có.

from docx import Document
from docx.shared import Inches

# ------- initial code -------

document = Document()

p = document.add_paragraph()
r = p.add_run()
r.add_text('Good Morning every body,This is my ')
picPath = 'D:/Development/Python/aa.png'
r.add_picture(picPath)
r.add_text(' do you like it?')

document.save('demo.docx')

# ------- improved code -------

document = Document()

p = document.add_paragraph('Picture bullet section', 'List Bullet')
p = p.insert_paragraph_before('')
r = p.add_run()
r.add_picture(picPath)
p = p.insert_paragraph_before('My picture title', 'Heading 1')

document.save('demo_better.docx')

Đã trả lời ngày 24 tháng 4 năm 2018 lúc 20:03Apr 24, 2018 at 20:03

Điều này đang áp dụng câu trả lời được viết bởi Robᵩ trong khi xem xét đầu vào linh hoạt hơn từ người dùng. Giả định của tôi là trường HTML được đề cập bởi Kais Dkhili (enquirer orignal) đã được tải trong

from docx import Document
from docx.shared import Inches

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')
0. Vì thế...

Xác định nơi văn bản HTML liên quan trong tài liệu.

import re 
## regex module

img_tag = re.compile(r'%\(profile_img\)s') # declare pattern

for _p in enumerate(document.paragraphs): 
    if bool(img_tag.match(_p.text)): 
        
        img_paragraph = _p 
        # if and only if; suggesting img_paragraph a list and 
        # use append method instead for full document search 
        
        break # lose the break if want full document search

Thay thế hình ảnh mong muốn thành trình giữ chỗ được xác định là from docx import Document from docx.shared import Inches 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') 1

Mã sau là sau khi xem xét văn bản chỉ chứa một

from docx import Document
from docx.shared import Inches

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')
2 có thể được thay đổi theo đó nếu điều kiện khác

temp_text = img_tag.split(img_paragraph.text)

img_paragraph.runs[0].text = temp_text[0] 

_r = img_paragraph.add_run()
_r.add_picture('profile_img.png', width = Inches(1.25))

img_paragraph.add_run(temp_text[1])

và thực hiện.

from docx import Document
from docx.shared import Inches

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')
3 nó nếu hoàn thành.

Trong trường hợp bạn đang tự hỏi những gì mong đợi từ ____ 14 ...

from docx import Document
from docx.shared import Inches

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')
5

img_tag.split(img_paragraph.text)

from docx import Document
from docx.shared import Inches

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')
6

['This is my ', ' do you like it?']

Đã trả lời ngày 29 tháng 5 năm 2020 lúc 13:31May 29, 2020 at 13:31

Hướng dẫn python-docx add picture - python-docx thêm hình ảnh

AzharazharAzhar

538 huy hiệu đồng8 bronze badges

Tôi dành vài giờ trong đó. Nếu bạn cần thêm hình ảnh vào tệp tài liệu mẫu bằng Python, giải pháp tốt nhất là sử dụng thư viện Python-Docx-atplate. Tài liệu có sẵn ở đây các ví dụ có sẵn ở đây

Đã trả lời ngày 6 tháng 4 năm 2021 lúc 20:32Apr 6, 2021 at 20:32

Aswin Babuaswin BabuAswin Babu

1701 Huy hiệu bạc8 Huy hiệu đồng1 silver badge8 bronze badges

Đây là biến thể trên một chủ đề. Cho phép tôi là số đoạn trong tài liệu cụ thể sau đó:

p = doc.paragraphs[I].insert_paragraph_before('\n')
p.add_run().add_picture('Fig01.png', width=Cm(15))

Đã trả lời ngày 7 tháng 7 năm 2021 lúc 17:15Jul 7, 2021 at 17:15