Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
205 changes: 205 additions & 0 deletions src/pdfrest/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
PdfFlattenFormsPayload,
PdfFlattenLayersPayload,
PdfFlattenTransparenciesPayload,
PdfImageWatermarkPayload,
PdfImportFormDataPayload,
PdfInfoPayload,
PdfLinearizePayload,
Expand All @@ -111,6 +112,7 @@
PdfRestRawFileResponse,
PdfRestrictPayload,
PdfSplitPayload,
PdfTextWatermarkPayload,
PdfToExcelPayload,
PdfToPdfaPayload,
PdfToPdfxPayload,
Expand Down Expand Up @@ -154,12 +156,15 @@
PdfRedactionInstruction,
PdfRestriction,
PdfRGBColor,
PdfTextColor,
PdfXType,
PngColorModel,
SummaryFormat,
SummaryOutputFormat,
TiffColorModel,
TranslateOutputFormat,
WatermarkHorizontalAlignment,
WatermarkVerticalAlignment,
)

__all__ = ("AsyncPdfRestClient", "PdfRestClient")
Expand Down Expand Up @@ -3615,6 +3620,106 @@ def convert_url_to_pdf(
timeout=timeout,
)

def watermark_pdf_with_text(
self,
file: PdfRestFile | Sequence[PdfRestFile],
*,
watermark_text: str,
output: str | None = None,
font: str | None = None,
text_size: int = 72,
text_color: PdfTextColor = (0, 0, 0),
opacity: float = 0.5,
horizontal_alignment: WatermarkHorizontalAlignment = "center",
vertical_alignment: WatermarkVerticalAlignment = "center",
x: int = 0,
y: int = 0,
rotation: int = 0,
pages: PdfPageSelection | None = None,
behind_page: bool = False,
extra_query: Query | None = None,
extra_headers: AnyMapping | None = None,
extra_body: Body | None = None,
timeout: TimeoutTypes | None = None,
) -> PdfRestFileBasedResponse:
"""Apply a text watermark to a PDF."""

payload: dict[str, Any] = {
"files": file,
"watermark_text": watermark_text,
"output": output,
"font": font,
"text_size": text_size,
"text_color": text_color,
"opacity": opacity,
"horizontal_alignment": horizontal_alignment,
"vertical_alignment": vertical_alignment,
"x": x,
"y": y,
"rotation": rotation,
"pages": pages,
"behind_page": behind_page,
}
payload = {key: value for key, value in payload.items() if value is not None}

return self._post_file_operation(
endpoint="/watermarked-pdf",
payload=payload,
payload_model=PdfTextWatermarkPayload,
extra_query=extra_query,
extra_headers=extra_headers,
extra_body=extra_body,
timeout=timeout,
)

def watermark_pdf_with_image(
self,
file: PdfRestFile | Sequence[PdfRestFile],
*,
watermark_file: PdfRestFile | Sequence[PdfRestFile],
output: str | None = None,
watermark_file_scale: float = 0.5,
opacity: float = 0.5,
horizontal_alignment: WatermarkHorizontalAlignment = "center",
vertical_alignment: WatermarkVerticalAlignment = "center",
x: int = 0,
y: int = 0,
rotation: int = 0,
pages: PdfPageSelection | None = None,
behind_page: bool = False,
extra_query: Query | None = None,
extra_headers: AnyMapping | None = None,
extra_body: Body | None = None,
timeout: TimeoutTypes | None = None,
) -> PdfRestFileBasedResponse:
"""Apply an image watermark to a PDF."""

payload: dict[str, Any] = {
"files": file,
"watermark_file": watermark_file,
"output": output,
"watermark_file_scale": watermark_file_scale,
"opacity": opacity,
"horizontal_alignment": horizontal_alignment,
"vertical_alignment": vertical_alignment,
"x": x,
"y": y,
"rotation": rotation,
"pages": pages,
"behind_page": behind_page,
}
payload = {key: value for key, value in payload.items() if value is not None}

return self._post_file_operation(
endpoint="/watermarked-pdf",
payload=payload,
payload_model=PdfImageWatermarkPayload,
extra_query=extra_query,
extra_headers=extra_headers,
extra_body=extra_body,
timeout=timeout,
)

def convert_to_pdfa(
self,
file: PdfRestFile | Sequence[PdfRestFile],
Expand Down Expand Up @@ -5412,6 +5517,106 @@ async def convert_url_to_pdf(
timeout=timeout,
)

async def watermark_pdf_with_text(
self,
file: PdfRestFile | Sequence[PdfRestFile],
*,
watermark_text: str,
output: str | None = None,
font: str | None = None,
text_size: int = 72,
text_color: PdfTextColor = (0, 0, 0),
opacity: float = 0.5,
horizontal_alignment: WatermarkHorizontalAlignment = "center",
vertical_alignment: WatermarkVerticalAlignment = "center",
x: int = 0,
y: int = 0,
rotation: int = 0,
pages: PdfPageSelection | None = None,
behind_page: bool = False,
extra_query: Query | None = None,
extra_headers: AnyMapping | None = None,
extra_body: Body | None = None,
timeout: TimeoutTypes | None = None,
) -> PdfRestFileBasedResponse:
"""Asynchronously apply a text watermark to a PDF."""

payload: dict[str, Any] = {
"files": file,
"watermark_text": watermark_text,
"output": output,
"font": font,
"text_size": text_size,
"text_color": text_color,
"opacity": opacity,
"horizontal_alignment": horizontal_alignment,
"vertical_alignment": vertical_alignment,
"x": x,
"y": y,
"rotation": rotation,
"pages": pages,
"behind_page": behind_page,
}
payload = {key: value for key, value in payload.items() if value is not None}

return await self._post_file_operation(
endpoint="/watermarked-pdf",
payload=payload,
payload_model=PdfTextWatermarkPayload,
extra_query=extra_query,
extra_headers=extra_headers,
extra_body=extra_body,
timeout=timeout,
)

async def watermark_pdf_with_image(
self,
file: PdfRestFile | Sequence[PdfRestFile],
*,
watermark_file: PdfRestFile | Sequence[PdfRestFile],
output: str | None = None,
watermark_file_scale: float = 0.5,
opacity: float = 0.5,
horizontal_alignment: WatermarkHorizontalAlignment = "center",
vertical_alignment: WatermarkVerticalAlignment = "center",
x: int = 0,
y: int = 0,
rotation: int = 0,
pages: PdfPageSelection | None = None,
behind_page: bool = False,
extra_query: Query | None = None,
extra_headers: AnyMapping | None = None,
extra_body: Body | None = None,
timeout: TimeoutTypes | None = None,
) -> PdfRestFileBasedResponse:
"""Asynchronously apply an image watermark to a PDF."""

payload: dict[str, Any] = {
"files": file,
"watermark_file": watermark_file,
"output": output,
"watermark_file_scale": watermark_file_scale,
"opacity": opacity,
"horizontal_alignment": horizontal_alignment,
"vertical_alignment": vertical_alignment,
"x": x,
"y": y,
"rotation": rotation,
"pages": pages,
"behind_page": behind_page,
}
payload = {key: value for key, value in payload.items() if value is not None}

return await self._post_file_operation(
endpoint="/watermarked-pdf",
payload=payload,
payload_model=PdfImageWatermarkPayload,
extra_query=extra_query,
extra_headers=extra_headers,
extra_body=extra_body,
timeout=timeout,
)

async def convert_to_pdfa(
self,
file: PdfRestFile | Sequence[PdfRestFile],
Expand Down
Loading