-
Notifications
You must be signed in to change notification settings - Fork 2
/
api2pdf.py
181 lines (152 loc) · 6.74 KB
/
api2pdf.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
import requests
import json
class Api2Pdf(object):
def __init__(self, api_key, base_url='https://v2.api2pdf.com', tag=''):
self.api_key = api_key
self.tag = tag
self.base_url = base_url
@property
def WkHtml(self):
return Api2Pdf_WkHtml(self.api_key, self.base_url)
@property
def Chrome(self):
return Api2Pdf_Chrome(self.api_key, self.base_url)
@property
def LibreOffice(self):
return Api2Pdf_LibreOffice(self.api_key, self.base_url)
@property
def PdfSharp(self):
return Api2Pdf_PdfSharp(self.api_key, self.base_url)
def delete(self, response_id):
headers = self.request_header
endpoint = f'/file/{response_id}'.format(response_id=response_id)
full_endpoint = self.base_url + endpoint
response = requests.delete(full_endpoint, headers=headers)
return Api2PdfResponse(headers, full_endpoint, '', response)
def _build_base_payload(self, inline=True, file_name=None, **options):
payload = {
'inline': inline
}
if file_name != None:
payload['fileName'] = file_name
if options != None:
payload['options'] = options
return payload
def _make_request(self, endpoint, payload):
headers = self.request_header
payload_as_json = json.dumps(payload)
full_endpoint = self.base_url + endpoint
response = requests.post(full_endpoint, data=payload_as_json, headers=headers)
return Api2PdfResponse(headers, full_endpoint, payload, response)
@property
def request_header(self):
header = {}
header['Authorization'] = self.api_key
if self.tag:
header['Tag'] = self.tag
return header
class Api2Pdf_WkHtml(Api2Pdf):
def html_to_pdf(self, html, inline=True, file_name=None, **options):
payload = self._build_base_payload(inline, file_name, **options)
payload['html'] = html
return self._make_request('/wkhtml/pdf/html', payload)
def url_to_pdf(self, url, inline=True, file_name=None, **options):
payload = self._build_base_payload(inline, file_name, **options)
payload['url'] = url
return self._make_request('/wkhtml/pdf/url', payload)
class Api2Pdf_Chrome(Api2Pdf):
def html_to_pdf(self, html, inline=True, file_name=None, **options):
payload = self._build_base_payload(inline, file_name, **options)
payload['html'] = html
return self._make_request('/chrome/pdf/html', payload)
def url_to_pdf(self, url, inline=True, file_name=None, **options):
payload = self._build_base_payload(inline, file_name, **options)
payload['url'] = url
return self._make_request('/chrome/pdf/url', payload)
def html_to_image(self, html, inline=True, file_name=None, **options):
payload = self._build_base_payload(inline, file_name, **options)
payload['html'] = html
return self._make_request('/chrome/image/html', payload)
def url_to_image(self, url, inline=True, file_name=None, **options):
payload = self._build_base_payload(inline, file_name, **options)
payload['url'] = url
return self._make_request('/chrome/image/url', payload)
class Api2Pdf_LibreOffice(Api2Pdf):
def any_to_pdf(self, url, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['url'] = url
return self._make_request('/libreoffice/any-to-pdf', payload)
def thumbnail(self, url, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['url'] = url
return self._make_request('/libreoffice/thumbnail', payload)
def pdf_to_html(self, url, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['url'] = url
return self._make_request('/libreoffice/pdf-to-html', payload)
def html_to_docx(self, url, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['url'] = url
return self._make_request('/libreoffice/html-to-docx', payload)
def html_to_xlsx(self, url, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['url'] = url
return self._make_request('/libreoffice/html-to-xlsx', payload)
class Api2Pdf_PdfSharp(Api2Pdf):
def merge(self, urls, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['urls'] = urls
return self._make_request('/pdfsharp/merge', payload)
def add_bookmarks(self, url, bookmarks, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['url'] = url
payload['bookmarks'] = bookmarks
return self._make_request('/pdfsharp/bookmarks', payload)
def add_password(self, url, userpassword, ownerpassword=None, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['url'] = url
payload['userpassword'] = userpassword
if ownerpassword != None:
payload['ownerpassword'] = ownerpassword
return self._make_request('/pdfsharp/password', payload)
def extract_pages(self, url, start=0, end=0, inline=True, file_name=None):
payload = self._build_base_payload(inline, file_name)
payload['url'] = url
payload['start'] = start
payload['end'] = end
return self._make_request('/pdfsharp/extract-pages', payload)
class Api2PdfResponse(object):
def __init__(self, headers, endpoint, payload_as_json, response):
self.headers = headers
self.endpoint = endpoint
self.payload_as_json = payload_as_json
self._result = json.loads(response.text)
@property
def request(self):
request_info = {
'headers': self.headers,
'endpoint': self.endpoint,
'payload': self.payload_as_json,
}
return request_info
@property
def result(self):
return self._result
def download_file(self):
USERAGENT = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
if self.result['Success']:
downloaded_file = requests.get(self.result['FileUrl'], headers=USERAGENT)
data = downloaded_file.content
return data
else:
raise FileNotFoundError("File never generated " + self.result['error'])
def __str__(self):
return """
---- API2PDF REQUEST ----
- Headers: {0}
- Endpoint: {1}
- Payload:
{2}
---- API2PDF RESPONSE ----
{3}
""".format(self.headers, self.endpoint, self.payload_as_json, self.result)