Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from fpdf import fpdf, html
- from fpdf import FPDF
- import os
- import re
- from PyPDF2 import PdfFileMerger
- dict_simboluri = {
- 'ă': 'ă',
- 'â': 'â',
- 'ã': 'ã',
- 'â': 'â',
- 'ă': 'ă',
- 'â': 'a',
- ' ': ' ',
- 'î': 'î',
- 'Î': 'Î',
- 'î': 'î',
- 'î': 'î',
- 'Î': 'Î',
- 'Ș': 'Ș',
- 'ș': 'ș',
- 'Ş': 'Ş',
- 'ș': 'ș',
- 'ş': 'ș',
- ' ': ' ',
- 'ț': 'ț',
- 'ţ': 'ț',
- 'Ţ': 'Ţ',
- 'ț': 'ț',
- '&': ''
- }
- class PDF(FPDF):
- def set_pdf_title(self, file_path):
- title = '' # Inițializează titlul cu un șir vid
- with open(file_path, 'r', encoding='utf-8') as file:
- file_content = file.read()
- title_match = re.search('<title>(.*?) \|', file_content)
- if title_match:
- title = title_match.group(1).strip()
- if title: # Verifică dacă s-a găsit un titlu
- self.set_font('Kanit', 'B', 12)
- self.cell(0, 10, f'Articole {title}', 0, 1, 'C')
- else:
- self.set_font('Kanit', 'B', 12)
- self.cell(0, 10, 'Articole', 0, 1, 'C')
- def header(self):
- self.set_pdf_title(self.file_path)
- def chapter_title(self, title):
- self.set_font('Kanit', 'B', 14) # dimensiune 14, stil bold
- self.set_text_color(204, 0, 0) # rosu pentru titlu
- self.cell(0, 10, title, 0, 1, 'L')
- self.set_text_color(0, 0, 0) # resetează culoarea la negru
- def chapter_date(self, date):
- self.set_font('Kanit', '', 12) # dimensiune 12, stil normal
- self.cell(0, 10, date, 0, 1, 'L')
- def chapter_body(self, lead):
- self.set_font('Kanit', '', 12) # dimensiune 12, stil normal
- self.cell(0, 10, lead, 0, 1, 'L')
- def add_link(self, link):
- self.set_font('Kanit', '', 12) # dimensiune 12, stil normal
- self.set_text_color(0, 0, 255) # albastru pentru link
- self.cell(0, 10, 'Link: ' + link, 0, 1, 'L', link=link)
- self.set_text_color(0, 0, 0) # resetează culoarea la negru
- def save_to_pdf(directory_path):
- for root, dirs, files in os.walk(directory_path):
- for file_name in files:
- if file_name.endswith(".html"):
- file_path = os.path.join(root, file_name)
- with open(file_path, 'r', encoding='utf-8') as file:
- file_content = file.read()
- if '<!-- ARTICOL CATEGORIE START -->' in file_content:
- # creare fisier PDF
- pdf = PDF()
- pdf.set_auto_page_break(auto=True, margin=15)
- pdf.add_font("Kanit", fname="fonts/Kanit-Regular.ttf")
- pdf.add_font("Kanit", style="B", fname="fonts/Kanit-Bold.ttf")
- pdf.add_font("Kanit", style="I", fname="fonts/Kanit-Italic.ttf")
- pdf.add_font("Kanit", style="BI", fname="fonts/Kanit-BoldItalic.ttf")
- pdf.set_font("Kanit", size=12)
- pdf.file_path = file_path # Setează calea fișierului curent
- titluri_articole = re.findall('class="linkMare">(.*?)</a></span>', file_content)
- date_articole = re.findall('<td class="text_dreapta">(.*?), in <a href="', file_content)
- leads_articole = re.findall('<p class="text_obisnuit2"><em>(.*?)</em></p>', file_content)
- linkuri_articole = re.findall('id="external2"><a href="(.*)">citeşte', file_content)
- if len(titluri_articole) == len(date_articole) == len(leads_articole) == len(linkuri_articole):
- pdf.add_page()
- for i in range(len(titluri_articole)):
- titlu_articol = titluri_articole[i]
- for simbol in dict_simboluri.keys():
- titlu_articol = titlu_articol.replace(simbol, dict_simboluri[simbol])
- data_articol = date_articole[i]
- lead_articol = leads_articole[i]
- for simbol in dict_simboluri.keys():
- lead_articol = lead_articol.replace(simbol, dict_simboluri[simbol])
- link_articol = ''
- if i < len(linkuri_articole): # Verifică dacă există un link disponibil
- link_articol = linkuri_articole[i]
- pdf.chapter_title(titlu_articol)
- pdf.chapter_date(data_articol)
- pdf.chapter_body(lead_articol)
- pdf.add_link(link_articol)
- pdf.cell(0, 10, '-------------------', 0, 1, 'L')
- den_fisier = file_path.split('.')[0] + '.pdf'
- pdf.output(den_fisier)
- else:
- print("Numarul de titluri, date, leads sau linkuri nu se potrivesc în fișierul --- {} ---.".format(file_path))
- print("Titluri: ", len(titluri_articole))
- print("Date: ", len(date_articole))
- print("Leads: ", len(leads_articole))
- print("Linkuri: ", len(linkuri_articole))
- def merge_pdf_files(directory_path):
- merger = PdfFileMerger()
- 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 = os.path.join(root, file_name)
- merger.append(file_path)
- merger.write(os.path.join(root, "articles.pdf"))
- merger.close()
- break
- directory_path = "c:\\Folder5\\" # înlocuiește cu calea către directorul cu fișierele HTML
- save_to_pdf(directory_path)
- merge_pdf_files(directory_path)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement