tmxhsk99 2019. 5. 17. 11:40

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