Mengalami kesalahan compression error -2
. Akan sangat bagus jika ada yang bisa memberikan beberapa petunjuk
Terlampir PDF dengan masalah:
5_EN.pdf
Pesan eror:
Processing Pages: 1/28...mupdf: compression error -2
Traceback (most recent call last):
File "/Users/erikchan/Downloads/convert.py", line 10, in <module>
parse(pdf_files[i], docx_files[i])
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pdf2docx/main.py", line 31, in parse
cv.make_docx(indexes, multi_processing)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pdf2docx/converter.py", line 118, in make_docx
self._make_docx(page_indexes)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pdf2docx/converter.py", line 192, in _make_docx
self.initialize(page).parse().make_page(self.doc_docx)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pdf2docx/converter.py", line 172, in initialize
images, paths = self._paths_extractor.extract_paths(page)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pdf2docx/shape/Path.py", line 61, in extract_paths
image = largest.to_image(page) if largest.contains_curve else None
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pdf2docx/shape/Path.py", line 140, in to_image
return ImagesExtractor.clip_page(page, bbox, zoom)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pdf2docx/image/Image.py", line 60, in clip_page
return cls.to_raw_dict(image, bbox)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pdf2docx/image/Image.py", line 50, in to_raw_dict
'image': image.getPNGData()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/fitz/fitz.py", line 5899, in getPNGData
barray = self._getImageData(1)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/fitz/fitz.py", line 5868, in _getImageData
return _fitz.Pixmap__getImageData(self, format)
RuntimeError: compression error -2
Terima kasih telah menyediakan kasus ini.
Banyak grafik vektor, yaitu path
seperti garis, kurva dan kombinasinya, ada di pdf Anda. Namun, saat ini jalur kliping diabaikan oleh perpustakaan ini karena masalah teknis saat mengekstrak jalur ini dari pdf. Beberapa jalur keluar dari halaman tanpa terpotong, yang mengakibatkan masalah compression error -2
.
Selain itu, dua masalah lagi untuk mengonversi pdf ini:
Warna jalur salah. Saya kira akar masalahnya adalah bahwa saat ini hanya Device Color Space
(Abu-abu/RGB/CMYK) yang dipertimbangkan, sementara sampel pdf ini mungkin mengikuti ruang warna khusus seperti Indexed CS
, DeviceN CS
.
gambar yang tumpang tindih dihapus. python-docx
diterapkan untuk menulis docx yang dikonversi, tetapi python-docx
tidak mendukung elemen mengambang sekarang. Jadi, gambar mengambang dihapus sebagai kompromi.
Jadi, sayangnya, pdf2docx
tidak dapat mengonversi pdf Anda untuk saat ini. Setidaknya upaya berikut harus dilakukan:
Terima kasih @dothinking atas penjelasannya yang jelas. Saya terkejut perpustakaan ini tidak lebih populer dari itu. Versi saat ini sudah sangat bagus dan saya tahu banyak orang dapat mengambil manfaat darinya.
Tolong beri tahu saya bagaimana saya dapat membantu menyelesaikan salah satu masalah yang Anda daftarkan (saya akan memerlukan beberapa panduan.) Apakah menyelesaikan bug, pengujian, atau lainnya.
Terima kasih banyak @echan00.
Beberapa kemajuan dalam masalah ini:
PyMuPDF
menerbitkan fitur baru pada jalur ekstraksi. Saya akan memeriksanya dan mudah-mudahan bisa menyelesaikan masalah ini.Setelah itu, setiap tes atau saran dihargai.
Komentar pada 31-12-2020: PyMuPDF 1.18.5 terbaru memecahkan masalah ini sebagian, tetapi tidak sempurna, terutama jalur kliping.
Karena gambar sebaris didukung di python-docx
, langkah-langkah untuk menjelajahi gambar mengambang:
behind text
)hasil struktur xml:
<wp:inline>
bawah <w:drawing>
<wp:anchor>
bawah <w:drawing>
<wp:positionH>
dan <wp:positionV>
untuk menentukan posisi tetapJadi, idenya adalah membuat simpul <wp:anchor>
, lalu menambahkan sub-simpul:
<wp:positionH>
dan <wp:positionV>
Tampaknya gambar mengambang dengan python-docx
adalah permintaan umum, dokumen di sini untuk dibagikan.
# -*- coding: utf-8 -*-
'''
Implement floating image based on python-docx.
- Text wrapping style: BEHIND TEXT <wp:anchor behindDoc="1">
- Picture position: top-left corner of PAGE `<wp:positionH relativeFrom="page">`.
Create a docx sample (Layout | Positions | More Layout Options) and explore the
source xml (Open as a zip | word | document.xml) to implement other text wrapping
styles and position modes per `CT_Anchor._anchor_xml()`.
'''
from docx.oxml import parse_xml, register_element_cls
from docx.oxml.ns import nsdecls
from docx.oxml.shape import CT_Picture
from docx.oxml.xmlchemy import BaseOxmlElement, OneAndOnlyOne
# refer to docx.oxml.shape.CT_Inline
class CT_Anchor(BaseOxmlElement):
"""
``<w:anchor>`` element, container for a floating image.
"""
extent = OneAndOnlyOne('wp:extent')
docPr = OneAndOnlyOne('wp:docPr')
graphic = OneAndOnlyOne('a:graphic')
<strong i="7">@classmethod</strong>
def new(cls, cx, cy, shape_id, pic, pos_x, pos_y):
"""
Return a new ``<wp:anchor>`` element populated with the values passed
as parameters.
"""
anchor = parse_xml(cls._anchor_xml(pos_x, pos_y))
anchor.extent.cx = cx
anchor.extent.cy = cy
anchor.docPr.id = shape_id
anchor.docPr.name = 'Picture %d' % shape_id
anchor.graphic.graphicData.uri = (
'http://schemas.openxmlformats.org/drawingml/2006/picture'
)
anchor.graphic.graphicData._insert_pic(pic)
return anchor
<strong i="8">@classmethod</strong>
def new_pic_anchor(cls, shape_id, rId, filename, cx, cy, pos_x, pos_y):
"""
Return a new `wp:anchor` element containing the `pic:pic` element
specified by the argument values.
"""
pic_id = 0 # Word doesn't seem to use this, but does not omit it
pic = CT_Picture.new(pic_id, filename, rId, cx, cy)
anchor = cls.new(cx, cy, shape_id, pic, pos_x, pos_y)
anchor.graphic.graphicData._insert_pic(pic)
return anchor
<strong i="9">@classmethod</strong>
def _anchor_xml(cls, pos_x, pos_y):
return (
'<wp:anchor distT="0" distB="0" distL="0" distR="0" simplePos="0" relativeHeight="0" \n'
' behindDoc="1" locked="0" layoutInCell="1" allowOverlap="1" \n'
' %s>\n'
' <wp:simplePos x="0" y="0"/>\n'
' <wp:positionH relativeFrom="page">\n'
' <wp:posOffset>%d</wp:posOffset>\n'
' </wp:positionH>\n'
' <wp:positionV relativeFrom="page">\n'
' <wp:posOffset>%d</wp:posOffset>\n'
' </wp:positionV>\n'
' <wp:extent cx="914400" cy="914400"/>\n'
' <wp:wrapNone/>\n'
' <wp:docPr id="666" name="unnamed"/>\n'
' <wp:cNvGraphicFramePr>\n'
' <a:graphicFrameLocks noChangeAspect="1"/>\n'
' </wp:cNvGraphicFramePr>\n'
' <a:graphic>\n'
' <a:graphicData uri="URI not set"/>\n'
' </a:graphic>\n'
'</wp:anchor>' % ( nsdecls('wp', 'a', 'pic', 'r'), int(pos_x), int(pos_y) )
)
# refer to docx.parts.story.BaseStoryPart.new_pic_inline
def new_pic_anchor(part, image_descriptor, width, height, pos_x, pos_y):
"""Return a newly-created `w:anchor` element.
The element contains the image specified by *image_descriptor* and is scaled
based on the values of *width* and *height*.
"""
rId, image = part.get_or_add_image(image_descriptor)
cx, cy = image.scaled_dimensions(width, height)
shape_id, filename = part.next_id, image.filename
return CT_Anchor.new_pic_anchor(shape_id, rId, filename, cx, cy, pos_x, pos_y)
# refer to docx.text.run.add_picture
def add_float_picture(p, image_path_or_stream, width=None, height=None, pos_x=0, pos_y=0):
"""Add float picture at fixed position `pos_x` and `pos_y` to the top-left point of page.
"""
run = p.add_run()
anchor = new_pic_anchor(run.part, image_path_or_stream, width, height, pos_x, pos_y)
run._r.add_drawing(anchor)
# refer to docx.oxml.shape.__init__.py
register_element_cls('wp:anchor', CT_Anchor)
if __name__ == '__main__':
from docx import Document
from docx.shared import Inches, Pt
document = Document()
# add a floating image
p = document.add_paragraph()
add_float_picture(p, 'test.png', width=Inches(5.0), pos_x=Pt(20), pos_y=Pt(30))
# add text
p.add_run('Hello World'*50)
document.save('output.docx')
Bagus @dothinking , sepertinya Anda tahu persis apa masalahnya. Saya memiliki berbagai PDF yang dapat saya bantu uji setelah Anda siap
@dothinking terima kasih banyak untuk contoh kode Anda! Memecahkan masalah saya dengan sempurna!!!!
Tidak mendapatkan waktu untuk proyek ini untuk waktu yang lama. Versi baru v0.5.0
sekarang tersedia untuk menyelesaikan sebagian masalah ini:
PyMuPDF
, tetapi tidak begitu baik untuk bentuk yang rumit, misalnya jalur kliping.Dengan versi terbaru ini, contoh pdf dapat dikonversi dengan sukses, tetapi masih membutuhkan banyak pekerjaan untuk meningkatkan kualitas file docx yang dikonversi, karena gaya yang rumit/indah.
Wow ini adalah peningkatan yang bagus. Terima kasih banyak atas kerja keras Anda @dothinking
Komentar yang paling membantu
Tampaknya gambar mengambang dengan
python-docx
adalah permintaan umum, dokumen di sini untuk dibagikan.