ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python/python-pptx 사용자 가이드 - 10. Text
    코딩/Python 2024. 6. 12. 15:09
    728x90

    https://python-pptx.readthedocs.io/en/latest/user/text.html

    Working with text

    Auto shapes and table cells can contain text. Other shapes can’t. Text is always manipulated the same way, regardless of its container.

    자동 도형과 표 셀에는 텍스트가 포함될 수 있다. 다른 도형은 할 수 없다. 텍스트는 컨테이너에 관계없이 항상 동일한 방식으로 조작된다.

    Text exists in a hierarchy of three levels:

    텍스트는 세 가지 수준의 계층 구조로 존재한다.

    • Shape.text_frame
    • TextFrame.paragraphs
    • _Paragraph.runs

    All the text in a shape is contained in its text frame. A text frame has vertical alignment, margins, wrapping and auto-fit behavior, a rotation angle, some possible 3D visual features, and can be set to format its text into multiple columns. It also contains a sequence of paragraphs, which always contains at least one paragraph, even when empty.

    A paragraph has line spacing, space before, space after, available bullet formatting, tabs, outline/indentation level, and horizontal alignment. A paragraph can be empty, but if it contains any text, that text is contained in one or more runs.

    A run exists to provide character level formatting, including font typeface, size, and color, an optional hyperlink target URL, bold, italic, and underline styles, strikethrough, kerning, and a few capitalization styles like all caps.

    Let’s run through these one by one. Only features available in the current release are shown.

    도형의 모든 텍스트는 해당 텍스트 프레임에 포함된다. 텍스트 프레임에는 세로 정렬, 여백, 줄 바꿈 및 자동 맞춤 동작, 회전 각도, 몇 가지 가능한 3D 시각적 기능이 있으며 텍스트 서식을 여러 열로 지정하도록 설정할 수 있다. 또한 비어 있는 경우에도 항상 하나 이상의 단락을 포함하는 일련의 단락이 포함되어 있다.

    단락에는 줄 간격, 앞 공백, 뒤 공백, 사용 가능한 글머리 기호 서식, 탭, 개요/들여쓰기 수준 및 가로 정렬이 있다. 단락은 비어 있을 수 있지만 텍스트가 포함된 경우 해당 텍스트는 하나 이상의 실행에 포함된다.

    글꼴 서체, 크기, 색상, 선택적 하이퍼링크 대상 URL, 굵게, 기울임꼴, 밑줄 스타일, 취소선, 커닝 및 모두 대문자와 같은 몇 가지 대문자 사용 스타일을 포함한 문자 수준 서식을 제공하기 위한 실행이 존재한다.

    이를 하나씩 살펴본다. 현재 릴리스에서 사용할 수 있는 기능만 표시된다.

    Accessing the text frame

    As mentioned, not all shapes have a text frame. So if you’re not sure and you don’t want to catch the possible exception, you’ll want to check before attempting to access it:

    앞서 언급했듯이 모든 도형에 텍스트 프레임이 있는 것은 아니다. 따라서 확실하지 않고 가능한 예외를 포착하고 싶지 않은 경우 액세스를 시도하기 전에 확인하는 것이 좋다.

    for shape in slide.shapes:
        if not shape.has_text_frame:
            continue
        text_frame = shape.text_frame
        # do things with the text frame
        ...

    Accessing paragraphs

    A text frame always contains at least one paragraph. This causes the process of getting multiple paragraphs into a shape to be a little clunkier than one might like. Say for example you want a shape with three paragraphs:

    텍스트 프레임에는 항상 하나 이상의 단락이 포함된다. 이로 인해 여러 단락을 하나의 도형으로 만드는 과정이 원하는 것보다 조금 더 투박해진다. 예를 들어 세 개의 단락으로 구성된 도형을 원한다고 가정해 본다.

    paragraph_strs = [
        'Egg, bacon, sausage and spam.',
        'Spam, bacon, sausage and spam.',
        'Spam, egg, spam, spam, bacon and spam.'
    ]
    
    text_frame = shape.text_frame
    text_frame.clear()  # remove any existing paragraphs, leaving one empty one
    
    p = text_frame.paragraphs[0]
    p.text = paragraph_strs[0]
    
    for para_str in paragraph_strs[1:]:
        p = text_frame.add_paragraph()
        p.text = para_str

    Adding text

    Only runs can actually contain text. Assigning a string to the .text attribute on a shape, text frame, or paragraph is a shortcut method for placing text in a run contained by those objects. The following two snippets produce the same result:

    실행에만 실제로 텍스트가 포함될 수 있다. 도형, 텍스트 프레임 또는 단락의 .text 속성에 문자열을 할당하는 것은 해당 개체에 포함된 실행에 텍스트를 배치하는 간단한 방법이다. 다음 두 코드조각은 동일한 결과를 생성한다.

    shape.text = 'foobar'
    
    # is equivalent to ...
    
    text_frame = shape.text_frame
    text_frame.clear()
    p = text_frame.paragraphs[0]
    run = p.add_run()
    run.text = 'foobar'

    Applying text frame-level formatting

    The following produces a shape with a single paragraph, a slightly wider bottom than top margin (these default to 0.05”), no left margin, text aligned top, and word wrapping turned off. In addition, the auto-size behavior is set to adjust the width and height of the shape to fit its text. Note that vertical alignment is set on the text frame. Horizontal alignment is set on each paragraph:

    다음은 단일 단락, 위쪽 여백보다 아래쪽이 약간 넓고(기본값은 0.05”) 왼쪽 여백이 없고 텍스트가 위쪽에 정렬되고 단어 줄 바꿈이 해제된 도형을 생성한다. 또한 자동 크기 동작은 텍스트에 맞게 도형의 너비와 높이를 조정하도록 설정된다. 텍스트 프레임에는 수직 정렬이 설정되어 있다. 각 단락에 가로 정렬이 설정된다.

    from pptx.util import Inches
    from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE
    
    text_frame = shape.text_frame
    text_frame.text = 'Spam, eggs, and spam'
    text_frame.margin_bottom = Inches(0.08)
    text_frame.margin_left = 0
    text_frame.vertical_anchor = MSO_ANCHOR.TOP
    text_frame.word_wrap = False
    text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT

    The possible values for TextFrame.auto_size and TextFrame.vertical_anchor are specified by the enumeration MSO_AUTO_SIZE and MSO_VERTICAL_ANCHOR respectively.

    TextFrame.auto_size 및 TextFrame.vertical_anchor에 가능한 값은 각각 MSO_AUTO_SIZE 및 MSO_VERTICAL_ANCHOR 열거로 지정된다.

    Applying paragraph formatting

    The following produces a shape containing three left-aligned paragraphs, the second and third indented (like sub-bullets) under the first:

    다음은 왼쪽 정렬된 세 개의 단락을 포함하는 도형을 생성하며, 두 번째와 세 번째 단락은 첫 번째 단락 아래에 들여쓰기된다(하위 글머리 기호처럼).

    from pptx.enum.text import PP_ALIGN
    
    paragraph_strs = [
        'Egg, bacon, sausage and spam.',
        'Spam, bacon, sausage and spam.',
        'Spam, egg, spam, spam, bacon and spam.'
    ]
    
    text_frame = shape.text_frame
    text_frame.clear()
    
    p = text_frame.paragraphs[0]
    p.text = paragraph_strs[0]
    p.alignment = PP_ALIGN.LEFT
    
    for para_str in paragraph_strs[1:]:
        p = text_frame.add_paragraph()
        p.text = para_str
        p.alignment = PP_ALIGN.LEFT
        p.level = 1

    Applying character formatting

    Character level formatting is applied at the run level, using the .font attribute. The following formats a sentence in 18pt Calibri Bold and applies the theme color Accent 1.

    문자 수준 형식은 .font 속성을 사용하여 실행 수준에서 적용된다. 다음은 문장의 형식을 18pt Calibri Bold로 지정하고 테마 색상 Accent 1을 적용한다.

    from pptx.dml.color import RGBColor
    from pptx.enum.dml import MSO_THEME_COLOR
    from pptx.util import Pt
    
    text_frame = shape.text_frame
    text_frame.clear()  # not necessary for newly-created shape
    
    p = text_frame.paragraphs[0]
    run = p.add_run()
    run.text = 'Spam, eggs, and spam'
    
    font = run.font
    font.name = 'Calibri'
    font.size = Pt(18)
    font.bold = True
    font.italic = None  # cause value to be inherited from theme
    font.color.theme_color = MSO_THEME_COLOR.ACCENT_1

    If you prefer, you can set the font color to an absolute RGB value. Note that this will not change color when the theme is changed:

    원하는 경우 글꼴 색상을 절대 RGB 값으로 설정할 수 있다. 테마가 변경되더라도 색상은 변경되지 않다.

    font.color.rgb = RGBColor(0xFF, 0x7F, 0x50)

    A run can also be made into a hyperlink by providing a target URL:

    대상 URL을 제공하여 실행을 하이퍼링크로 만들 수도 있다.

    run.hyperlink.address = 'https://github.com/scanny/python-pptx'

     

    Python/python-pptx 사용자 가이드

    728x90

    댓글

Designed by Tistory.