Aspose.PDF FOSS for C++ 기능

Aspose.PDF FOSS for C++ 기능

Aspose.PDF FOSS for C++ 기능

Aspose.PDF FOSS for C++은 PDF 문서를 생성, 열기, 수정 및 저장하기 위한 C++20 라이브러리입니다. 이 페이지에서는 주요 기능 영역과 해당 영역의 진입점 역할을 하는 클래스를 조사합니다. 각 영역은 별도의 개발자 가이드 페이지에서 자세히 다룹니다.


문서 관리

Aspose::Pdf::Document은 모든 작업의 루트 객체입니다. 경로에서 기존 파일을 열고, Pages()을 통해 페이지 컬렉션을 노출하며, Save()로 변경 사항을 저장합니다. Optimize()와 OptimizeResources()는 사용되지 않거나 중복된 리소스를 제거하여 파일 크기를 줄입니다.

#include <aspose/pdf/document.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    auto& pages = doc.Pages();
    pages.Add();                 // append a blank page
    pages.Delete(1);             // remove the original first page

    doc.Optimize();
    doc.Save("output.pdf");
}

텍스트 추출

Aspose::Pdf::Text::TextAbsorber은 문서 또는 단일 페이지를 순회하면서 일반 텍스트를 수집하며, Visit()를 호출한 후 Text()으로 가져올 수 있습니다. TextFragmentAbsorber은 동일한 순회를 수행하지만 TextFragments()를 통해 개별 TextFragment 객체를 반환하여 각 조각의 위치와 텍스트 상태에 접근할 수 있게 합니다.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("report.pdf");

    Aspose::Pdf::Text::TextAbsorber absorber;
    absorber.Visit(doc);

    std::cout << absorber.Text() << "\n";
}

래스터 이미지로 렌더링

페이지 렌더링 장치는 Page을(를) 래스터 이미지로 변환합니다. BmpDevice, PngDevice, JpegDevice, TiffDevice는 동일한 Process(page, output) 서명을 공유하며 출력 DPI를 설정하는 Resolution으로 구성됩니다.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>

int main() {
    Aspose::Pdf::Document doc("report.pdf");

    Aspose::Pdf::Devices::BmpDevice device(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream out("page1.bmp", std::ios::binary);
    device.Process(doc.Pages()[1], out);
}

암호화

Document::Encrypt()은(는) 사용자 비밀번호(문서를 열기 위해 필요)와 소유자 비밀번호(권한을 변경하기 위해 필요)로 문서를 보호하며, CryptoAlgorithm 열거형에서 선택된 알고리즘을 사용합니다: RC4x40, RC4x128, AESx128, 또는 AESx256. IsEncrypted()은 현재 상태를 보고하고 Decrypt()은 이미 열린 문서의 보호를 제거합니다.

#include <aspose/pdf/document.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    doc.Encrypt("user-password", "owner-password",
                Aspose::Pdf::Permissions::PrintDocument,
                Aspose::Pdf::CryptoAlgorithm::AESx256);

    doc.Save("encrypted.pdf");
}

주석

주석은 페이지에 보이는 메모, 도형 및 마크업을 첨부합니다. 각 주석 유형은 Annotation에서 파생되며 대상 Page과 배치 Rectangle로 구성된 후 주석()(an AnnotationCollection)를 통해 페이지에 추가됩니다.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto page = doc.Pages()[1];

    Aspose::Pdf::Annotations::TextAnnotation note(
        page, Aspose::Pdf::Rectangle(50.0, 700.0, 250.0, 740.0, false));
    note.Contents("Reviewed and approved.");

    page.Annotations().Add(note);
    doc.Save("annotated.pdf");
}

Forms

AcroForm 필드는 Aspose::Pdf::Forms::Form을 통해 관리되며, Document::Form()을 통해 접근할 수 있습니다. TextBoxField와 같은 필드 유형은 주석과 같이 — Page 및 Rectangle를 사용하여 — 구성되고 Form::Add()에 등록됩니다.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_box_field.hpp>
#include <aspose/pdf/rectangle.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto page = doc.Pages()[1];

    Aspose::Pdf::Forms::TextBoxField field(
        page, Aspose::Pdf::Rectangle(100.0, 650.0, 300.0, 670.0, false));
    field.PartialName("customer_name");
    field.Value("Jane Doe");

    doc.Form().Add(field);
    doc.Save("form_filled.pdf");
}

팁 및 모범 사례

  • 입력 파일을 경로로 Document 생성자를 사용해 엽니다; 다른 핸들이 아직 열려 있을 수 있는 경우 소스를 덮어쓰지 않고 명시적인 출력 경로를 지정하여 Save()을 호출합니다.
  • 문서가 많이 편집된 경우 Optimize()을 Save()보다 먼저 호출하세요 — 이는 더 이상 어떤 페이지에서도 참조되지 않는 리소스를 제거합니다.
  • 해상도당 한 번씩 래스터 장치(BmpDevice, PngDevice, JpegDevice, TiffDevice)를 생성하고 페이지마다 장치를 다시 만들지 말고 페이지 간에 재사용하십시오.
  • Encrypt()을 호출할 때 사용자 비밀번호와 소유자 비밀번호를 모두 설정하십시오 — 사용자 비밀번호가 비어 있으면 모든 뷰어가 파일을 열 수 있고, 소유자 비밀번호는 권한 변경을 제어합니다.
  • 문서가 추가된 페이지 콘텐츠에 대한 참조를 보유하고 있기 때문에, Save()가 반환된 이후까지 주석 및 필드 객체(TextAnnotation, TextBoxField 등)를 유지하십시오.

일반적인 문제

문제원인수정
Save()은(는) 내용이 변경되지 않은 파일을 생성합니다doc.Pages()에서 가져온 객체가 아니라 페이지 또는 주석 복사본에 편집이 이루어졌습니다Pages(), Annotations(), 또는 Form()가 직접 반환하는 객체를 수정하세요
렌더링된 이미지가 비어 있거나 빈 화면입니다Process()에 잘못된 페이지 인덱스가 전달되었습니다PageCollection은 1부터 시작합니다 — 페이지 1은 doc.Pages()[1]이고, [0]가 아닙니다
Encrypt()은(는) 비밀번호 없이도 열 수 있는 파일을 생성합니다사용자 비밀번호가 비어 있음userPassword 인수에 비어 있지 않은 문자열을 전달하세요
스캔된 PDF의 추출된 텍스트가 비어 있습니다해당 페이지에는 텍스트 연산자가 아니라 래스터 이미지 콘텐츠만 포함되어 있습니다TextAbsorber은 텍스트 연산자를 읽습니다; 이미지 전용 페이지에는 추출할 것이 없습니다
Form::Add()으로 추가된 필드가 페이지에 표시되지 않습니다필드의 Rectangle가 페이지의 MediaBox 밖에 있습니다.사각형 좌표가 Page::MediaBox() 범위 내에 있는지 확인하십시오.

FAQ

Aspose.PDF C++용 FOSS가 상용 PDF 라이브러리에 의존합니까?

아니요. 이것은 처음부터 만든 C++20 구현으로, 상업용 PDF 스택에 대한 의존성이 없으며 MIT 라이선스로 배포됩니다.

기존 PDF를 여는 대신 처음부터 새로운 PDF를 만들 수 있나요?

네. Document에는 빈 문서를 생성하는 기본 생성자가 있습니다; 저장하기 전에 페이지를 추가하려면 Pages().Add()을 호출하세요.

어떤 래스터 포맷으로 렌더링할 수 있나요?

BmpDevice, PngDevice, JpegDevice, 및 TiffDevice은 각각 BMP, PNG, JPEG, TIFF 형식으로 개별 페이지를 렌더링합니다.

지원되는 암호화 알고리즘은 무엇인가요?

CryptoAlgorithm은 RC4x40, RC4x128, AESx128, AESx256를 제공하며, 이는 Document::Encrypt()에 전달됩니다.

다음에는 어디로 가야 하나요?

개발자 가이드에는 문서 및 페이지 관리, PDF 고유 그래픽 및 도형, 주석 및 대화형 양식, 그리고 일반 파일 작업을 래핑하는 고수준 파사드 클래스에 대한 전용 페이지가 포함되어 있습니다.


API Reference 요약

클래스/메서드설명
Document루트 객체 — PDF를 열고, 만들고, 저장하고, 최적화합니다.
Document.Pages()문서의 PageCollection를 반환합니다.
Document.Encrypt() / Decrypt()문서를 비밀번호로 보호하거나 보호를 해제합니다
Document.Form()문서의 AcroForm 컨테이너를 반환합니다
TextAbsorber문서 또는 페이지에서 일반 텍스트를 추출합니다
TextFragmentAbsorber위치가 지정된 텍스트 조각을 추출합니다
BmpDevice / PngDevice / JpegDevice / TiffDevice페이지를 래스터 이미지 형식으로 렌더링합니다
Resolution렌더링 장치에 전달되는 출력 DPI
CryptoAlgorithm암호화 알고리즘 선택: RC4 또는 AES, 40–256비트
Permissions액세스 제어 플래그가 Encrypt()에 전달됨
Annotation / AnnotationCollection페이지 주석을 위한 기본 유형 및 컨테이너
TextAnnotation텍스트 노트 주석
FormAcroForm 필드 컨테이너는 Document.Form()를 통해 도달함
TextBoxField단일 행/다중 행 텍스트 폼 필드

참조

 한국어