diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2021-03-26 23:46:21 +0000 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2021-03-26 23:46:21 +0000 |
| commit | 64c7ee4284a048b7b6a7c7b1c42ebfb201bf765a (patch) | |
| tree | e90742ef3a4a28e5ed5cf5b277153659debd0c05 | |
| parent | Bump version and update changelog (diff) | |
| download | paper2remarkable-64c7ee4284a048b7b6a7c7b1c42ebfb201bf765a.tar.gz paper2remarkable-64c7ee4284a048b7b6a7c7b1c42ebfb201bf765a.zip | |
Fix blank pages bug (fixes #98)
| -rw-r--r-- | paper2remarkable/pdf_ops.py | 17 | ||||
| -rw-r--r-- | setup.py | 2 | ||||
| -rw-r--r-- | tests/_constants.py | 14 | ||||
| -rw-r--r-- | tests/test_pdf_ops.py | 37 | ||||
| -rw-r--r-- | tests/test_providers.py | 6 |
5 files changed, 63 insertions, 13 deletions
diff --git a/paper2remarkable/pdf_ops.py b/paper2remarkable/pdf_ops.py index 93f1200..e0a67d2 100644 --- a/paper2remarkable/pdf_ops.py +++ b/paper2remarkable/pdf_ops.py @@ -44,16 +44,15 @@ def blank_pdf(filepath): """Add blank pages to PDF""" logger.info("Adding blank pages") pdf = Pdf.open(filepath) - - previous_pages = pdf.pages - pdf.pages = [] - - for page in previous_pages: - pdf.pages.append(page) - pdf.add_blank_page() - + # Note: creating a new file doesn't keep the table of contents, but it + # would anyway be incorrect when adding blank pages + dst = Pdf.new() + for page in pdf.pages: + dst.pages.append(page) + x0, y0, x1, y1 = page.MediaBox + dst.add_blank_page(page_size=(x1 - x0, y1 - y0)) output_file = os.path.splitext(filepath)[0] + "-blank.pdf" - pdf.save(output_file) + dst.save(output_file) return output_file @@ -19,7 +19,7 @@ VERSION = None # What packages are required for this module to be executed? REQUIRED = [ - "pikepdf>=2.8.0", + "pikepdf>=2.9.0", "beautifulsoup4>=4.8", "html2text>=2020.1.16", "markdown>=3.1.1", diff --git a/tests/_constants.py b/tests/_constants.py new file mode 100644 index 0000000..e0ef956 --- /dev/null +++ b/tests/_constants.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- + +TEST_FILE = ( + "%PDF-1.1\n%¿÷¢þ\n1 0 obj\n<< /Pages 2 0 R /Type /Catalog >>\n" + "endobj\n2 0 obj\n<< /Count 1 /Kids [ 3 0 R ] /MediaBox [ 0 0 300 600 ] " + "/Type /Pages >>\nendobj\n3 0 obj\n<< /Contents 4 0 R /Parent 2 0 R " + "/Resources << /Font << /F1 << /BaseFont /Times-Roman /Subtype /Type1 " + "/Type /Font >> >> >> /Type /Page >>\nendobj\n4 0 obj\n<< /Length 44 >>\n" + "stream\nBT /F1 18 Tf 80 80 Td (Hello World 1) Tj ET\nendstream\nendobj\n" + "xref\n0 5\n0000000000 65535 f \n0000000019 00000 n \n0000000067 00000 n " + "\n0000000153 00000 n \n0000000306 00000 n \ntrailer << /Root 1 0 R /Size " + "5 /ID [<015d3b8119c73f2291496f4b9d03fe4f>" + "<015d3b8119c73f2291496f4b9d03fe4f>] >>\nstartxref\n399\n%%EOF" +) diff --git a/tests/test_pdf_ops.py b/tests/test_pdf_ops.py new file mode 100644 index 0000000..bed763a --- /dev/null +++ b/tests/test_pdf_ops.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Tests for the PDF operations""" + +import os +import shutil +import tempfile +import unittest + +from pikepdf import Pdf + +from paper2remarkable.providers import LocalFile + +from _constants import TEST_FILE + + +class PdfOpsTestCase(unittest.TestCase): + def setUp(self): + self._tmpdir = tempfile.mkdtemp(prefix="p2r_test_blank_") + + def tearDown(self): + shutil.rmtree(self._tmpdir) + + def test_blank_pages(self): + local_filename = os.path.join(self._tmpdir, "test_blank.pdf") + with open(local_filename, "w") as fp: + fp.write(TEST_FILE) + prov = LocalFile(upload=False, blank=True) + out_filename = os.path.join(self._tmpdir, "test_blank1.pdf") + filename = prov.run(local_filename, filename=out_filename) + pdf = Pdf.open(filename) + self.assertEqual(len(pdf.pages), 2) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_providers.py b/tests/test_providers.py index af69c64..e4ab2a7 100644 --- a/tests/test_providers.py +++ b/tests/test_providers.py @@ -11,6 +11,7 @@ import pdfplumber import shutil import tempfile import unittest + from pikepdf import Pdf from paper2remarkable.providers import ( @@ -36,6 +37,7 @@ from paper2remarkable.providers import ( TandFOnline, ) from paper2remarkable.utils import download_url +from _constants import TEST_FILE VERBOSE = False @@ -158,9 +160,7 @@ class TestProviders(unittest.TestCase): def test_local(self): local_filename = "test.pdf" with open(local_filename, "w") as fp: - fp.write( - "%PDF-1.1\n%¿÷¢þ\n1 0 obj\n<< /Pages 2 0 R /Type /Catalog >>\nendobj\n2 0 obj\n<< /Count 1 /Kids [ 3 0 R ] /MediaBox [ 0 0 300 600 ] /Type /Pages >>\nendobj\n3 0 obj\n<< /Contents 4 0 R /Parent 2 0 R /Resources << /Font << /F1 << /BaseFont /Times-Roman /Subtype /Type1 /Type /Font >> >> >> /Type /Page >>\nendobj\n4 0 obj\n<< /Length 44 >>\nstream\nBT /F1 18 Tf 80 80 Td (Hello World 1) Tj ET\nendstream\nendobj\nxref\n0 5\n0000000000 65535 f \n0000000019 00000 n \n0000000067 00000 n \n0000000153 00000 n \n0000000306 00000 n \ntrailer << /Root 1 0 R /Size 5 /ID [<015d3b8119c73f2291496f4b9d03fe4f><015d3b8119c73f2291496f4b9d03fe4f>] >>\nstartxref\n399\n%%EOF" - ) + fp.write(TEST_FILE) prov = LocalFile(upload=False, verbose=VERBOSE) filename = prov.run(local_filename) self.assertEqual("test_.pdf", os.path.basename(filename)) |
