def test_remove_child_in_tree(): pdf = os.path.join(RESOURCE_ROOT, "form.pdf") tree = TreeObject() reader = PdfReader(pdf) writer = PdfWriter() writer.add_page(reader.pages[0]) writer.add_bookmark("foo", pagenum=0) obj = writer._objects[-1] tree.add_child(obj, writer) tree.remove_child(obj) tree.add_child(obj, writer) tree.empty_tree()
def test_add_bookmark(): reader = PdfReader(os.path.join(RESOURCE_ROOT, "pdflatex-outline.pdf")) writer = PdfWriter() for page in reader.pages: writer.add_page(page) bookmark = writer.add_bookmark("A bookmark", 1, None, (255, 0, 15), True, True, "/Fit", 200, 0, None) writer.add_bookmark("Another", 2, bookmark, None, False, False, "/Fit", 0, 0, None) # write "output" to PyPDF2-output.pdf tmp_filename = "dont_commit_bookmark.pdf" with open(tmp_filename, "wb") as output_stream: writer.write(output_stream) # Cleanup os.remove(tmp_filename)
def test_writer_operations(): """ This test just checks if the operation throws an exception. This should be done way more thoroughly: It should be checked if the output is as expected. """ pdf_path = os.path.join(RESOURCE_ROOT, "crazyones.pdf") pdf_outline_path = os.path.join(RESOURCE_ROOT, "pdflatex-outline.pdf") reader = PdfReader(pdf_path) reader_outline = PdfReader(pdf_outline_path) writer = PdfWriter() page = reader.pages[0] with pytest.raises(PageSizeNotDefinedError) as exc: writer.add_blank_page() assert exc.value.args == () writer.insert_page(page, 1) writer.insert_page(reader_outline.pages[0], 0) writer.add_bookmark_destination(page) writer.remove_links() writer.add_bookmark_destination(page) bm = writer.add_bookmark("A bookmark", 0, None, (255, 0, 15), True, True, "/FitBV", 10) writer.add_bookmark("The XYZ fit", 0, bm, (255, 0, 15), True, True, "/XYZ", 10, 20, 3) writer.add_bookmark("The FitH fit", 0, bm, (255, 0, 15), True, True, "/FitH", 10) writer.add_bookmark("The FitV fit", 0, bm, (255, 0, 15), True, True, "/FitV", 10) writer.add_bookmark("The FitR fit", 0, bm, (255, 0, 15), True, True, "/FitR", 10, 20, 30, 40) writer.add_bookmark("The FitB fit", 0, bm, (255, 0, 15), True, True, "/FitB") writer.add_bookmark("The FitBH fit", 0, bm, (255, 0, 15), True, True, "/FitBH", 10) writer.add_bookmark("The FitBV fit", 0, bm, (255, 0, 15), True, True, "/FitBV", 10) writer.add_blank_page() writer.add_uri(2, "https://example.com", RectangleObject([0, 0, 100, 100])) writer.add_link(2, 1, RectangleObject([0, 0, 100, 100])) assert writer._get_page_layout() is None writer._set_page_layout("/SinglePage") assert writer._get_page_layout() == "/SinglePage" assert writer._get_page_mode() is None writer.set_page_mode("/UseNone") assert writer._get_page_mode() == "/UseNone" writer.insert_blank_page(width=100, height=100) writer.insert_blank_page() # without parameters # TODO: This gives "KeyError: '/Contents'" - is that a bug? # writer.removeImages() writer.add_metadata({"author": "Martin Thoma"}) writer.add_attachment("foobar.gif", b"foobarcontent") # finally, write "output" to PyPDF2-output.pdf tmp_path = "dont_commit_writer.pdf" with open(tmp_path, "wb") as output_stream: writer.write(output_stream) # cleanup os.remove(tmp_path)