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 | 텍스트 노트 주석 |
Form | AcroForm 필드 컨테이너는 Document.Form()를 통해 도달함 |
TextBoxField | 단일 행/다중 행 텍스트 폼 필드 |