from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle, PageBreak, KeepTogether
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.lib.units import mm
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from PIL import Image as PILImage
import os, textwrap
out = “/mnt/data/Moscotech_Realty_International_Diaspora_Profile.pdf”
logo = “/mnt/data/226793.jpg”
scuml = “/mnt/data/2827.jpg”
award = “/mnt/data/19295.png”
Register a broadly available font if present
font_regular = “/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf”
font_bold = “/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf”
pdfmetrics.registerFont(TTFont(“DejaVu”, font_regular))
pdfmetrics.registerFont(TTFont(“DejaVu-Bold”, font_bold))
NAVY = colors.HexColor(“#0D1B2A”)
GOLD = colors.HexColor(“#C89B3C”)
CREAM = colors.HexColor(“#F7F3EA”)
DARK = colors.HexColor(“#202020”)
GREY = colors.HexColor(“#666666”)
ORANGE = colors.HexColor(“#F36C21”)
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name=”CoverTitle”, fontName=”DejaVu-Bold”, fontSize=28, leading=32, textColor=colors.white, alignment=TA_CENTER, spaceAfter=12))
styles.add(ParagraphStyle(name=”CoverSub”, fontName=”DejaVu”, fontSize=12, leading=18, textColor=colors.white, alignment=TA_CENTER))
styles.add(ParagraphStyle(name=”H1x”, fontName=”DejaVu-Bold”, fontSize=19, leading=23, textColor=NAVY, spaceBefore=8, spaceAfter=10))
styles.add(ParagraphStyle(name=”H2x”, fontName=”DejaVu-Bold”, fontSize=13, leading=17, textColor=GOLD, spaceBefore=8, spaceAfter=5))
styles.add(ParagraphStyle(name=”Bodyx”, fontName=”DejaVu”, fontSize=9.8, leading=15, textColor=DARK, spaceAfter=8))
styles.add(ParagraphStyle(name=”Smallx”, fontName=”DejaVu”, fontSize=8.5, leading=12, textColor=GREY))
styles.add(ParagraphStyle(name=”Quote”, fontName=”DejaVu-Bold”, fontSize=15, leading=21, textColor=NAVY, alignment=TA_CENTER, leftIndent=15mm, rightIndent=15mm, spaceBefore=10, spaceAfter=12))
styles.add(ParagraphStyle(name=”Contact”, fontName=”DejaVu”, fontSize=10, leading=16, textColor=colors.white, alignment=TA_CENTER))
styles.add(ParagraphStyle(name=”Bulletx”, fontName=”DejaVu”, fontSize=9.5, leading=14, leftIndent=12, firstLineIndent=-7, textColor=DARK, spaceAfter=4))
def footer(canvas, doc):
canvas.saveState()
canvas.setStrokeColor(GOLD)
canvas.setLineWidth(0.7)
canvas.line(18mm, 14mm, 192mm, 14mm)
canvas.setFont(“DejaVu”, 7.5)
canvas.setFillColor(GREY)
canvas.drawString(18mm, 9mm, “MOSCOTECH REALTY LIMITED | RC 1716899”)
canvas.drawRightString(192mm, 9mm, f”Page {doc.page}”)
canvas.restoreState()
def fit_image(path, max_w, max_h):
im = PILImage.open(path)
w,h = im.size
scale = min(max_w/w, max_h/h)
return Image(path, width=wscale, height=hscale)
doc = SimpleDocTemplate(
out, pagesize=A4,
rightMargin=18mm, leftMargin=18mm,
topMargin=16mm, bottomMargin=20mm,
title=”Moscotech Realty Limited – International & Diaspora Profile”,
author=”Moscotech Realty Limited”
)
story = []
Cover
story.append(Spacer(1, 8mm))
story.append(fit_image(logo, 115mm, 42mm))
story.append(Spacer(1, 16mm))
cover_data = [[Paragraph(“FROM THE DIASPORA
TO HOME”, styles[“CoverTitle”])],
[Paragraph(“Connecting Nigerians around the world to verified real estate opportunities in Nigeria”, styles[“CoverSub”])]]
cover = Table(cover_data, colWidths=[174mm], rowHeights=[75mm, 30mm])
cover.setStyle(TableStyle([
(“BACKGROUND”,(0,0),(-1,-1),NAVY),
(“VALIGN”,(0,0),(-1,-1),”MIDDLE”),
(“LEFTPADDING”,(0,0),(-1,-1),12mm),
(“RIGHTPADDING”,(0,0),(-1,-1),12mm),
(“TOPPADDING”,(0,0),(-1,-1),8mm),
(“BOTTOMPADDING”,(0,0),(-1,-1),8mm),
]))
story.append(cover)
story.append(Spacer(1, 13mm))
story.append(Paragraph(“YOUR TRUSTED PARTNER IN VERIFIED NIGERIAN REAL ESTATE”, ParagraphStyle(
“coverstrap”, parent=styles[“H2x”], alignment=TA_CENTER, fontSize=12, textColor=GOLD)))
story.append(Paragraph(“Luxury Homes • Land Investments • Commercial Property • Diaspora Property Solutions”,
ParagraphStyle(“coverline”, parent=styles[“Smallx”], alignment=TA_CENTER, fontSize=9)))
story.append(PageBreak())
Page 2 – Company story
story.append(Paragraph(“A LOCAL PARTNER FOR A GLOBAL NIGERIAN COMMUNITY”, styles[“H1x”]))
story.append(Paragraph(
“For many Nigerians living abroad, owning property in Nigeria is about more than bricks and mortar. “
“It can represent a family legacy, a future home, long-term ownership and a continuing connection to the country. “
“At the same time, buying property from thousands of miles away can raise important questions about documentation, “
“verification, representation and the integrity of the transaction.”, styles[“Bodyx”]))
story.append(Paragraph(
“Moscotech Realty Limited helps clients navigate these practical realities. The company focuses on connecting “
“individuals, families, businesses and Nigerians in the diaspora with real estate opportunities in Nigeria, while providing “
“professional guidance through property selection, documentation review and the acquisition process.”, styles[“Bodyx”]))
story.append(Paragraph(“OUR COMPANY”, styles[“H2x”]))
story.append(Paragraph(
“Company: Moscotech Realty Limited
“
“RC Number: 1716899
“
“Entity: Private Company Limited by Shares (LTD)
“
“Positioning: Your Trusted Partner in Verified Nigerian Real Estate”, styles[“Bodyx”]))
story.append(Paragraph(“WHAT WE HELP CLIENTS DO”, styles[“H2x”]))
bullets = [
“Explore residential property and luxury homes for personal or family use.”,
“Consider land opportunities in established and developing locations, subject to appropriate verification and due diligence.”,
“Explore commercial real estate for business, office, retail and other purposes.”,
“Receive local assistance when the client is unable to be physically present in Nigeria.”,
“Navigate documentation and transaction processes with professional guidance.”,
“Review structured real estate investment opportunities according to their stated terms, conditions and risks.”
]
for b in bullets:
story.append(Paragraph(“• ” + b, styles[“Bulletx”]))
story.append(Spacer(1, 5*mm))
story.append(Paragraph(‘”Your Dream Realty Investment is Our Passion.”‘, styles[“Quote”]))
story.append(Paragraph(
“Our objective is to build long-term client relationships—not simply complete a transaction.”, styles[“Smallx”]))
story.append(PageBreak())
Page 3 – Diaspora
story.append(Paragraph(“A PROPERTY JOURNEY DESIGNED FOR DIASPORA CLIENTS”, styles[“H1x”]))
story.append(Paragraph(
“Distance should not prevent Nigerians abroad from exploring legitimate property opportunities in Nigeria. “
“Moscotech Realty provides a local professional point of contact for clients in the United States, Canada, the United Kingdom, “
“Europe, the Middle East and other parts of the world.”, styles[“Bodyx”]))
services = [
(“RESIDENTIAL PROPERTY”, “Luxury homes, apartments and other residential opportunities for personal use, family accommodation and long-term ownership.”),
(“VERIFIED LAND OPPORTUNITIES”, “Land opportunities in selected locations, with attention to title documentation and appropriate due diligence.”),
(“COMMERCIAL REAL ESTATE”, “Property opportunities for business, office, retail, hospitality and other commercial purposes.”),
(“ACQUISITION SUPPORT”, “Local assistance for clients who may not be physically present throughout the acquisition process.”),
(“DOCUMENTATION & DUE DILIGENCE”, “Guidance in reviewing available property documentation and carrying out relevant verification before commitment.”),
(“STRUCTURED INVESTMENT OPTIONS”, “Selected investment programmes may be presented with their specific terms, conditions and applicable risks for independent evaluation.”)
]
data=[]
for title, desc in services:
data.append([Paragraph(title, styles[“H2x”]), Paragraph(desc, styles[“Bodyx”])])
tbl=Table(data, colWidths=[57mm, 117mm], hAlign=”LEFT”)
tbl.setStyle(TableStyle([
(“VALIGN”,(0,0),(-1,-1),”TOP”),
(“LINEBELOW”,(0,0),(-1,-1),0.4,colors.HexColor(“#DDDDDD”)),
(“LEFTPADDING”,(0,0),(-1,-1),4),
(“RIGHTPADDING”,(0,0),(-1,-1),6),
(“TOPPADDING”,(0,0),(-1,-1),6),
(“BOTTOMPADDING”,(0,0),(-1,-1),6),
]))
story.append(tbl)
story.append(Spacer(1, 5*mm))
story.append(Paragraph(“A PROCESS BUILT AROUND INFORMED DECISIONS”, styles[“H2x”]))
story.append(Paragraph(
“Every property transaction should be evaluated on its own merits. Location, title, ownership, development status, “
“market conditions, pricing, contractual terms and other relevant factors should be considered before funds are committed. “
“Moscotech Realty’s role is to help clients navigate these considerations with a local presence and professional support.”, styles[“Bodyx”]))
story.append(PageBreak())
Page 4 – Credibility
story.append(Paragraph(“CREDIBILITY, REGISTRATION & RECOGNITION”, styles[“H1x”]))
story.append(Paragraph(
“Moscotech Realty Limited has developed its corporate profile around professional service, transparency and client confidence. “
“The following corporate documents and recognition form part of the company’s presentation materials.”, styles[“Bodyx”]))
Images side by side
img1 = fit_image(scuml, 78mm, 65mm)
img2 = fit_image(award, 78mm, 65mm)
imgtable = Table([[img1, img2]], colWidths=[87mm,87mm])
imgtable.setStyle(TableStyle([(“VALIGN”,(0,0),(-1,-1),”MIDDLE”),(“ALIGN”,(0,0),(-1,-1),”CENTER”)]))
story.append(imgtable)
story.append(Spacer(1, 5*mm))
story.append(Paragraph(“SCUML REGISTRATION”, styles[“H2x”]))
story.append(Paragraph(
“The supplied certificate shows Moscotech Realty Limited registered with the Special Control Unit Against Money Laundering (SCUML), “
“with the certificate referencing Section 17(2)(a) of the Money Laundering (Prevention and Prohibition) Act, 2022. “
“Certificate date shown: 25 March 2024.”, styles[“Bodyx”]))
story.append(Paragraph(“NATIONAL OUTSTANDING PERFORMANCE AWARD (NOPA) 2024”, styles[“H2x”]))
story.append(Paragraph(
“The supplied award material shows Moscotech Realty Limited receiving a National Outstanding Performance Award (NOPA) in 2024, “
“recognising the company as an outstanding real estate company in Nigeria.”, styles[“Bodyx”]))
story.append(Spacer(1, 4*mm))
story.append(Paragraph(
“Important: Corporate registration, certificates and awards are presented as supporting credentials. “
“They should not be interpreted as a guarantee of investment performance or a substitute for independent legal, financial or property due diligence.”,
styles[“Smallx”]))
story.append(PageBreak())
Page 5 – Contact
contact_bg = Table([[Paragraph(“LET’S TALK ABOUT YOUR PROPERTY GOALS”, ParagraphStyle(
“ctitle”, parent=styles[“CoverTitle”], fontSize=22, leading=27)),
],
[Paragraph(“Whether you are looking for a family home, a strategic land investment, commercial property or a professional local partner in Nigeria, Moscotech Realty is ready to discuss your objectives.”, styles[“Contact”])],
[Paragraph(“PHONE / WHATSAPP
+234 802 333 2958″, styles[“Contact”])],
[Paragraph(“EMAIL
info@moscotechrealty.com“, styles[“Contact”])],
[Paragraph(“OFFICE
16 Shiro Street, Jibowu–Yaba, Lagos, Nigeria”, styles[“Contact”])],
[Paragraph(“WEB
www.moscotechrealty.com“, styles[“Contact”])]],
colWidths=[174mm])
contact_bg.setStyle(TableStyle([
(“BACKGROUND”,(0,0),(-1,-1),NAVY),
(“VALIGN”,(0,0),(-1,-1),”MIDDLE”),
(“ALIGN”,(0,0),(-1,-1),”CENTER”),
(“LEFTPADDING”,(0,0),(-1,-1),15mm),
(“RIGHTPADDING”,(0,0),(-1,-1),15mm),
(“TOPPADDING”,(0,0),(-1,-1),9mm),
(“BOTTOMPADDING”,(0,0),(-1,-1),9mm),
(“LINEBELOW”,(0,1),(-1,-1),0.4,GOLD),
]))
story.append(contact_bg)
story.append(Spacer(1, 10mm))
story.append(fit_image(logo, 95mm, 34mm))
story.append(Spacer(1, 5mm))
story.append(Paragraph(“MOSCOTECH REALTY LIMITED”, ParagraphStyle(“endname”, parent=styles[“H1x”], alignment=TA_CENTER, fontSize=15)))
story.append(Paragraph(“Connecting Nigerians at home and abroad to verified real estate opportunities in Nigeria.”,
ParagraphStyle(“endtag”, parent=styles[“Smallx”], alignment=TA_CENTER, fontSize=9.5)))
story.append(Spacer(1, 5mm))
story.append(Paragraph(“Luxury Homes • Land Investments • Commercial Property • Diaspora Property Solutions”,
ParagraphStyle(“endservices”, parent=styles[“Smallx”], alignment=TA_CENTER)))
doc.build(story, onFirstPage=footer, onLaterPages=footer)
print(f”Created: {out}”)
