Beispiel #1
0
def merge_page_with_possible_rotation(page: PageObject,
                                      numbers_page: PageObject):
    ur_x = page.artBox.getUpperRight_x()
    ur_y = page.artBox.getUpperRight_y()
    if ur_x > ur_y:
        # This page is oriented in a very odd way
        # and we need to rotate our overlay on top of it.
        # https://stackoverflow.com/a/23633769
        page.mergeRotatedTranslatedPage(
            numbers_page,
            270,
            numbers_page.mediaBox.getWidth() / 2,
            numbers_page.mediaBox.getWidth() / 2,
        )
    else:
        page.mergePage(numbers_page)
Beispiel #2
0
def add_text_on_page(pdf_page: PageObject, texts: Iterable[TextOnPage]) -> PageObject:
    buf = io.BytesIO()

    # create a new PDF with Reportlab
    pdfmetrics.registerFont(UnicodeCIDFont(PDF_FONT))   # 日本語表示のためにフォントを登録する必要がある
    can = canvas.Canvas(buf, pagesize=A4)

    # 与えられたテキスト情報を canvas に追加していく
    for text in texts:
        text_obj = can.beginText(text.position.x, text.position.y)
        text_obj.setFont(PDF_FONT, text.position.font_size)
        text_obj.setCharSpace(text.position.char_space)
        text_obj.textLine(text.text)    # textLine() する前に他の setXxx() を終わらせる必要がある
        can.drawText(text_obj)

    can.save()

    buf.seek(0)
    temp_pdf = PdfFileReader(buf)
    pdf_page.mergePage(temp_pdf.getPage(0))

    return pdf_page