def test_add_link(): reader = PdfReader(os.path.join(RESOURCE_ROOT, "pdflatex-outline.pdf")) writer = PdfWriter() for page in reader.pages: writer.add_page(page) from PyPDF2.generic import RectangleObject writer.add_link( 1, 2, RectangleObject([0, 0, 100, 100]), border=[1, 2, 3, [4]], fit="/Fit", ) writer.add_link(2, 3, RectangleObject([20, 30, 50, 80]), [1, 2, 3], "/FitH", None) writer.add_link( 3, 0, "[ 200 300 250 350 ]", [0, 0, 0], "/XYZ", 0, 0, 2, ) writer.add_link( 3, 0, [100, 200, 150, 250], border=[0, 0, 0], ) # write "output" to PyPDF2-output.pdf tmp_filename = "dont_commit_link.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)