PDF_BOX
https://www.tutorialspoint.com/pdfbox/index.htm
pdfbox 튜토리얼
pdf파일을 만드는 예제
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
public class PDFDocumentCreate {
public static void main(String[] args) {
PDDocument document = new PDDocument();//빈 PDF 문서를 만든다 .
try {
document.save("D:/EDOC_JAVA/Study/pdfprac/test.pdf");
System.out.println("PDF Create");
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
PDF파일생성후 빈페이지를 생성한다.
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
public class AddingPage {
public static void main(String[] args) {
//create PDF documet object
PDDocument document = new PDDocument();
for(int i = 0 ; i<10 ; i++){//총 10 페이지가 만들어짐
//create a blanck Page
PDPage blanckPage = new PDPage();
//Adding the blank page to the doucument;
document.addPage(blanckPage);
}
//Saving the document
try {
document.save("D:/EDOC_JAVA/Study/pdfprac/blanck.pdf");
System.out.println("PDF created");
} catch (IOException e) {
e.printStackTrace();
}
}
}
기존의 PDF파일에 페이지를 추가
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
public class LoadingExistingDocument {
public static void main(String[] args) {
//Loading an exsiting document
File file = new File("D:"+File.separator+"DEV_DOC"+File.separator+"dev_book"+File.separator+"테스트주도개발ocr.pdf");
try {
PDDocument document = PDDocument.load(file);
System.out.println("PDF loaded");
//adding a blank page to the document
document.addPage(new PDPage());
//Saving the document
document.save("D:"+File.separator+"EDOC_JAVA"+File.separator+"Study"+File.separator+"pdfprac"+file.separator+"testadd.pdf");
//close the document
document.close();
} catch (InvalidPasswordException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
페이지 삭제하기
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.w3c.dom.css.DocumentCSS;
public class Removing_pages {
public static void main(String[] args) throws InvalidPasswordException, IOException {
//Loading an existing document
File file = new File("D:"+File.separator+"EDOC_JAVA"+File.separator+"Study"+File.separator+"pdfprac"+File.separator+"testadd.pdf");
PDDocument document = PDDocument.load(file);
//Listing the number of exsting page
int noOfPages = document.getNumberOfPages();
System.out.println(noOfPages);
//Removing the pages
document.removePage(2);//페이지는 0번 부터 시작 3번째 페이지가 삭제 된다.
System.out.println("page removed");
//Saving the document
document.save("D:"+File.separator+"EDOC_JAVA"+File.separator+"Study"+File.separator+"pdfprac"+File.separator+"testadd2.pdf");
//Closeing the document
document.close();
}
}
PDF 문서에도 속성이 있다 .
이런 속성의 키와 값으로 이루어져 있다 .
PDF의 문서의 속성의 다음과 같다 .
File - 이 속성은 파일의 이름을 포함한다.
Title - 이 속성을 사용하여 문서의 제목을 설정할수 있다.
Author - 이 속성을 사용하여 문서 작성자의 이름을 설정할 수 있다.
Suject - 이 속성을 사용하여 PDF 문서의 제목을 지정할 수있다.
Keywords - 이 속승ㄹ 사용하면 문서를검색 할 수있는 키워드를 나열 할 수있다.
Created - 이 속성을 사용하면 생성된 날짜를 설정할 수 있다.
Modified - 문서의 수정된 날짜를 설정할 수 있다.
Application - 이 속성을 사용하여 문서의 응용 프로그램을 설정할 수 있다.
문서 속성 설정하기
setAuthor(String author)
- PDF 문서 작성자 속성 값 설정에 사용
setTitle(String title)
- Title속성 설정에 사용
setCreator(String creator)
- Creator라는 PDF 문서의 속성값을 설정하는데 사용된다.
setSubject(String subject)
- Subject를 설정한다.
setCreattionDate(Calendar date)
- 이 메서드는 CreationDate 라는 PDF 문서의 속성 값을 설정하는 데 사용된다.
setModificationDate(Calendar date)
- ModificationDate 라는 PDF 문서의 속성 값을 설정하는 데 사용된다.
setKeywords(String keywords list)
- PDF 문서의 Keywords 속성 값을 설정하는 데 사용된다.
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.PDPage;
public class AddingDocumentAttributues {
public static void main(String[] args) throws IOException {
//Creating PDF document object
PDDocument document = new PDDocument();
//Creating a blank page
PDPage blankPage = new PDPage();
//Adding the blank page to the document;
document.addPage(blankPage);
//Createing the PDDoucmentInfomation object
PDDocumentInformation pdd = document.getDocumentInformation();
//Setting the author of the document
pdd.setAuthor("Tutorialspoint");
//Setting the title of the document
pdd.setTitle("Sample document");
//Setting the creator of the document
pdd.setSubject("Eample document");
//Setting the created date of the document
Calendar date = new GregorianCalendar();
date.set(2015, 11,5);
pdd.setCreationDate(date);
//Settiong the modified date of the document
date.set(2099,6,5);
pdd.setModificationDate(date);
//Setting keywords for the document
pdd.setKeywords("sample,first example,my pdf");
//Saving the document
document.save("D:"+File.separator+"EDOC_JAVA"+File.separator+"Study"+File.separator+"pdfprac"+File.separator+"testadd.pdf");
System.out.println("Properties added successfully");
//closing the document
document.close();
}
}
문서 속성이 설정가능하다.
가져오는 것도 가능
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
public class RetrivingDoumentAttributes {
public static void main(String[] args) throws InvalidPasswordException, IOException {
//Loading an existing document
File file = new File("D:"+File.separator+"EDOC_JAVA"+File.separator+"Study"+File.separator+"pdfprac"+File.separator+"testadd.pdf");
PDDocument document = PDDocument.load(file);
//Getting the PDDocumentInformation object
PDDocumentInformation pdd = document.getDocumentInformation();
//Retrieving the info of a PDF document
System.out.println("Author of the document is :"+ pdd.getAuthor());
System.out.println("Title of the document is :"+ pdd.getTitle());
System.out.println("Subject of the document is :"+ pdd.getSubject());
System.out.println("Creator of the document is :"+ pdd.getCreator());
System.out.println("Creation date of the document is :"+ pdd.getCreationDate());
System.out.println("Modification date of the document is :"+
pdd.getModificationDate());
System.out.println("Keywords of the document are :"+ pdd.getKeywords());
//Closing the document
document.close();
}
}
PDF에 텍스트 추가
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.font.PDType1CFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public class AddingContent {
public static void main(String[] args) throws InvalidPasswordException, IOException {
//Loding an Exsiting document
File file = new File("D:"+File.separator+"EDOC_JAVA"+File.separator+"Study"+File.separator+"pdfprac"+File.separator+"testadd.pdf");
PDDocument document = PDDocument.load(file);
//Retrieving the pages of the document
PDPage page = document.getPage(0);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
//Begin the Content Stream
contentStream.beginText();
//Setiing the font to the Content stream
/*contentStream.setFont(PDType1Font.TIMES_ROMAN, 12);*/
//한글 폰트는 별도로 다운로드 받아서 사용
InputStream in = new FileInputStream("D:/EDOC_JAVA/Study/pdfprac/NanumFont_TTF_ALL/NanumMyeongjo.ttf");
PDType0Font korfont = PDType0Font.load(document, in);
contentStream.setFont(korfont, 25);
//Setting the postion for the line
contentStream.newLineAtOffset(25, 500);
String text = "인증서 진본 확인 ";
//String text = "addtext";
//Adding text in the form of string
contentStream.showText(text);
//Ending the content stream
contentStream.endText();
System.out.println("Content added");
//Closing the content stream
contentStream.close();
//Saving the document
document.save("D:/EDOC_JAVA/Study/pdfprac/testadd.pdf");
}
}
여러줄 입력은 다음과 같다 .
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
public class AddingMutipleLine {
public static void main(String[] args) throws InvalidPasswordException, IOException {
File file = new File("D:/EDOC_JAVA/Study/pdfprac/testadd.pdf");
PDDocument doc = PDDocument.load(file);
PDPage page = doc.getPage(0);
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
contentStream.beginText();//텍스트입력을 시작하겠다는 의미
//Setting position for the line
contentStream.newLineAtOffset(25, 700);
//글꼴 설정
InputStream in = new FileInputStream("D:/EDOC_JAVA/Study/pdfprac/NanumFont_TTF_ALL/NanumMyeongjo.ttf");
PDType0Font korfont = PDType0Font.load(doc, in);
contentStream.setFont(korfont, 25);
//택스트 행간 설정
contentStream.setLeading(24.5f);
//문자열 삽입
contentStream.showText("여러 줄 입력을 ");
contentStream.newLine();
contentStream.showText("시도 합니다 .");
//텍스트 끝내기
contentStream.endText();
System.out.println("Content added");
//PDPageContentStream 닫기
contentStream.close();
doc.save("D:/EDOC_JAVA/Study/pdfprac/testadd.pdf");
//문서닫기
doc.close();
}
}
PDF에 텍스트 읽기
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
public class ReadingText {
public static void main(String[] args) throws IOException {
//Loading an exisiting document 기존 PDF문서 로드
File file = new File("D:/EDOC_JAVA/Study/pdfprac/testadd2.pdf");
PDDocument doc = PDDocument.load(file);
//PDFextStripper 클래스 인스턴스 생성
PDFTextStripper pdfTextStripper = new PDFTextStripper();
//텍스트 검색
String text = pdfTextStripper.getText(doc);
System.out.println(text);
doc.close();
}
}
PDF에 이미지 삽입하기
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class InsertingImage {
public static void main(String[] args) throws InvalidPasswordException, IOException {
File file = new File ("D:/EDOC_JAVA/Study/pdfprac/testadd.pdf");
PDDocument doc = PDDocument.load(file);
//페이지 가져오기
PDPage page = doc.getPage(0);
//PDImageXObject 객체 만들기
PDImageXObject pdImage = PDImageXObject.createFromFile("D:/EDOC_JAVA/Study/pdfprac/한국전자인증_TSA.png", doc);
//콘텐츠 스트림 준비
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
//PDF 문서에 이미지 그리기
contentStream.drawImage(pdImage,0,0);
//PDPageContentStream 닫기
contentStream.close();
//문서 저장
doc.save("D:/EDOC_JAVA/Study/pdfprac/test_signed.pdf");
//문서 닫기
doc.close();
}
}
그림 추가하기
import java.awt.Color;
import java.io.File;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
public class ShowColorBoxes {
public static void main(String args[]) throws Exception {
//Loading an existing document
File file = new File ("D:/EDOC_JAVA/Study/pdfprac/testadd.pdf");
PDDocument document = PDDocument.load(file);
//Retrieving a page of the PDF Document
PDPage page = document.getPage(0);
//Instantiating the PDPageContentStream class
PDPageContentStream contentStream = new PDPageContentStream(document, page);
//Setting the non stroking color
contentStream.setNonStrokingColor(Color.DARK_GRAY);
//Drawing a rectangle
contentStream.addRect(200, 650, 100, 100);
//Drawing a rectangle
contentStream.fill();
System.out.println("rectangle added");
//Closing the ContentStream object
contentStream.close();
//Saving the document
File file1 = new File("C:/PdfBox_Examples/colorbox.pdf");
document.save(file1);
//Closing the document
document.close();
}
}