mirror of
https://github.com/bringout/oca-ocb-core.git
synced 2026-04-19 05:52:01 +02:00
16.0 vanila
This commit is contained in:
parent
956889352c
commit
2e65bf056a
17 changed files with 5293 additions and 17668 deletions
|
|
@ -16,7 +16,7 @@ from reportlab.pdfgen import canvas
|
|||
try:
|
||||
# class were renamed in PyPDF2 > 2.0
|
||||
# https://pypdf2.readthedocs.io/en/latest/user/migration-1-to-2.html#classes
|
||||
from PyPDF2 import PdfReader, PdfWriter
|
||||
from PyPDF2 import PdfReader
|
||||
import PyPDF2
|
||||
# monkey patch to discard unused arguments as the old arguments were not discarded in the transitional class
|
||||
# https://pypdf2.readthedocs.io/en/2.0.0/_modules/PyPDF2/_reader.html#PdfReader
|
||||
|
|
@ -26,38 +26,12 @@ try:
|
|||
kwargs["strict"] = True # maintain the default
|
||||
kwargs = {k:v for k, v in kwargs.items() if k in ('strict', 'stream')}
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def getNumPages(self):
|
||||
"""Compatibility method for old API"""
|
||||
return len(self.pages)
|
||||
|
||||
def getPage(self, page_num):
|
||||
"""Compatibility method for old API"""
|
||||
return self.pages[page_num]
|
||||
|
||||
class PdfFileWriter(PdfWriter):
|
||||
def _addObject(self, obj):
|
||||
return self._add_object(obj)
|
||||
|
||||
def addPage(self, page):
|
||||
"""Compatibility method for old API"""
|
||||
return self.add_page(page)
|
||||
|
||||
def addMetadata(self, metadata):
|
||||
"""Compatibility method for old API"""
|
||||
return self.add_metadata(metadata)
|
||||
|
||||
def cloneReaderDocumentRoot(self, reader):
|
||||
"""Compatibility method for old API"""
|
||||
return self.clone_reader_document_root(reader)
|
||||
|
||||
PyPDF2.PdfFileReader = PdfFileReader
|
||||
PyPDF2.PdfFileWriter = PdfFileWriter
|
||||
from PyPDF2 import PdfFileWriter, PdfFileReader
|
||||
PdfFileWriter._addObject = PdfFileWriter._add_object
|
||||
except ImportError:
|
||||
try:
|
||||
from PyPDF2 import PdfFileWriter, PdfFileReader
|
||||
except ImportError:
|
||||
from PyPDF2 import PdfWriter as PdfFileWriter, PdfReader as PdfFileReader
|
||||
from PyPDF2 import PdfFileWriter, PdfFileReader
|
||||
|
||||
from PyPDF2.generic import DictionaryObject, NameObject, ArrayObject, DecodedStreamObject, NumberObject, createStringObject, ByteStringObject
|
||||
|
||||
|
|
@ -91,15 +65,10 @@ DictionaryObject.get = _unwrapping_get
|
|||
class BrandedFileWriter(PdfFileWriter):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
# Use new API method if available, fall back to old API
|
||||
metadata = {
|
||||
self.addMetadata({
|
||||
'/Creator': "Odoo",
|
||||
'/Producer': "Odoo",
|
||||
}
|
||||
if hasattr(self, 'add_metadata'):
|
||||
self.add_metadata(metadata)
|
||||
else:
|
||||
self.addMetadata(metadata)
|
||||
})
|
||||
|
||||
|
||||
PdfFileWriter = BrandedFileWriter
|
||||
|
|
@ -237,8 +206,8 @@ class OdooPdfFileReader(PdfFileReader):
|
|||
if not file_path:
|
||||
return []
|
||||
for i in range(0, len(file_path), 2):
|
||||
attachment = file_path[i+1].get_object()
|
||||
yield (attachment["/F"], attachment["/EF"]["/F"].get_object().get_data())
|
||||
attachment = file_path[i+1].getObject()
|
||||
yield (attachment["/F"], attachment["/EF"]["/F"].getObject().getData())
|
||||
except Exception:
|
||||
# malformed pdf (i.e. invalid xref page)
|
||||
return []
|
||||
|
|
@ -281,10 +250,10 @@ class OdooPdfFileWriter(PdfFileWriter):
|
|||
})
|
||||
if self._root_object.get('/Names') and self._root_object['/Names'].get('/EmbeddedFiles'):
|
||||
names_array = self._root_object["/Names"]["/EmbeddedFiles"]["/Names"]
|
||||
names_array.extend([attachment.get_object()['/F'], attachment])
|
||||
names_array.extend([attachment.getObject()['/F'], attachment])
|
||||
else:
|
||||
names_array = ArrayObject()
|
||||
names_array.extend([attachment.get_object()['/F'], attachment])
|
||||
names_array.extend([attachment.getObject()['/F'], attachment])
|
||||
|
||||
embedded_files_names_dictionary = DictionaryObject()
|
||||
embedded_files_names_dictionary.update({
|
||||
|
|
@ -359,7 +328,7 @@ class OdooPdfFileWriter(PdfFileWriter):
|
|||
icc_profile_file_data = compress(icc_profile.read())
|
||||
|
||||
icc_profile_stream_obj = DecodedStreamObject()
|
||||
icc_profile_stream_obj.set_data(icc_profile_file_data)
|
||||
icc_profile_stream_obj.setData(icc_profile_file_data)
|
||||
icc_profile_stream_obj.update({
|
||||
NameObject("/Filter"): NameObject("/FlateDecode"),
|
||||
NameObject("/N"): NumberObject(3),
|
||||
|
|
@ -389,9 +358,9 @@ class OdooPdfFileWriter(PdfFileWriter):
|
|||
fonts = {}
|
||||
# First browse through all the pages of the pdf file, to get a reference to all the fonts used in the PDF.
|
||||
for page in pages:
|
||||
for font in page.get_object()['/Resources']['/Font'].values():
|
||||
for descendant in font.get_object()['/DescendantFonts']:
|
||||
fonts[descendant.idnum] = descendant.get_object()
|
||||
for font in page.getObject()['/Resources']['/Font'].values():
|
||||
for descendant in font.getObject()['/DescendantFonts']:
|
||||
fonts[descendant.idnum] = descendant.getObject()
|
||||
|
||||
# Then for each font, rewrite the width array with the information taken directly from the font file.
|
||||
# The new width are calculated such as width = round(1000 * font_glyph_width / font_units_per_em)
|
||||
|
|
@ -412,7 +381,7 @@ class OdooPdfFileWriter(PdfFileWriter):
|
|||
else:
|
||||
_logger.warning('The fonttools package is not installed. Generated PDF may not be PDF/A compliant.')
|
||||
|
||||
outlines = self._root_object['/Outlines'].get_object()
|
||||
outlines = self._root_object['/Outlines'].getObject()
|
||||
outlines[NameObject('/Count')] = NumberObject(1)
|
||||
|
||||
# Set odoo as producer
|
||||
|
|
@ -434,7 +403,7 @@ class OdooPdfFileWriter(PdfFileWriter):
|
|||
footer = b'<?xpacket end="w"?>'
|
||||
metadata = b'%s%s%s' % (header, metadata_content, footer)
|
||||
file_entry = DecodedStreamObject()
|
||||
file_entry.set_data(metadata)
|
||||
file_entry.setData(metadata)
|
||||
file_entry.update({
|
||||
NameObject("/Type"): NameObject("/Metadata"),
|
||||
NameObject("/Subtype"): NameObject("/XML"),
|
||||
|
|
@ -455,7 +424,7 @@ class OdooPdfFileWriter(PdfFileWriter):
|
|||
:return:
|
||||
'''
|
||||
file_entry = DecodedStreamObject()
|
||||
file_entry.set_data(attachment['content'])
|
||||
file_entry.setData(attachment['content'])
|
||||
file_entry.update({
|
||||
NameObject("/Type"): NameObject("/EmbeddedFile"),
|
||||
NameObject("/Params"):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue