PDF 문서 조작
PDF A 표준 (A 1A 및 A 1B)에 대한 PDF 문서 검증
PDF/A-1a 또는 PDF/A-1b 호환성을 위해 PDF 문서를 검증하려면 Document 클래스의 validate(…) 메서드를 사용하세요. 이 메서드는 결과가 저장될 파일의 이름과 필요한 검증 유형 PdfFormat 열거형: PDF_A_1A 또는 PDF_A_1B를 지정할 수 있도록 합니다.
출력 XML 형식은 사용자 지정 Aspose 형식입니다. XML에는 Problem이라는 이름을 가진 태그 모음이 포함되어 있습니다. 각 태그는 특정 문제의 세부 정보를 포함하고 있습니다. Problem 태그의 ObjectID 속성은 이 문제가 관련된 특정 객체의 ID를 나타냅니다. Clause 속성은 PDF 사양의 해당 규칙을 나타냅니다.
// 문서 열기
$document = new Document($inputFile);
$pdfFormat = (new PdfFormat())->PDF_A_1A;
// PDF를 PDF/A-1a로 검증
$document->validate($outputFile, $pdfFormat);
$document->close();
목차 작업
기존 PDF에 목차 추가
기존 PDF 파일에 목차를 추가하려면 com.aspose.pdf 패키지의 Heading 클래스를 사용하세요. com.aspose.pdf 패키지는 새 PDF 파일을 생성하고 기존 PDF 파일을 조작할 수 있습니다. 기존 PDF에 목차를 추가하려면 com.aspose.pdf 패키지를 사용하십시오.
이 PHP 코드 스니펫은 Aspose.PDF를 사용하여 기존 PDF 문서에 목차(Table of Contents, TOC)를 추가합니다:
// 문서 열기
$document = new Document($inputFile);
// PDF 파일의 첫 번째 페이지에 접근
$tocPage = $document->getPages()->insert(1);
// 목차 정보를 나타내는 객체 생성
$tocInfo = new TocInfo();
$title = new TextFragment("Table Of Contents");
$title->getTextState()->setFontSize(20);
$title->getTextState()->setFontStyle(FontStyles::$Bold);
// 목차의 제목 설정
$tocInfo->setTitle($title);
$tocPage->setTocInfo($tocInfo);
// 목차 요소로 사용될 문자열 객체 생성
$titles = ["First page", "Second page", "Third page", "Fourth page"];
for ($i = 0; $i < 4; $i++) {
// Heading 객체 생성
$heading2 = new Heading(1);
$segment2 = new TextSegment();
$heading2->setTocPage($tocPage);
$heading2->getSegments()->add($segment2);
// Heading 객체의 대상 페이지 지정
$page = $document->getPages()->get_Item($i + 2);
$heading2->setDestinationPage($page);
// 대상 페이지
$heading2->setTop($page->getRect()->getHeight());
// 대상 좌표
$segment2->setText($titles[$i]);
// 목차를 포함하는 페이지에 제목 추가
$tocPage->getParagraphs()->add($heading2);
}
// 업데이트된 문서 저장
$document->save($outputFile);
$document->close();
서로 다른 TOC 레벨에 대해 다른 TabLeaderType 설정
Aspose.PDF는 또한 서로 다른 TOC 레벨에 대해 다른 TabLeaderType을 설정할 수 있습니다. 다음과 같이 FormatArray의 LineDash 속성을 TabLeaderType 열거형의 적절한 값으로 설정해야 합니다.
// 문서 열기
$document = new Document($inputFile);
$tocPage = $document->getPages()->add();
$tocInfo = new TocInfo();
// LeaderType 설정
$tocInfo->setLineDash(TabLeaderType->Solid);
$title = new TextFragment("목차");
$title->getTextState()->setFontSize(30);
$tocInfo->setTitle($title);
// PDF 문서의 섹션 컬렉션에 목록 섹션 추가
$tocPage->setTocInfo($tocInfo);
// 각 레벨의 왼쪽 여백 및 텍스트 형식 설정을 통해 네 가지 레벨 목록의 형식을 정의
$fontStyles = new FontStyles();
$tabLeaderTypes = new TabLeaderType();
$tocInfo->setFormatArrayLength(4);
$tocInfo->getFormatArray()[0]->getMargin()->setLeft(0);
$tocInfo->getFormatArray()[0]->getMargin()->setRight(30);
$tocInfo->getFormatArray()[0]->setLineDash($tabLeaderTypes->getDot());
$tocInfo->getFormatArray()[0]->getTextState()->setFontStyle($fontStyles->getBold() | $fontStyles->getItalic());
$tocInfo->getFormatArray()[1]->getMargin()->setLeft(10);
$tocInfo->getFormatArray()[1]->getMargin()->setRight(30);
$tocInfo->getFormatArray()[1]->setLineDash($tabLeaderTypes->getNone());
$tocInfo->getFormatArray()[1]->getTextState()->setFontSize(10);
$tocInfo->getFormatArray()[2]->getMargin()->setLeft(20);
$tocInfo->getFormatArray()[2]->getMargin()->setRight(0);
$tocInfo->getFormatArray()[2]->getTextState()->setFontStyle($fontStyles->getBold());
$tocInfo->getFormatArray()[3]->setLineDash($tabLeaderTypes->getSolid());
$tocInfo->getFormatArray()[3]->getMargin()->setLeft(30);
$tocInfo->getFormatArray()[3]->getMargin()->setRight(30);
$tocInfo->getFormatArray()[3]->getTextState()->setFontStyle($fontStyles->getBold());
// PDF 문서에 섹션 생성
$page = $document->getPages()->add();
// 섹션에 네 개의 제목 추가
for ($Level = 1; $Level <= 4; $Level++) {
$heading2 = new Heading($Level);
$segment2 = new TextSegment();
$heading2->getSegments()->add($segment2);
$heading2->setAutoSequence(true);
$heading2->setTocPage($tocPage);
$segment2->setText("샘플 제목" . $Level);
$fontRepository = new FontRepository();
$heading2->getTextState()->setFont($fontRepository->findFont("Arial UnicodeMS"));
// 목차에 제목 추가.
$heading2->setInList(true);
$page->getParagraphs()->add($heading2);
}
// 업데이트된 문서 저장
$document->save($outputFile);
$document->close();
목차에서 페이지 번호 숨기기
목차에 제목과 함께 페이지 번호를 표시하지 않으려는 경우, TOCInfo 클래스의 ShowPageNumbers 속성을 false로 설정하면 됩니다. 목차에서 페이지 번호를 숨기기 위한 다음 코드 스니펫을 확인하십시오:
// 문서 열기
$document = new Document();
$tocPage = $document->getPages()->add();
// 목차 정보를 나타내는 객체 생성
$tocInfo = new TocInfo();
$title = new TextFragment("목차");
$title->getTextState()->setFontSize(20);
$title->getTextState()->setFontStyle(FontStyles::$Bold);
// 목차의 제목 설정
$tocInfo->setTitle($title);
// Pdf 문서의 섹션 컬렉션에 리스트 섹션 추가
$tocPage->setTocInfo($tocInfo);
// 왼쪽 여백 및 각 레벨의 텍스트 형식 설정을 통해 네 레벨 목록의 형식 정의
$tocInfo->setShowPageNumbers(false);
$tocInfo->setFormatArrayLength(4);
$tocInfo->getFormatArray()[0]->getMargin()->setRight(0);
$tocInfo->getFormatArray()[0]->getTextState()->setFontStyle(FontStyles::$Bold | FontStyles::$Italic);
$tocInfo->getFormatArray()[1]->getMargin()->setLeft(30);
$tocInfo->getFormatArray()[1]->getTextState()->setUnderline(true);
$tocInfo->getFormatArray()[1]->getTextState()->setFontSize(10);
$tocInfo->getFormatArray()[2]->getTextState()->setFontStyle(FontStyles::$Bold);
$tocInfo->getFormatArray()[3]->getTextState()->setFontStyle(FontStyles::$Bold);
$page = $document->getPages()->add();
// 섹션에 네 개의 제목 추가
for ($Level = 1; $Level < 5; $Level++) {
$heading2 = new Heading($Level);
$segment2 = new TextSegment();
$heading2->setTocPage($tocPage);
$heading2->getSegments()->add($segment2);
$heading2->setAutoSequence(true);
$segment2->setText("이것은 레벨 " + $Level + "의 제목입니다");
$heading2->setInList(true);
$page->getParagraphs()->add($heading2);
}
// 업데이트된 문서 저장
$document->save($outputFile);
$document->close();
TOC 추가 시 페이지 번호 사용자 정의
PDF 문서에 TOC를 추가할 때 페이지 번호를 사용자 정의하는 것이 일반적입니다. 예를 들어, 페이지 번호 앞에 P1, P2, P3 등과 같은 접두사를 추가해야 할 수 있습니다. 이러한 경우, Aspose.PDF for PHP via Java는 TocInfo 클래스의 PageNumbersPrefix 속성을 제공하여 다음 코드 샘플에서 보여주는 대로 페이지 번호를 사용자 정의할 수 있습니다.
// 문서 열기
$document = new Document($inputFile);
// PDF 파일의 첫 번째 페이지에 접근
$tocPage = $document->getPages()->insert(1);
// TOC 정보를 나타내는 객체 생성
$tocInfo = new TocInfo();
$title = new TextFragment("Table Of Contents");
$title->getTextState()->setFontSize(20);
$title->getTextState()->setFontStyle(FontStyles::$Bold);
// TOC 제목 설정
$tocInfo->setTitle($title);
$tocInfo->setPageNumbersPrefix("P");
$tocPage->setTocInfo($tocInfo);
// TOC 요소로 사용될 문자열 객체 생성
$titles = ["First page", "Second page", "Third page", "Fourth page"];
for ($i = 0; $i < 4; $i++) {
// Heading 객체 생성
$heading2 = new Heading(1);
$segment2 = new TextSegment();
$heading2->setTocPage($tocPage);
$heading2->getSegments()->add($segment2);
// Heading 객체의 대상 페이지 지정
$page = $document->getPages()->get_Item($i + 2);
$heading2->setDestinationPage($page);
// 대상 페이지
$heading2->setTop($page->getRect()->getHeight());
// 대상 좌표
$segment2->setText($titles[$i]);
// TOC가 포함된 페이지에 heading 추가
$tocPage->getParagraphs()->add($heading2);
}
// 업데이트된 문서 저장
$document->save($outputFile);
$document->close();
PDF 파일에 레이어 추가
레이어는 PDF 문서에서 다양한 방식으로 사용할 수 있습니다. 여러 언어로 된 파일을 배포하려는 경우 각 언어의 텍스트가 다른 레이어에 나타나도록 하고, 배경 디자인은 별도의 레이어에 나타나도록 할 수 있습니다. 또는 애니메이션이 별도의 레이어에 나타나는 문서를 생성할 수도 있습니다. 예를 들어 파일에 사용권 계약을 추가하고, 사용자가 계약 조건에 동의하기 전까지 내용을 보지 못하게 할 수 있습니다.
Aspose.PDF for PHP via Java는 PDF 파일에 레이어를 추가하는 것을 지원합니다.
PDF 파일의 레이어를 작업하려면 다음의 API 멤버를 사용하십시오.
Layer 클래스는 레이어를 나타내며 다음과 같은 속성을 포함합니다:
- Name – 레이어의 이름.
- Id – 레이어의 ID.
- Contents – 레이어 연산자의 목록.
한번 Layer 객체가 정의되면, Page 객체의 Layers 컬렉션에 이를 추가하십시오. PDF 문서에 레이어를 추가하는 방법을 보여주는 코드입니다.
// 문서 열기
$document = new Document($inputFile);
$page = $document->getPages()->add();
$arrayList = new java("java.util.ArrayList");
$page->setLayers($arrayList);
$layer = new $layer("oc1", "빨간 선");
$layer->getContents()->add(new operators_SetRGBColorStroke(1, 0, 0));
$layer->getContents()->add(new operators_MoveTo(500, 700));
$layer->getContents()->add(new operators_LineTo(400, 700));
$layer->getContents()->add(new operators_Stroke());
$page->getLayers()->add($layer);
$layer = new $layer("oc2", "녹색 선");
$layer->getContents()->add(new operators_SetRGBColorStroke(0, 1, 0));
$layer->getContents()->add(new operators_MoveTo(500, 750));
$layer->getContents()->add(new operators_LineTo(400, 750));
$layer->getContents()->add(new operators_Stroke());
$page->getLayers()->add($layer);
$layer = new $layer("oc3", "파란 선");
$layer->getContents()->add(new operators_SetRGBColorStroke(0, 0, 1));
$layer->getContents()->add(new operators_MoveTo(500, 800));
$layer->getContents()->add(new operators_LineTo(400, 800));
$layer->getContents()->add(new operators_Stroke());
$page->getLayers()->add($layer);
// 업데이트된 문서 저장
$document->save($outputFile);
$document->close();
PDF 만료 설정
PDF 만료 기능은 PDF 파일의 유효 기간을 설정합니다. 특정 날짜에 누군가가 접근하려고 하면, 파일이 만료되었으며 새 파일이 필요하다는 설명과 함께 팝업이 표시됩니다.
Aspose.PDF는 PDF 파일을 생성하고 편집할 때 만료를 설정할 수 있게 합니다.
아래의 코드 스니펫은 PDF 파일의 만료 날짜를 설정하는 방법을 보여줍니다. JavaScript를 사용해야 하며, 제3자 구성 요소(예: OwnerGuard)로 저장된 파일은 해당 유틸리티 없이는 다른 워크스테이션에서 볼 수 없습니다.
PDF 파일은 만료 날짜가 있는 기존 파일을 사용하여 PDF OwnerGuard로 생성할 수 있습니다. 그러나 새 파일은 PDF OwnerGuard가 설치된 워크스테이션에서만 열 수 있습니다. PDF OwnerGuard가 없는 워크스테이션에서는 ExpirationFeatureError가 발생합니다. 예를 들어, PDF 리더는 OwnerGuard가 설치되어 있으면 파일을 열 수 있지만, Adobe Acrobat은 오류를 반환합니다.
// 문서 열기
$document = new Document($inputFile);
$javaScript = new JavascriptAction(
"var year=2020;" +
"var month=4;" +
"var today = new Date(); today = new Date(today.getFullYear(), today.getMonth());" +
"var expiry = new Date(year, month);" +
"if (today.getTime() > expiry.getTime())" +
"app.alert('The file is expired. You need a new one.');"
);
$document->setOpenAction($javaScript);
$document->save($outputFile);
$document->close();