PDFium Delphi Component Docs

FPdfLayout 유닛

페이지 장식, 다단, 페이지 넘김 표, 링크, 재사용 노드, 마크업 입력, tagged-PDF 시맨틱을 갖춘 측정 가능한 흐름 레이아웃 플랜을 만듭니다

예외와 열거형

타입값 또는 용도
EPdfLayoutError잘못된 레이아웃 입력, 한도 초과, 일관성 없는 시맨틱 구조에 대해 발생하는 예외입니다
TPdfLayoutAlignmentplaLeft, plaCenter, plaRight
TPdfLayoutCommandKindplcText, plcRule, plcImage, plcPageXObject, plcCachedNode, plcLink, plcRectangle
TPdfLayoutItemKindpliText, pliSpacer, pliRule, pliImage, pliPageXObject, pliPageBreak, pliCachedNode, pliLink, pliSemanticNode, pliTable
TPdfLayoutSemanticRoleplsrArtifact, plsrParagraph, plsrHeading1, plsrHeading2, plsrHeading3, plsrHeading4, plsrHeading5, plsrHeading6, plsrList, plsrListItem, plsrListLabel, plsrListBody, plsrTable, plsrTableRow, plsrTableHeader, plsrTableData, plsrFigure, plsrCaption, plsrLink, plsrSection, plsrDivision
TPdfLayoutTableScopepltsNone, pltsRow, pltsColumn, pltsBoth
TPdfLayoutListNumberingplnNone, plnDisc, plnCircle, plnSquare, plnDecimal, plnUpperRoman, plnLowerRoman, plnUpperAlpha, plnLowerAlpha
TPdfLayoutGridTrackKindplgtkFixed, plgtkFraction, plgtkAuto
TPdfMarkupFormatpmfMarkdown, pmfHtml

레이아웃 레코드

타입공개 멤버
TPdfLayoutSemanticsRole, ParentID, ElementID, AlternateText, ActualText, Language, HeaderIDs, TableScope, ColumnSpan, RowSpan, ListNumbering, Artifact, Paragraph, Figure
TPdfLayoutTextStyleFontName, FontSize, Color, Alpha, LineHeight, Alignment, KeepTogether, BreakLongWords, SpaceBefore, SpaceAfter, Default
TPdfLayoutConstraintsKeepTogether, KeepWithNext, PageBreakBefore, PageBreakAfter, OrphanLines, WidowLines, Default
TPdfLayoutPageSettingsWidth, Height, MarginLeft, MarginTop, MarginRight, MarginBottom, HeaderHeight, FooterHeight, A4, Letter
TPdfLayoutRectLeft, Top, Width, Height
TPdfLayoutGridTrackKind, Value, Minimum, Maximum, MeasuredContent
TPdfLayoutGridTracksTPdfLayoutGridTrack의 동적 배열
TPdfLayoutGridSizes확정된 트랙 크기의 동적 배열
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsTPdfLayoutTableTextRun의 동적 배열
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsTPdfLayoutSemanticElement의 동적 배열
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsTPdfLayoutCommand의 동적 배열
TPdfLayoutPlanPageSettings, PageCount, Commands, SemanticElements, TextLineCount, RuleCount, RectangleCount, ImageCount, PageXObjectCount, CachedNodeCount, LinkCount, TaggedContentCount, ArtifactCount, MeasuredTextCount, TotalPageReferenceCount, ReservedPageDigits, CacheHitCount, CacheMissCount, ReusedXObjectCount, ColumnCount, ColumnGap

레이아웃 클래스

타입공개 멤버
TPdfLayoutMeasurerMeasureTextWidth, CacheIdentity
TPdfLayoutItemKind
TPdfLayoutTableCellText, Uri, Style, AddTextRun, TextRuns, SetImage, ColumnSpan, RowSpan, Header, ElementID, HeaderIDs, Scope
TPdfLayoutTableRowAddCell, Cells, Header, AllowSplit, MinimumHeight, KeepWithPrevious
TPdfLayoutTableCreate, Destroy, AddRow, AddSubtotalRow, SetCaption, Columns, Rows, Options, Caption, CaptionStyle, ElementID, ParentID
TPdfLayoutPagedPlanCreate, Destroy, ClearPageCache, MaterializePage, Reset, Summary, CommandCount, StorageByteCount, SourceCount, Completed, MaxCommandCount, MaxStorageBytes, MaxPageCommands, MaxSourceCount, MaxCachedPages 예산, 그리고 CachedPageCount, CacheHitCount, CacheMissCount, PeakCachedPageCount 캐시 통계
TPdfLayoutDocumentCreate, Destroy, Clear, AddText, AddSpacer, AddRule, AddImage, AddPageXObject, AddCachedNode, AddLink, AddSemanticNode, SetLastItemSemantics, SetLastItemConstraints, AddTable, AddPageBreak, LoadMarkup, InvalidateCache, BuildPlan, BuildPagedPlan, PageSettings, HeaderText, FooterText, HeaderStyle, FooterStyle, ReservedPageDigits, ColumnCount, ColumnGap, Items
TPdfLayoutCachedNodeCreate, Destroy, Invalidate, BeginEmission, EndEmission, Content, Width, Height, Built

페이지 나누기 제약

보이는 흐름 항목을 추가한 뒤 SetLastItemConstraints를 호출하면 해당 항목을 한 덩어리로 유지하거나, 다음 항목의 시작과 묶거나, 앞뒤로 물리적 페이지 나눔을 강제할 수 있습니다

OrphanLines는 영역 아래쪽에 남겨 두는 문단 줄의 최소 개수이고 WidowLines는 다음 영역 맨 위에 두는 최소 개수입니다. 둘 다 기본값은 1이며 기존 페이지 나눔을 유지합니다

제약은 문단, 링크, 목록, 그림, 표 역할 항목에 똑같이 적용되지만, 시맨틱 전용 컨테이너는 기하 정보가 없으므로 페이지 나눔 제약을 거부합니다

pliTable 항목은 PageBreakBefore와 PageBreakAfter만 받아들이며, 행 분할과 표 시작 유지는 표 모델이 제어합니다

플래너는 빌드 중 감겨진 줄을 캐싱하므로, keep-with-next 예측과 최종 명령 출력이 같은 텍스트를 두 번 측정하지 않습니다

페이지별 명령 계획

전용 탐색·크기 조절 가능 TStream 위에서 TPdfLayoutPagedPlan을 만든 뒤 BuildPagedPlan을 호출하거나 TPdf.GeneratePagedLayout에 넘기세요

플래너는 명령을 곧바로 직렬화하고 완성된 감긴 텍스트 결과를 하나씩 놓아주며, Plan.Commands는 비워 둔 채 페이지 설정, 시맨틱 요소, 카운트, 안정적인 페이지 총계를 요약에 보관합니다

본문 명령과 이후의 헤더·푸터 명령은 연결된 페이지 세그먼트로 인덱싱되므로, MaterializePage가 다른 페이지의 명령을 훑지 않고도 완전한 페이지를 복원합니다

MaxCachedPages는 플랜이 보관하는 페이지 배열에만 적용됩니다. 반환된 배열을 계속 들고 있는 호출자가 수명을 늘리며, PDFium은 네이티브 작성 페이지를 대상 문서가 저장되거나 닫힐 때까지 유지합니다

저장 형식은 이식 가능한 파일 형식이 아니라 비공개 세션 상태입니다. 스트림을 외부에서 공유하거나 수정해서는 안 되며, 페이지 XObject나 캐시된 노드가 참조하는 소스 객체는 paged plan보다 오래 살아 있어야 합니다

명령을 선택한 임계값까지는 메모리에 두고 이후에는 닫을 때 삭제되는 임시 저장소로 넘치게 하려면 TPdfRandomAccessStore를 사용하세요

여러 페이지에 걸친 표

고정, 비율, 콘텐츠 크기 격자 트랙으로 TPdfLayoutTable을 만들고 행과 셀을 추가한 뒤 AddTable을 호출하세요. 문서는 소유된 스냅샷을 저장하므로 이후 호출자가 변경해도 기존 플랜 캐시가 무효화되지 않습니다

헤더 행은 표 시작부에 연속되어 있어야 하고 RepeatHeaderRows가 true이면 페이지나 단이 바뀐 뒤 반복됩니다. 헤더 행의 span은 본문 행으로 확장될 수 없습니다

AllowSplit이 true이면 본문 행을 나눌 수 있습니다. 기본적으로 연속으로 연결된 row-span 그룹은 하나의 단위로 이동하며 일반 분할 행의 셀은 같은 줄 영역, 패딩, 테두리 지오메트리를 공유합니다

AllowRowSpanContinuation을 True로 설정하면 row-span 그룹을 페이지나 열 영역에 걸쳐 이어갈 수 있습니다. planner는 추가 span 높이를 행에 나누고 텍스트 줄이나 이미지를 가로지르지 않는 절단점을 고릅니다

AllowSplit=False는 행을 나누지 않는 제약으로 유지됩니다. 행 제약이 충돌하거나 새 영역에도 단일 블록이 들어가지 않으면 콘텐츠를 자르거나 반복하지 않고 EPdfLayoutError를 발생시킵니다

캡션은 첫 헤더 블록과 첫 본문 그룹의 최소 시작 부분을 함께 유지합니다. 반복 헤더는 같은 원본 헤더 요소를 재사용합니다

플래너는 페이지 수와 무관하게 Table 요소 하나, 선택적 Caption, TR 자식, TH 또는 TD 셀을 출력합니다. 반복되는 헤더 명령은 원래 시맨틱 인덱스를 재사용하고, TD 셀에는 명시적인 유효한 ID가 주어지지 않으면 겹치는 헤더 ID가 자동으로 부여됩니다

표 테두리는 네이티브 PDFium 경로 객체로 그려지는 artifact plcRectangle 명령이며, 캡션과 셀 텍스트는 태그된 콘텐츠로 남습니다

텍스트와 이미지가 섞인 셀

AddTextRun은 셀의 원래 Text 뒤에 inline 텍스트를 추가합니다. run마다 폰트, 글자 크기, 색상, alpha, 줄 높이, 긴 단어 분할 정책을 가집니다

혼합 텍스트는 측정한 너비로 줄바꿈하며 긴 단어를 나눌 때 UTF-16 서로게이트 쌍을 유지합니다. 같은 baseline을 공유하는 별도 네이티브 텍스트 객체로 출력하며 수평 정렬은 셀의 기본 Style을 따릅니다

run 수준의 문단 간격이나 keep-together flags는 추가 문단 블록을 만들지 않습니다. 이런 제약이 필요하면 별도 행이나 일반 layout 항목을 사용하세요

SetImage는 셀마다 파일 기반 이미지 하나를 설정하고 텍스트 위, 왼쪽 패딩 위치에 놓습니다. 다시 호출하면 이미지를 교체합니다

명시적인 양의 높이와 셀 내부에 들어가는 너비를 지정하세요. 너비 0은 내부 너비 전체를 사용하며 지정한 크기로 호출자가 종횡비를 정합니다

이미지는 이어지는 영역에서도 나누지 않고 원래 위치에 한 번만 출력합니다. 생성 때까지 파일을 사용할 수 있어야 하며 파일 누락이나 지원하지 않는 이미지는 추가 페이지를 rollback합니다

비어 있지 않은 대체 설명이 필요합니다. 이미지는 원래 TH 또는 TD의 Figure 자식이 되며 모든 텍스트 조각도 같은 셀에 연결됩니다

페이지를 넘기면 원래 TH 또는 TD에 이어지는 marked-content 참조를 추가하고 RowSpan, ColumnSpan, 헤더 관계를 유지합니다. 논리 셀을 중복 생성하지 않습니다

소계와 이어짐 라벨

AddSubtotalRow는 호출자의 라벨, 형식화한 값, 스타일로 나누지 않는 본문 행을 만듭니다. 여러 열이면 라벨은 마지막 값 열을 제외한 모든 열에 걸칩니다

소계가 이어지는 영역의 고립된 첫 행이 되지 않도록 KeepWithPrevious=True를 설정합니다. 값은 호출자가 제공하며 숫자 집계는 수행하지 않습니다

ContinuationAfter는 계속되는 영역의 끝에, ContinuationBefore는 다음 영역의 반복 헤더 뒤에 표시합니다

두 라벨은 기본적으로 비어 있으며 ContinuationStyle을 사용합니다. 한 줄에 들어가야 하고 자체 높이를 확보합니다. 첫 영역에는 before, 마지막 영역에는 after 라벨이 없습니다

라벨과 테두리는 artifact로 처리해 의미상 표 계층을 바꾸지 않습니다. {page}, {pages} 같은 페이지 placeholder는 일반 layout 텍스트 해석기를 사용합니다

고급 표 선언과 상한

procedure TPdfLayoutTableCell.AddTextRun(const Text: WideString;
  const Style: TPdfLayoutTextStyle);

procedure TPdfLayoutTableCell.SetImage(const FileName: string;
  Width, Height: Single; const AlternateText: WideString);

function TPdfLayoutTable.AddSubtotalRow(const LabelText, ValueText: WideString;
  const Style: TPdfLayoutTextStyle): TPdfLayoutTableRow;

옵션을 덮어쓰기 전에 TPdfLayoutTableOptions.Default를 사용하세요. AllowRowSpanContinuation의 기본값은 False이며 MaxContinuationRegions는 페이지/열 영역 10,000개, 설정 최대값은 100,000개입니다

표는 256열, 100,000행, 의미 요소 100,000개의 상한을 유지합니다. 전체 셀 텍스트는 UTF-16 코드 단위 8,000,000개로 제한합니다

혼합 텍스트 셀은 추가 run 1,024개, UTF-16 코드 단위 1,000,000개, 100,000줄, 100,000조각까지 받습니다. 너비를 넘는 개별 문자나 긴 단어 분할을 껐을 때 들어가지 않는 단어는 거부합니다

이어지는 행 그룹은 10,000셀로 제한합니다. 영역 상한과 제한된 절단 탐색으로 무한 페이지 분할을 막으며 이미지는 헤더, 라벨, 패딩을 뺀 본문 영역에 들어가야 합니다

소유하는 표 스냅샷과 계획 캐시는 run 스타일, 이미지 크기, 대체 텍스트, 소계 유지, 이어짐 설정을 포함합니다. 이후 호출자가 표를 바꿔도 스냅샷에는 영향을 주지 않습니다

최상위 루틴

루틴설명
ResolveLayoutText예약된 자릿수 폭으로 페이지 번호 자리표시자를 확장합니다
PdfLayoutSemanticRoleName시맨틱 역할의 tagged-PDF 구조 이름을 반환합니다
BuildTaggedLayoutPdf완성된 레이아웃 플랜과 태그 구조를 소스 PDF 바이트에 적용합니다
ResolvePdfLayoutGridTracks가용 폭 안에서 고정, 비율, 콘텐츠 크기 격자 트랙을 확정합니다

관련 항목