Skip to content

Commit ea5eb66

Browse files
Merge pull request #13 from datalogics-cgreen/pdfcloud-5464-add-to-pdf
PDFCLOUD-5548 Add "Add to PDF" client methods
2 parents ab02c6a + 5e04b1e commit ea5eb66

17 files changed

Lines changed: 2438 additions & 6 deletions

src/pdfrest/client.py

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@
8282
GifPdfRestPayload,
8383
JpegPdfRestPayload,
8484
OcrPdfPayload,
85+
PdfAddAttachmentPayload,
86+
PdfAddImagePayload,
87+
PdfAddTextPayload,
8588
PdfCompressPayload,
8689
PdfDecryptPayload,
8790
PdfEncryptPayload,
@@ -120,6 +123,7 @@
120123
GraphicSmoothing,
121124
JpegColorModel,
122125
OcrLanguage,
126+
PdfAddTextObject,
123127
PdfAType,
124128
PdfInfoQuery,
125129
PdfMergeInput,
@@ -2547,6 +2551,72 @@ def apply_redactions(
25472551
timeout=timeout,
25482552
)
25492553

2554+
def add_text_to_pdf(
2555+
self,
2556+
file: PdfRestFile | Sequence[PdfRestFile],
2557+
*,
2558+
text_objects: PdfAddTextObject | Sequence[PdfAddTextObject],
2559+
output: str | None = None,
2560+
extra_query: Query | None = None,
2561+
extra_headers: AnyMapping | None = None,
2562+
extra_body: Body | None = None,
2563+
timeout: TimeoutTypes | None = None,
2564+
) -> PdfRestFileBasedResponse:
2565+
"""Insert one or more text blocks into a PDF."""
2566+
2567+
payload: dict[str, Any] = {
2568+
"files": file,
2569+
"text_objects": text_objects,
2570+
}
2571+
if output is not None:
2572+
payload["output"] = output
2573+
2574+
return self._post_file_operation(
2575+
endpoint="/pdf-with-added-text",
2576+
payload=payload,
2577+
payload_model=PdfAddTextPayload,
2578+
extra_query=extra_query,
2579+
extra_headers=extra_headers,
2580+
extra_body=extra_body,
2581+
timeout=timeout,
2582+
)
2583+
2584+
def add_image_to_pdf(
2585+
self,
2586+
file: PdfRestFile | Sequence[PdfRestFile],
2587+
*,
2588+
image: PdfRestFile | Sequence[PdfRestFile],
2589+
x: int,
2590+
y: int,
2591+
page: int,
2592+
output: str | None = None,
2593+
extra_query: Query | None = None,
2594+
extra_headers: AnyMapping | None = None,
2595+
extra_body: Body | None = None,
2596+
timeout: TimeoutTypes | None = None,
2597+
) -> PdfRestFileBasedResponse:
2598+
"""Insert an image into a single page of a PDF."""
2599+
2600+
payload: dict[str, Any] = {
2601+
"files": file,
2602+
"image": image,
2603+
"x": x,
2604+
"y": y,
2605+
"page": page,
2606+
}
2607+
if output is not None:
2608+
payload["output"] = output
2609+
2610+
return self._post_file_operation(
2611+
endpoint="/pdf-with-added-image",
2612+
payload=payload,
2613+
payload_model=PdfAddImagePayload,
2614+
extra_query=extra_query,
2615+
extra_headers=extra_headers,
2616+
extra_body=extra_body,
2617+
timeout=timeout,
2618+
)
2619+
25502620
def split_pdf(
25512621
self,
25522622
file: PdfRestFile | Sequence[PdfRestFile],
@@ -2973,6 +3043,33 @@ def compress_pdf(
29733043
timeout=timeout,
29743044
)
29753045

3046+
def add_attachment_to_pdf(
3047+
self,
3048+
file: PdfRestFile | Sequence[PdfRestFile],
3049+
*,
3050+
attachment: PdfRestFile | Sequence[PdfRestFile],
3051+
output: str | None = None,
3052+
extra_query: Query | None = None,
3053+
extra_headers: AnyMapping | None = None,
3054+
extra_body: Body | None = None,
3055+
timeout: TimeoutTypes | None = None,
3056+
) -> PdfRestFileBasedResponse:
3057+
"""Attach an uploaded file to a PDF."""
3058+
3059+
payload: dict[str, Any] = {"files": file, "attachment": attachment}
3060+
if output is not None:
3061+
payload["output"] = output
3062+
3063+
return self._post_file_operation(
3064+
endpoint="/pdf-with-added-attachment",
3065+
payload=payload,
3066+
payload_model=PdfAddAttachmentPayload,
3067+
extra_query=extra_query,
3068+
extra_headers=extra_headers,
3069+
extra_body=extra_body,
3070+
timeout=timeout,
3071+
)
3072+
29763073
def flatten_transparencies(
29773074
self,
29783075
file: PdfRestFile | Sequence[PdfRestFile],
@@ -3792,6 +3889,72 @@ async def apply_redactions(
37923889
timeout=timeout,
37933890
)
37943891

3892+
async def add_text_to_pdf(
3893+
self,
3894+
file: PdfRestFile | Sequence[PdfRestFile],
3895+
*,
3896+
text_objects: PdfAddTextObject | Sequence[PdfAddTextObject],
3897+
output: str | None = None,
3898+
extra_query: Query | None = None,
3899+
extra_headers: AnyMapping | None = None,
3900+
extra_body: Body | None = None,
3901+
timeout: TimeoutTypes | None = None,
3902+
) -> PdfRestFileBasedResponse:
3903+
"""Asynchronously insert text blocks into a PDF."""
3904+
3905+
payload: dict[str, Any] = {
3906+
"files": file,
3907+
"text_objects": text_objects,
3908+
}
3909+
if output is not None:
3910+
payload["output"] = output
3911+
3912+
return await self._post_file_operation(
3913+
endpoint="/pdf-with-added-text",
3914+
payload=payload,
3915+
payload_model=PdfAddTextPayload,
3916+
extra_query=extra_query,
3917+
extra_headers=extra_headers,
3918+
extra_body=extra_body,
3919+
timeout=timeout,
3920+
)
3921+
3922+
async def add_image_to_pdf(
3923+
self,
3924+
file: PdfRestFile | Sequence[PdfRestFile],
3925+
*,
3926+
image: PdfRestFile | Sequence[PdfRestFile],
3927+
x: int,
3928+
y: int,
3929+
page: int,
3930+
output: str | None = None,
3931+
extra_query: Query | None = None,
3932+
extra_headers: AnyMapping | None = None,
3933+
extra_body: Body | None = None,
3934+
timeout: TimeoutTypes | None = None,
3935+
) -> PdfRestFileBasedResponse:
3936+
"""Asynchronously insert an image into a PDF."""
3937+
3938+
payload: dict[str, Any] = {
3939+
"files": file,
3940+
"image": image,
3941+
"x": x,
3942+
"y": y,
3943+
"page": page,
3944+
}
3945+
if output is not None:
3946+
payload["output"] = output
3947+
3948+
return await self._post_file_operation(
3949+
endpoint="/pdf-with-added-image",
3950+
payload=payload,
3951+
payload_model=PdfAddImagePayload,
3952+
extra_query=extra_query,
3953+
extra_headers=extra_headers,
3954+
extra_body=extra_body,
3955+
timeout=timeout,
3956+
)
3957+
37953958
async def up(
37963959
self,
37973960
*,
@@ -4260,6 +4423,33 @@ async def compress_pdf(
42604423
timeout=timeout,
42614424
)
42624425

4426+
async def add_attachment_to_pdf(
4427+
self,
4428+
file: PdfRestFile | Sequence[PdfRestFile],
4429+
*,
4430+
attachment: PdfRestFile | Sequence[PdfRestFile],
4431+
output: str | None = None,
4432+
extra_query: Query | None = None,
4433+
extra_headers: AnyMapping | None = None,
4434+
extra_body: Body | None = None,
4435+
timeout: TimeoutTypes | None = None,
4436+
) -> PdfRestFileBasedResponse:
4437+
"""Asynchronously attach an uploaded file to a PDF."""
4438+
4439+
payload: dict[str, Any] = {"files": file, "attachment": attachment}
4440+
if output is not None:
4441+
payload["output"] = output
4442+
4443+
return await self._post_file_operation(
4444+
endpoint="/pdf-with-added-attachment",
4445+
payload=payload,
4446+
payload_model=PdfAddAttachmentPayload,
4447+
extra_query=extra_query,
4448+
extra_headers=extra_headers,
4449+
extra_body=extra_body,
4450+
timeout=timeout,
4451+
)
4452+
42634453
async def flatten_transparencies(
42644454
self,
42654455
file: PdfRestFile | Sequence[PdfRestFile],

0 commit comments

Comments
 (0)