|
|
@@ -0,0 +1,152 @@
|
|
|
+from fpdf import FPDF
|
|
|
+from generate_qr import generate_qr_code
|
|
|
+from section import Section
|
|
|
+from get_antiwar import get_antiwar_article
|
|
|
+import re
|
|
|
+
|
|
|
+
|
|
|
+class PDF(FPDF):
|
|
|
+ def header(self):
|
|
|
+ self.set_font("helvetica", style="B", size=15)
|
|
|
+ width = self.get_string_width(self.title) + 6
|
|
|
+ self.set_x((210 - width) / 2)
|
|
|
+ # self.set_draw_color(0, 80, 180)
|
|
|
+ # self.set_fill_color(230, 230, 0)
|
|
|
+ # self.set_text_color(220, 50, 50)
|
|
|
+ self.set_line_width(.1)
|
|
|
+ self.cell(
|
|
|
+ width,
|
|
|
+ 9,
|
|
|
+ self.title,
|
|
|
+ border=1,
|
|
|
+ new_x="LMARGIN",
|
|
|
+ new_y="NEXT",
|
|
|
+ align="C",
|
|
|
+ fill=False,
|
|
|
+ )
|
|
|
+ self.ln(10)
|
|
|
+
|
|
|
+ def footer(self):
|
|
|
+ self.set_y(-15)
|
|
|
+ self.set_font("helvetica", style="I", size=8)
|
|
|
+ self.set_text_color(128)
|
|
|
+ self.cell(0, 10, f"Page {self.page_no()}", align="C")
|
|
|
+
|
|
|
+pdf = PDF()
|
|
|
+
|
|
|
+pdf.set_title("Paper News Test")
|
|
|
+
|
|
|
+pdf.add_page()
|
|
|
+# pdf.set_text_shaping(True)
|
|
|
+
|
|
|
+awa = get_antiwar_article()
|
|
|
+
|
|
|
+col_width = 60
|
|
|
+
|
|
|
+pdf.set_font('helvetica', style="b", size=12)
|
|
|
+
|
|
|
+top = pdf.get_y()
|
|
|
+left = pdf.get_x()
|
|
|
+
|
|
|
+pdf.multi_cell(
|
|
|
+ w=col_width,
|
|
|
+ h=5,
|
|
|
+ text=awa.title,
|
|
|
+ border=False,
|
|
|
+ new_x="LMARGIN",
|
|
|
+ new_y="NEXT")
|
|
|
+
|
|
|
+pdf.set_font("Helvetica", size=8)
|
|
|
+
|
|
|
+pdf.multi_cell(
|
|
|
+ w=col_width,
|
|
|
+ h=8,
|
|
|
+ text=awa.author,
|
|
|
+ border=False,
|
|
|
+ new_x="LMARGIN",
|
|
|
+ new_y="NEXT")
|
|
|
+
|
|
|
+pdf.multi_cell(
|
|
|
+ w=col_width,
|
|
|
+ h=8,
|
|
|
+ text=awa.published,
|
|
|
+ border=False,
|
|
|
+ new_x="LMARGIN",
|
|
|
+ new_y="NEXT")
|
|
|
+
|
|
|
+
|
|
|
+transchars = str.maketrans({"’": "\'", "“": "\"", "”": "\"", "–": "-"})
|
|
|
+awatext = awa.text.translate(transchars)[:1000]
|
|
|
+
|
|
|
+awatext = re.sub(r'[^a-zA-Z]+$', '', awatext)
|
|
|
+
|
|
|
+# while awatext and not awatext[-1].isalpha():
|
|
|
+# awatext = awatext[:-1]
|
|
|
+
|
|
|
+
|
|
|
+pdf.multi_cell(
|
|
|
+ w=col_width,
|
|
|
+ h=None,
|
|
|
+ text=awatext + '...',
|
|
|
+ border=False,
|
|
|
+ new_x="LMARGIN",
|
|
|
+ new_y="NEXT")
|
|
|
+
|
|
|
+pdf.set_y(pdf.get_y() + 10)
|
|
|
+pdf.image(generate_qr_code(awa.link), x=pdf.get_x() + col_width/4, y=None, h=col_width/2)
|
|
|
+pdf.set_y(pdf.get_y() + 3)
|
|
|
+
|
|
|
+pdf.set_font('helvetica', size=8)
|
|
|
+pdf.multi_cell(
|
|
|
+ w=col_width,
|
|
|
+ h=None,
|
|
|
+ text='Read more at antiwar.com',
|
|
|
+ align="C",
|
|
|
+ border=False,
|
|
|
+ new_x="LMARGIN",
|
|
|
+ new_y="TOP")
|
|
|
+
|
|
|
+col_space=5
|
|
|
+pdf.set_xy(left + col_width + col_space,top)
|
|
|
+
|
|
|
+pdf.multi_cell(
|
|
|
+ w=col_width,
|
|
|
+ h=None,
|
|
|
+ text=awatext + '...',
|
|
|
+ border=False,
|
|
|
+ new_x="LMARGIN",
|
|
|
+ new_y="NEXT")
|
|
|
+
|
|
|
+pdf.set_xy(left + col_width*2 + col_space*2,top)
|
|
|
+
|
|
|
+pdf.multi_cell(
|
|
|
+ w=col_width,
|
|
|
+ h=None,
|
|
|
+ text=awatext + '...',
|
|
|
+ border=False,
|
|
|
+ new_x="LMARGIN",
|
|
|
+ new_y="NEXT")
|
|
|
+
|
|
|
+# box_section = Section(50,30,55,col_width)
|
|
|
+# pdf.rect(pdf.get_x(), pdf.get_y() + 4, box_section.h, box_section.w, style="D") ##,round_corners=False, corner_radius=0)
|
|
|
+
|
|
|
+pdf.output("news.pdf")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# TABLE_DATA = (
|
|
|
+# ("First name", "Last name", "Age", "City"),
|
|
|
+# ("Jules", "Smith", "34", "San Juan"),
|
|
|
+# ("Mary", "Ramos", "45", "Orlando"),
|
|
|
+# ("Carlson", "Banks", "19", "Los Angeles"),
|
|
|
+# ("Lucas", "Cimon", "31", "Angers"),
|
|
|
+# )
|
|
|
+
|
|
|
+# pdf.set_font("Times", size=16)
|
|
|
+# with pdf.table() as table:
|
|
|
+# for data_row in TABLE_DATA:
|
|
|
+# row = table.row()
|
|
|
+# for datum in data_row:
|
|
|
+# row.cell(datum)
|
|
|
+# pdf.output('table.pdf')
|