aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGertjan van den Burg <gertjanvandenburg@gmail.com>2021-03-26 23:46:21 +0000
committerGertjan van den Burg <gertjanvandenburg@gmail.com>2021-03-26 23:46:21 +0000
commit64c7ee4284a048b7b6a7c7b1c42ebfb201bf765a (patch)
treee90742ef3a4a28e5ed5cf5b277153659debd0c05
parentBump version and update changelog (diff)
downloadpaper2remarkable-64c7ee4284a048b7b6a7c7b1c42ebfb201bf765a.tar.gz
paper2remarkable-64c7ee4284a048b7b6a7c7b1c42ebfb201bf765a.zip
Fix blank pages bug (fixes #98)
-rw-r--r--paper2remarkable/pdf_ops.py17
-rw-r--r--setup.py2
-rw-r--r--tests/_constants.py14
-rw-r--r--tests/test_pdf_ops.py37
-rw-r--r--tests/test_providers.py6
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
diff --git a/setup.py b/setup.py
index fb7d21c..7a2ebe3 100644
--- a/setup.py
+++ b/setup.py
@@ -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))