1. **PDFBox 설치 및 의존성 추가**
먼저, Apache PDFBox 라이브러리를 프로젝트에 추가해야 합니다. Maven 프로젝트에서는 `pom.xml` 파일에 다음 의존성을 추가하여 PDFBox를 사용할 수 있습니다.
```xml
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.27</version> <!-- PDFBox의 최신 버전을 사용하세요 -->
</dependency>
```
2. **PDF 문서 열기 및 페이지 접근**
다음으로 PDF 문서를 열고 각 페이지에 접근하여 상하 반전을 구현하겠습니다.
```java
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import java.io.File;
import java.io.IOException;
public class PDFInvert {
public static void main(String[] args) {
File file = new File("example.pdf");
try (PDDocument document = PDDocument.load(file)) {
for (PDPage page : document.getPages()) {
invertPage(page);
}
document.save("inverted_example.pdf");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void invertPage(PDPage page) {
PDRectangle mediaBox = page.getMediaBox();
float pageHeight = mediaBox.getHeight();
// 페이지 상하 반전을 위해 Y축 좌표를 뒤집어줌
page.setRotation(180); // PDFBox의 setRotation을 사용하여 회전 가능
float translateY = pageHeight;
// 이전에 매 도형을 변형하려는 경우 필요
page.setCropBox(new PDRectangle(
0,
-translateY,
mediaBox.getWidth(),
mediaBox.getHeight()));
}
}
```
3. **상하 반전을 위한 페이지 변환**
각 페이지의 내용은 좌표를 기반으로 배치됩니다. 이를 위해 페이지의 Y축을 기준으로 반전하여 페이지를 회전하고, 새로운 위치로 변환합니다. `setRotation` 메서드를 사용하면 페이지를 회전할 수 있습니다.
위 코드에서는 `page.setRotation(180)`을 사용하여 페이지를 180도로 회전시켰고, `setCropBox` 메서드를 통해 페이지의 뷰포트 위치를 조정했습니다.
4. **결과 저장**
`document.save("inverted_example.pdf")` 코드는 변경된 PDF 문서를 새로운 파일로 저장합니다. 이로써 원본은 그대로 두고 새로운 PDF 파일에만 변경사항이 적용되도록 합니다.
이 방법을 통해 Java와 Apache PDFBox를 사용해서 PDF 파일의 페이지를 상하 반전할 수 있습니다. PDF 문서를 조작할 때는 파일 시스템을 변경하지 않도록 주의하세요. 항상 원본 파일은 백업하고 작업하는 것을 권장합니다.