-
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(); } }