|
7 | 7 |
|
8 | 8 | import pypdf.generic |
9 | 9 | import pypdf.xmp |
10 | | -from pypdf import PdfReader |
| 10 | +from pypdf import PdfReader, PdfWriter |
11 | 11 | from pypdf.errors import PdfReadError |
12 | 12 |
|
13 | 13 | from . import get_data_from_url |
@@ -42,6 +42,35 @@ def test_read_xmp_metadata_samples(src): |
42 | 42 | } |
43 | 43 |
|
44 | 44 |
|
| 45 | +def test_writer_xmp_metadata_samples(): |
| 46 | + writer = PdfWriter(SAMPLE_ROOT / "020-xmp/output_with_metadata_pymupdf.pdf") |
| 47 | + xmp = writer.xmp_metadata |
| 48 | + assert xmp |
| 49 | + assert xmp.dc_contributor == [] |
| 50 | + assert xmp.dc_creator == ["John Doe"] |
| 51 | + assert xmp.dc_source == "Martin Thoma" # attribute node |
| 52 | + assert xmp.dc_description == {"x-default": "This is a text"} |
| 53 | + assert xmp.dc_date == [datetime(1990, 4, 28, 0, 0)] |
| 54 | + assert xmp.dc_title == {"x-default": "Sample PDF with XMP Metadata"} |
| 55 | + assert xmp.custom_properties == { |
| 56 | + "Style": "FooBarStyle", |
| 57 | + "other": "worlds", |
| 58 | + "⏰": "time", |
| 59 | + } |
| 60 | + co = pypdf.generic.ContentStream(None, None) |
| 61 | + co.set_data( |
| 62 | + xmp.stream.get_data().replace( |
| 63 | + b'dc:source="Martin Thoma"', b'dc:source="Pubpub-Zz"' |
| 64 | + ) |
| 65 | + ) |
| 66 | + writer.xmp_metadata = pypdf.xmp.XmpInformation(co) |
| 67 | + b = BytesIO() |
| 68 | + writer.write(b) |
| 69 | + reader = PdfReader(b) |
| 70 | + xmp2 = reader.xmp_metadata |
| 71 | + assert xmp2.dc_source == "Pubpub-Zz" |
| 72 | + |
| 73 | + |
45 | 74 | @pytest.mark.parametrize( |
46 | 75 | ("src", "has_xmp"), |
47 | 76 | [ |
|
0 commit comments