70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
# Copyright 2010 Dirk Holtwick, holtwick.it
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
from io import BytesIO
|
|
|
|
from pypdf import PdfReader, PdfWriter
|
|
|
|
from xhtml2pdf.files import getFile, pisaTempFile
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class pisaPDF:
|
|
def __init__(self, capacity=-1) -> None:
|
|
self.capacity = capacity
|
|
self.files: list[BytesIO] = []
|
|
|
|
def addFromURI(self, url, basepath=None):
|
|
obj = getFile(url, basepath)
|
|
data = obj.getFileContent()
|
|
if data:
|
|
self.files.append(BytesIO(data))
|
|
|
|
addFromFileName = addFromURI
|
|
|
|
def addFromFile(self, f):
|
|
if hasattr(f, "read"):
|
|
self.files.append(f)
|
|
else:
|
|
self.addFromURI(f)
|
|
|
|
def addFromString(self, data):
|
|
f = getFile(data.encode(), capacity=self.capacity).getFileContent()
|
|
if f:
|
|
self.files.append(f)
|
|
|
|
def addDocument(self, doc):
|
|
if hasattr(doc.dest, "read"):
|
|
self.files.append(doc.dest)
|
|
|
|
def join(self, file=None):
|
|
output = PdfWriter()
|
|
for pdffile in self.files:
|
|
pdf = PdfReader(pdffile)
|
|
for pageNumber in range(len(pdf.pages)):
|
|
output.add_page(pdf.pages[pageNumber])
|
|
|
|
if file is not None:
|
|
output.write(file)
|
|
return file
|
|
out = pisaTempFile(capacity=self.capacity)
|
|
output.write(out)
|
|
return out.getvalue()
|
|
|
|
getvalue = join
|
|
__str__ = join
|