Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from fpdf import fpdf, html
- import os
- import re
- from PyPDF2 import PdfMerger
- def read_text_from_file(file_path):
- """
- Aceasta functie returneaza continutul unui fisier.
- file_path: calea catre fisierul din care vrei sa citesti
- """
- with open(file_path, encoding='utf8', errors='ignore') as f:
- text = f.read()
- f.close()
- return text
- def write_to_file(text, file_path):
- """
- Aceasta functie scrie un text intr-un fisier.
- text: textul pe care vrei sa il scrii
- file_path: calea catre fisierul in care vrei sa scrii
- """
- with open(file_path, 'wb') as f:
- f.write(text.encode('utf8', 'ignore'))
- f.close()
- dict_simboluri = dict()
- dict_simboluri['ă'] = 'ă'
- dict_simboluri['â'] = 'â'
- dict_simboluri['ã'] = 'ã'
- dict_simboluri['â'] = 'â'
- dict_simboluri['ă'] = 'ă'
- dict_simboluri['â'] = 'a'
- dict_simboluri[' '] = ' '
- dict_simboluri['î'] = 'î'
- dict_simboluri['Î'] = 'Î'
- dict_simboluri['î'] = 'î'
- dict_simboluri['î'] = 'î'
- dict_simboluri['Î'] = 'Î'
- dict_simboluri['Î'] = 'Î'
- dict_simboluri['î'] = 'î'
- dict_simboluri['Î'] = 'i'
- dict_simboluri['Î'] = 'Î'
- dict_simboluri[' '] = ' '
- dict_simboluri['ș'] = 'ș'
- dict_simboluri['Ș'] = 'Ș'
- dict_simboluri['Ş'] = 'Ş'
- dict_simboluri['ș'] = 'ș'
- dict_simboluri['ş'] = 'ș'
- dict_simboluri['&'] = ''
- dict_simboluri['ț'] = 'ț'
- dict_simboluri['ţ'] = 'ț'
- dict_simboluri['Ţ'] = 'Ţ'
- dict_simboluri['ț'] = 'ț'
- dict_simboluri['”'] = '"'
- dict_simboluri['“'] = '"'
- dict_simboluri['&'] = ''
- def save_to_pdf(directory_path):
- modified_files = []
- file_count = 0
- for root, dirs, files in os.walk(directory_path):
- for file_name in files:
- if file_name.endswith(".html"):
- try:
- # ignora fisierele care contin 'webinar' in numele lor
- if "webinar" in file_name:
- print(f"Fișierul {file_name} conține 'webinar' în numele său și va fi ignorat.")
- continue
- file_path = root + os.sep + file_name
- file_content = read_text_from_file(file_path)
- # ignora fisierele care contin 'https://pastebin.com' in continutul lor
- if "https://pastebin.com" in file_content:
- print(f"Fișierul {file_name} conține 'https://pastebin.com' în conținutul său și va fi ignorat.")
- continue
- # creare fisier PDF
- class PDF(fpdf.FPDF, html.HTMLMixin):
- pass
- if '<!-- ARTICOL START -->' in file_content:
- pdf = PDF()
- pdf.add_page()
- pdf.add_font("Kanit", fname="e:/Carte/BB/17 - Site Leadership/alte/Ionel Balauta/Aryeht/Task 1 - Traduce tot site-ul/Doar Google Web/Andreea/Meditatii/Sedinta 20 august 2022/fonts/Kanit-Regular.ttf", uni=True)
- pdf.add_font("Kanit", style="B", fname="e:/Carte/BB/17 - Site Leadership/alte/Ionel Balauta/Aryeht/Task 1 - Traduce tot site-ul/Doar Google Web/Andreea/Meditatii/Sedinta 20 august 2022/fonts/Kanit-Bold.ttf", uni=True)
- pdf.add_font("Kanit", style="I", fname="e:/Carte/BB/17 - Site Leadership/alte/Ionel Balauta/Aryeht/Task 1 - Traduce tot site-ul/Doar Google Web/Andreea/Meditatii/Sedinta 20 august 2022/fonts/Kanit-Italic.ttf", uni=True)
- pdf.add_font("Kanit", style="BI", fname="e:/Carte/BB/17 - Site Leadership/alte/Ionel Balauta/Aryeht/Task 1 - Traduce tot site-ul/Doar Google Web/Andreea/Meditatii/Sedinta 20 august 2022/fonts/Kanit-BoldItalic.ttf", uni=True)
- pdf.set_font("Kanit", size=24)
- # extras denumire articol
- den_articol = re.search('<h1 class="den_articol" itemprop="name">(.*?)</h1>', file_content) # TITLU ARTICOL
- if (den_articol == None):
- print("Nu am gasit --- denumire articol --- in fisierul --- {} ---.".format(file_path))
- else:
- den_articol = den_articol.group(1)
- for simbol in dict_simboluri.keys():
- den_articol = den_articol.replace(simbol, dict_simboluri[simbol])
- pdf.set_text_color(204, 0, 0) # rosu
- pdf.set_font('Kanit', size=14, style="B")
- pdf.multi_cell(w=190, txt=den_articol)
- pdf.ln()
- pdf.set_font('Kanit', size=12)
- # extras data
- date = re.search('<td class="text_dreapta">(.*?), in <a', file_content) # DATA ARTICOLULUI
- if (date == None):
- print("Nu am gasit --- date --- in fisierul --- {} ---.".format(file_path))
- else:
- date = date.group(1)
- pdf.set_text_color(0, 102, 204) # albastru
- pdf.set_font('Kanit', size=8, style="B")
- pdf.cell(txt=date)
- pdf.ln()
- pdf.ln()
- pdf.ln()
- pdf.ln()
- pdf.set_text_color(0, 0, 0) # negru (default)
- pdf.set_font('Kanit', size=12)
- # extras text
- # articol = re.search('<!-- ARTICOL START -->([\s\S]*?)<!-- ARTICOL FINAL -->', file_content)
- articol = re.search(r'<!-- ARTICOL START -->([\s\S]*?)<!-- ARTICOL FINAL -->', file_content)
- if (articol == None):
- print("Nu am gasit --- ARTICOL START/FINAL --- in fisierul --- {} ---.".format(file_path))
- else:
- articol = articol.group(1)
- articol = articol.replace(""", "\"")
- articol = articol.replace("’", "'")
- # paragraphs
- par_regex = re.compile('<p class="text_obisnuit.*?">.*?</p>')
- pars = re.findall(par_regex, articol)
- pars_text = list()
- if (len(pars) == 0):
- print("Nu am gasit -- paragrafe text_obisnuit -- in fisierul --- {} ---.".format(file_path))
- else:
- for i in range(0, len(pars)):
- pars_text = [] # reinițializează lista la începutul fiecărei iterații
- if ('<p class="text_obisnuit">' in pars[i]):
- # identificam clasa text_obisnuit si preluam textul
- content = re.findall('<p class="text_obisnuit">(.*?)</p>', pars[i])
- if (len(content) == 0):
- print("Nu am gasit text in paragraful {}, fisierul {}.".format(pars[i], file_path))
- else:
- # punem textul intr-o celula multi_cell
- for simbol in dict_simboluri.keys():
- content[0] = content[0].replace(simbol, dict_simboluri[simbol])
- content[0] = re.sub('<img[^>]*>', '', content[0]) # linia nou adăugată
- pars_text.append(content[0])
- pdf.write_html(text=f'<p class="text_obisnuit">{content[0]}</p>')
- # adaugam linie goala intre paragrafe
- pdf.ln();
- elif ('<p class="text_obisnuit2">' in pars[i]):
- # identificam clasa text_obisnuit2 si preluam textul
- content = re.findall('<p class="text_obisnuit2">(.*?)</p>', pars[i])
- if (len(content) == 0):
- print("Nu am gasit text in paragraful {}, fisierul {}.".format(pars[i], file_path))
- else:
- # setam fontul cu bold
- pdf.set_font('Kanit', size=12, style="B")
- # punem textul intr-o celula multi_cell
- for simbol in dict_simboluri.keys():
- content[0] = content[0].replace(simbol, dict_simboluri[simbol])
- pars_text.append(content[0])
- # pdf.multi_cell(w=190, txt = content[0])
- pdf.write_html(text=f'<p class="text_obisnuit2"><b>{content[0]}</b></p>')
- # adaugam linie goala intre paragrafe
- pdf.ln();
- # resetam fontul
- pdf.set_font('Kanit', size=12)
- else:
- continue
- # adaugare link
- pdf.ln()
- pdf.ln()
- pdf.set_font('Kanit', size=12, style="B")
- pdf.cell(txt="Source:")
- pdf.set_font('Kanit', size=12)
- pdf.set_text_color(0, 102, 204) # albastru
- # pdf.cell(w=40, txt="https://neculaifantanaru.com/{}".format(file_name), link="https://neculaifantanaru.com/{}".format(file_name))
- pdf.cell(w=40, txt="https://neculaifantanaru.com/en/{}".format(file_name), link="https://neculaifantanaru.com/en/{}".format(file_name)) # ENGLEZA
- den_fisier = file_path.split('.')[0] + '.pdf'
- pdf.output(den_fisier)
- # break;
- # la sfârșitul procesării fiecărui fișier HTML:
- modified_files.append(file_name)
- file_count += 1
- print(f"Fișierul {file_count}: {file_name} a fost modificat.")
- except Exception as e:
- print(f"Eroare la procesarea fișierului {file_name}: {e}")
- # Poți continua bucla sau utiliza 'break' sau 'continue' în funcție de necesități.
- continue
- # la sfârșitul funcției, puteți afișa toate fișierele modificate:
- print(f"\nAu fost modificate {file_count} fișiere:")
- for i, file_name in enumerate(modified_files, 1):
- print(f"{i}. {file_name}")
- # functie care face merge la mai multe fisiere pdf
- def merge_pdf_files(directory_path):
- merger = PdfMerger()
- for root, dirs, files in os.walk(directory_path):
- for file_name in files:
- if file_name.endswith(".pdf"):
- print("PDF: ", file_name)
- file_path = root + os.sep + file_name
- merger.append(file_path)
- merger.write(root + os.sep + "articles.pdf")
- merger.close()
- # adaugare link
- pdf.ln()
- pdf.ln()
- pdf.set_font('Kanit', size=12, style="B")
- pdf.cell(txt="Source:")
- pdf.set_font('Kanit', size=12)
- pdf.set_text_color(0, 102, 204) # albastru
- pdf.cell(w=40, txt="https://neculaifantanaru.com/{}".format(file_name), link="https://neculaifantanaru.com/{}".format(file_name))
- den_fisier = file_path.split('.')[0] + '.pdf'
- pdf.output(den_fisier)
- # break;
- # la sfârșitul procesării fiecărui fișier HTML:
- modified_files.append(file_name)
- file_count += 1
- print(f"Fișierul {file_count}: {file_name} a fost modificat.")
- # la sfârșitul funcției, puteți afișa toate fișierele modificate:
- print(f"\nAu fost modificate {file_count} fișiere:")
- for i, file_name in enumerate(modified_files, 1):
- print(f"{i}. {file_name}")
- # functie care face merge la mai multe fisiere pdf
- def merge_pdf_files(directory_path):
- merger = PdfMerger()
- for root, dirs, files in os.walk(directory_path):
- for file_name in files:
- if file_name.endswith(".pdf"):
- print("PDF: ", file_name)
- file_path = root + os.sep + file_name
- merger.append(file_path)
- merger.write(root + os.sep + "articles.pdf")
- merger.close()
- break;
- # apoi apelați funcția:
- save_to_pdf("c:\\Folder9\\")
- merge_pdf_files("c:\\Folder9\\")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement