소개
Aspose.PDF FOSS for C++은 PDF 페이지에 자유형 모양을 직접 구축하기 위한 작은 벡터 그래픽 API을 포함합니다. 이는 라이브러리의 래스터 렌더링 경로—BmpDevice, JpegDevice, TiffDevice—와는 별개이며, 기존 페이지 콘텐츠를 이미지 형식으로 변환하는 대신 문서가 생성되는 동안 프로그램이 페이지에 새로운 기하학(원, 타원 및 선)을 구성하도록 합니다.
API은 Graph을 중심으로 합니다. Graph은 Shape 객체 집합을 보유하는 컨테이너이며, Page.Paragraphs()를 통해 다른 페이지 콘텐츠와 동일한 방식으로 페이지에 배치됩니다. 추상 Shape 기반에서 파생된 세 가지 구체적인 형태는 Circle, Ellipse, Line이며, 각각은 공유된 점이나 사각형 유형 대신 소수의 숫자 속성으로 기하학을 표현합니다. 스트로크 두께, 색상, 채우기 및 대시 패턴은 GraphInfo을 통해 형태별로 설정되며, Graph 컨테이너 자체는 전체 컨테이너를 프레임화하기 위한 BorderInfo를 가지고 있습니다.
이는 라이브러리의 좁은 영역으로, 형태 기하학 및 스타일링을 다루는 다섯 개 클래스가 포함됩니다 — 전체 벡터 드로잉 레이어를 구축하거나 이미지 합성으로 되돌아가지 않고 페이지에 단순한 기하학적 콘텐츠(테두리, 마커, 연결선, 강조 원)를 그릴 필요가 있는 프로그램을 위해 설계되었습니다.
포함 내용
그래프 컨테이너와 페이지에 형태 추가
Graph은 페이지에 그려진 형태들을 보유합니다. 자체 속성 — Left(), Top(), Width(), Height(), IsChangePosition() — 은 컨테이너를 페이지에 위치시키고 크기를 정하며, Shapes()은 보유하고 있는 Shape 포인터들의 벡터를 반환합니다. 형태는 이를 생성하고 속성을 설정한 뒤 해당 벡터에 추가함으로써 추가됩니다; Graph 자체는 Page.Paragraphs().Add()를 통해 페이지에 삽입됩니다.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>
using namespace Aspose::Pdf;
int main() {
Document doc;
Page page = doc.Pages().Add();
auto graph = std::make_shared<Graph>();
graph->Left(50.0);
graph->Top(50.0);
graph->Width(400.0);
graph->Height(400.0);
auto circle = std::make_unique<Circle>();
circle->PosX(200.0);
circle->PosY(200.0);
circle->Radius(75.0);
graph->Shapes().push_back(std::move(circle));
page.Paragraphs().Add(graph);
doc.Save("graph.pdf");
}
원과 타원 그리기
Circle와 Ellipse은(는) 공유된 포인트 또는 사각형 타입 대신 평범한 숫자 속성으로 기하학을 설명합니다. Circle는 PosX(), PosY(), Radius()를 노출합니다; Ellipse는 Left(), Bottom(), Width(), Height()을 노출하며, Graph이(가) 위치 지정에 사용하는 것과 동일한 스타일로 경계 상자를 설명합니다. 두 개 모두 Shape에서 상속받은 CheckBounds(containerWidth, containerHeight)를 재정의하며, 이는 주어진 크기의 컨테이너 안에 현재 형태의 기하학이 들어가는지 여부를 보고합니다.
#include <aspose/pdf/circle.hpp>
#include <aspose/pdf/ellipse.hpp>
using namespace Aspose::Pdf;
Circle circle;
circle.PosX(150.0);
circle.PosY(150.0);
circle.Radius(50.0);
bool circleFits = circle.CheckBounds(400.0, 400.0);
Ellipse ellipse;
ellipse.Left(20.0);
ellipse.Bottom(20.0);
ellipse.Width(120.0);
ellipse.Height(60.0);
bool ellipseFits = ellipse.CheckBounds(400.0, 400.0);
선 그리기
Line은(는) Circle 및 Ellipse와는 다르게 기하학을 저장합니다: PositionArray()은(는) 명명된 속성 집합 대신 좌표의 평면 std::vector<float>—선이 통과하는 각 점에 대한 x, y 쌍—을 반환합니다. 두 점 세그먼트는 네 개의 값으로 설정됩니다: 시작 x, 시작 y, 끝 x, 끝 y. 다른 도형들과 마찬가지로, Line는 Shape에서 상속받은 CheckBounds(containerWidth, containerHeight)을 재정의합니다.
#include <aspose/pdf/line.hpp>
using namespace Aspose::Pdf;
Line line;
line.PositionArray({50.0f, 50.0f, 350.0f, 350.0f});
bool lineFits = line.CheckBounds(400.0, 400.0);
GraphInfo와 BorderInfo을 사용한 도형 스타일링
각 도형의 스트로크와 채우기는 GraphInfo에서 가져오며, Shape.GraphInfo() / GraphInfo(value)를 통해 읽고 설정합니다. GraphInfo은 스트로크 두께(LineWidth()), 스트로크 및 채우기 색상(Color(), FillColor()), 대시 패턴(DashArray(), DashPhase()), 이중선 플래그(IsDoubled()), 그리고 기울기/스케일/회전 속성(SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle())을 노출합니다. Graph 컨테이너는 또한 Border()를 통해 설정되는 BorderInfo을 가지고 있으며, 이는 각 가장자리마다 하나의 GraphInfo—Left(), Right(), Top(), Bottom()—을 보유하고, 컨테이너 자체 테두리를 둥글게 만들기 위한 RoundedBorderRadius()도 포함합니다.
#include <aspose/pdf/graph_info.hpp>
#include <aspose/pdf/border_info.hpp>
#include <aspose/pdf/color.hpp>
using namespace Aspose::Pdf;
GraphInfo stroke;
stroke.LineWidth(2.0f);
stroke.Color(Color::FromRgb(1.0, 0.0, 0.0));
stroke.FillColor(Color::FromRgb(1.0, 0.9, 0.9));
stroke.DashArray({4, 2});
BorderInfo border{BorderSide::All, 1.5f, Color::Black()};
border.RoundedBorderRadius(6.0);
빠른 시작
라이브러리를 CMake 서브디렉터리로 추가하고 aspose_pdf_foss 타깃에 링크합니다:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
문서를 만들고, 페이지를 추가한 뒤, Graph 컨테이너 안에 원을 그린 다음 결과를 저장합니다:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>
using namespace Aspose::Pdf;
int main() {
Document doc;
Page page = doc.Pages().Add();
auto graph = std::make_shared<Graph>();
graph->Left(50.0);
graph->Top(50.0);
graph->Width(300.0);
graph->Height(300.0);
auto circle = std::make_unique<Circle>();
circle->PosX(150.0);
circle->PosY(150.0);
circle->Radius(100.0);
graph->Shapes().push_back(std::move(circle));
page.Paragraphs().Add(graph);
doc.Save("circle.pdf");
}
지원되는 형식
| 형식 | 확장자 | 읽기 | 쓰기 |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
이러한 형식은 라이브러리 전체에 적용되며 — 페이지 래스터화 (BMP, JPEG, TIFF), 텍스트 추출 (Text), SVG 가져오기 — 특정 벡터 그래픽 클래스에만 적용되는 것이 아닙니다. Graph, Shape, Circle, Ellipse, 및 Line는 PDF 페이지 내용에 직접 그려지며 자체 파일 형식에 묶여 있지 않습니다.
오픈 소스 및 라이선스
Aspose.PDF FOSS for C++는 MIT 라이선스 하에 배포되며, 전체 소스는 github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp에서 확인할 수 있습니다. 이 라이선스는 별도의 계약 없이 상업적 사용, 수정 및 재배포를 허용합니다.