Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Lucksi
GitHub Repository: Lucksi/Mr.Holmes
Path: blob/master/Core/PDF_Converter.py
1071 views
1
# ORIGINAL CREATOR: Luca Garofalo (Lucksi)
2
# AUTHOR: Luca Garofalo (Lucksi)
3
# Copyright (C) 2023 Lucksi <[email protected]>
4
# License: GNU General Public License v3.0
5
6
import os
7
import pdfkit
8
import base64
9
from time import sleep
10
from Core.Support import Font
11
from Core.Support import Language
12
from Core.Support import DateFormat
13
from Core.Support import Clear
14
from Core.Support import Creds
15
from Core.Support import FileTransfer
16
from Core.Support import Banner_Selector as banner
17
from datetime import datetime
18
from bs4 import BeautifulSoup as soup
19
20
langfile = Language.Translation.Get_Language()
21
langfile
22
23
class Menu:
24
25
@staticmethod
26
def Banner(Mode):
27
Clear.Screen.Clear()
28
Folder = "Banners/Pdf"
29
banner.Random.Get_Banner(Folder, Mode)
30
31
@staticmethod
32
def CreateTemplate(Template,Content,filename,htmlcontent,username):
33
now = datetime.now()
34
dataformat = DateFormat.Get.Format()
35
dt_string = now.strftime(dataformat)
36
Date = str(dt_string)
37
if Template == 1:
38
style = '<link rel = "stylesheet" href= "../../Css/Light/Pdf.css">'
39
theme = "LIGHT"
40
elif Template == 2:
41
style = '<link rel = "stylesheet" href= "../../Css/Dark/Pdf.css">'
42
theme = "DARK"
43
else:
44
style = '<link rel = "stylesheet" href= "../../Css/High-Contrast/Pdf.css">'
45
theme = "HIGH-CONTRAST"
46
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE + Language.Translation.Translate_Language(
47
langfile, "PDF", "Selected", "None").format(Font.Color.GREEN + theme + Font.Color.WHITE))
48
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE + Language.Translation.Translate_Language(
49
langfile, "PDF", "Creation", "None"))
50
sleep(3)
51
header = '''<html>
52
<head>
53
{}
54
<meta charset = "utf-8">
55
</head>
56
<body>
57
<p>PDF REPORT FOR {} GRAPH</p>
58
<div class = "Metadata">
59
<p id = "Bold">METADATA:</p>
60
<p>PDF GENERATED BY MR.HOLMES</p>
61
<p>GENERATED ON: {}</p>
62
<p>MR.HOLMES DOWNLOAD LINK: https//github.com/Lucksi/Mr.Holmes</p>
63
</div>
64
<br>
65
{}
66
</body>
67
</html>'''.format(style,username,Date,str(Content)).replace("../Reports","GUI/Reports").replace("../Icon","GUI/Icon").replace("\n","").replace("''","")
68
filename = filename.replace(".mh",".html")
69
f = open(filename,"w")
70
f.write(header)
71
f.close()
72
reader = open(filename,"r",newline=None)
73
htmlcontent = reader.read()
74
reader.close()
75
parser = soup(htmlcontent,"html.parser")
76
List = []
77
Encoded = []
78
Links = []
79
images = parser.find_all("img")
80
links = parser.find_all("a")
81
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE + Language.Translation.Translate_Language(
82
langfile, "PDF", "Image", "None"))
83
sleep(4)
84
for image in images:
85
img = image["src"]
86
List.append(img)
87
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE + "IMAGE FOUND: {}".format(img))
88
for element in List:
89
if "https://" in element:
90
image["src"]=element
91
else:
92
with open(element, "rb") as img_file:
93
encoded = base64.b64encode(img_file.read())
94
enco = "data:image/png;base64, " + str(encoded).replace("b'","").strip("'")
95
Encoded.append(enco)
96
image["src"]=enco
97
for link in links:
98
Link = link["href"]
99
Links.append(Link)
100
for element in Links:
101
if "https://" in element:
102
link["href"]=element
103
else:
104
link["href"]=""
105
106
print(Font.Color.YELLOW + "[v]" + Font.Color.WHITE + "IMAGE ENCODED...")
107
sleep(2)
108
html = parser.contents
109
with open(filename, "w+") as file:
110
file.write(str(html).replace("[","").strip("]"))
111
pdf_name = "GUI/PDF/{}.pdf".format(username)
112
try:
113
pdfkit.from_file(filename, pdf_name)
114
except Exception as e:
115
print(Font.Color.RED + "[!]" + Font.Color.WHITE + "SOMETHING WENT WRONG PDF TEMPLETE MAY BE INCOMPLETE: " + str(e))
116
print(Font.Color.WHITE + Language.Translation.Translate_Language(langfile, "Default", "Report", "None") +
117
pdf_name)
118
Creds.Sender.mail(pdf_name, username)
119
choice = int(input(
120
Font.Color.BLUE + "\n[?]" + Font.Color.WHITE + Language.Translation.Translate_Language(langfile, "Transfer", "Question", "None") + Font.Color.GREEN + "[#MR.HOLMES#]" + Font.Color.WHITE + "-->"))
121
if choice == 1:
122
FileTransfer.Transfer.File(pdf_name,username,".pdf")
123
os.remove(filename)
124
125
126
@staticmethod
127
def Main(username,Mode):
128
if os.name == "nt":
129
print(Font.Color.RED + "\n[!]" + Font.Color.WHITE + Language.Translation.Translate_Language(
130
langfile, "PDF", "WinError", "None"))
131
else:
132
Menu.Banner(Mode)
133
print(Font.Color.BLUE + "\n[I]" + Font.Color.WHITE + "INFO:" + "[{}]".format(Font.Color.GREEN + Language.Translation.Translate_Language(langfile,"PDF","Explanation","None") + Font.Color.WHITE) )
134
username2 = username.replace(" ","_")
135
encoded = "GUI/Graphs/{}/encode.mh".format(username2)
136
filename = "GUI/Graphs/{}/{}.mh".format(username2,username)
137
encode = open(encoded,"r")
138
mode = encode.read()
139
encode.close()
140
reader = open(filename,"r+",encoding="utf-8")
141
f = reader.read()
142
reader.close()
143
print(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE + Language.Translation.Translate_Language(
144
langfile, "PDF", "Check", "None"))
145
sleep(3)
146
if mode == "Encoded":
147
encodingString = f.encode("utf-8")
148
Base64_Byte = base64.b64decode(encodingString)
149
FinalString = Base64_Byte.decode("utf-8")
150
f = FinalString
151
else:
152
pass
153
template = int(input(Font.Color.GREEN + "\n[+]" + Font.Color.WHITE + Language.Translation.Translate_Language(
154
langfile, "PDF", "Template", "None") + Font.Color.GREEN + "\n\n[#MR.HOLMES#]" + Font.Color.WHITE + "-->"))
155
htmlcontent = ""
156
Menu.CreateTemplate(template,f,filename,htmlcontent,username)
157
inp = input(Language.Translation.Translate_Language(
158
langfile, "Default", "Continue", "None"))
159
160