Skip to content

Commit

Permalink
DOC: Stamp images directly on a PDF (#2357)
Browse files Browse the repository at this point in the history
See #1945

Co-authored-by: dmjohnsson23 <dmjohn235@gmail.com>
  • Loading branch information
MartinThoma and dmjohnsson23 authored Dec 23, 2023
1 parent 133ccb1 commit c43ca15
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions docs/user/add-watermark.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,56 @@ Example of stamp:

Example of watermark:
![watermark.png](watermark.png)


## Stamping images directly

The above code only works for stamps that are already in PDF format.
However, you can easilly convert an image to PDF image using
[Pillow](https://pypi.org/project/Pillow/).


```python
from io import BytesIO
from pathlib import Path
from typing import List, Union

from PIL import Image
from pypdf import PageRange, PdfReader, PdfWriter, Transformation


def image_to_pdf(stamp_img: Union[Path, str]) -> PdfReader:
img = Image.open(stamp_img)
img_as_pdf = BytesIO()
img.save(img_as_pdf, "pdf")
return PdfReader(img_as_pdf)


def stamp_img(
content_pdf: Union[Path, str],
stamp_img: Union[Path, str],
pdf_result: Union[Path, str],
page_indices: Union[PageRange, List[int], None] = None,
):
# Convert the image to a PDF
stamp_pdf = image_to_pdf(stamp_img)

# Then use the same stamp code from above
stamp_page = stamp_pdf.pages[0]

writer = PdfWriter()

reader = PdfReader(content_pdf)
writer.append(reader, pages=page_indices)
for content_page in writer.pages:
content_page.merge_transformed_page(
stamp_page,
Transformation(),
)

with open(pdf_result, "wb") as fp:
writer.write(fp)


stamp_img("example.pdf", "example.png", "out.pdf")
```

0 comments on commit c43ca15

Please sign in to comment.