مقدمه
علاوه بر کلاسهای سطح بالای PsDocument و XpsDocument، Aspose.Page FOSS برای Python مجموعهای از ابزارهای سطح پایین را برای ساخت اسناد رندر، نوشتن خروجی PDF و کار برنامهنویسی با بستههای XPS ارائه میدهد. این ابزارها بهصورت داخلی توسط کلاسهای سطح بالا استفاده میشوند و در صورت نیاز به کنترل دقیق خروجی میتوانند بهصورت مستقیم نیز به کار گرفته شوند.
این مقاله به RenderModelBuilder، PdfWriter، PdfMetadata، RasterRenderer و XpsDocumentBuilder میپردازد — مؤلفههای مشترک استفادهشده در خطوط پردازش PS، EPS و XPS.
ساختن یک سند رندر
RenderModelBuilder بهصورت تدریجی یک RenderDocument را با فراخوانی روشهای چرخهزندگی صفحه میسازد. یک صفحه را با begin_page() آغاز کنید، دستورات رسم را اضافه کنید، سپس end_page() را فراخوانی کنید. برای دریافت RenderDocument تکمیلشده، document() را صدا بزنید.
from aspose.page.render.model import RenderModelBuilder
builder = RenderModelBuilder()
builder.begin_page(595, 842)
# add paths, text, images here
builder.end_page()
doc = builder.document()
روشهای رسم موجود شامل add_path()، add_text()، add_image()، clip()، save_state() و restore_state() هستند. برای تعیین اندازه پیشفرضی که بر تمام صفحات بعدی اعمال میشود، قبل از begin_page()، set_default_page_size() را صدا بزنید.
نوشتن یک سند رندر به PDF
PdfWriter یک نمونه PdfMetadata را میپذیرد و یک RenderDocument را به بایتهای PDF1.4 سریالسازی میکند. یک شیء PdfMetadata با فیلدهای title، creator، producer، creation_date، mod_date و trapped پاس دهید، سپس برای تولید خروجی write(doc) را فراخوانی کنید.
from aspose.page.render.model import RenderModelBuilder
from aspose.page.pdf.writer import PdfWriter
from aspose.page.pdf.metadata import PdfMetadata
from pathlib import Path
builder = RenderModelBuilder()
builder.begin_page(595, 842)
builder.end_page()
doc = builder.document()
metadata = PdfMetadata(
title="My Document",
creator="My App",
producer="Aspose.Page FOSS for Python",
creation_date="D:20260609000000",
mod_date="D:20260609000000",
trapped=False,
)
writer = PdfWriter(metadata)
pdf_bytes = writer.write(doc)
Path("output.pdf").write_bytes(pdf_bytes)
رندر رستر
RasterRenderer یک RenderDocument را به یک RasterSurface رندر میکند — یک بافر پیکسل RGBA در حافظه. RasterSurface get_pixel() و set_pixel() را برای دسترسی مستقیم به پیکسلها فراهم میکند، همراه با ویژگیهای width و height. این مکانیزم زیرساختی است که توسط to_image() در هر دو PsDocument و XpsDocument هنگام تولید خروجی PNG یا JPEG استفاده میشود.
from aspose.page.render.model import RenderModelBuilder
from aspose.page.image.raster_renderer import RasterRenderer
builder = RenderModelBuilder()
builder.begin_page(400, 300)
builder.end_page()
doc = builder.document()
renderer = RasterRenderer()
surface = renderer.render(doc, page_index=0)
print(f"Surface size: {surface.width}x{surface.height}")
ساخت اسناد XPS بهصورت برنامهنویسی
XpsDocumentBuilder یک API سطح بالا برای ساخت بستههای XPS با صفحات سفارشی و متادیتا فراهم میکند. از create_page() برای افزودن صفحات استفاده کنید، سپس to_document() را فراخوانی کنید تا یک XpsDocument دریافت کنید که میتواند بهطور بیشتر به PDF یا تصاویر رستر صادر شود.
from aspose.page.xps.document import XpsDocument
xps = XpsDocument.create("My XPS Document")
page = xps.add_page(595, 842)