package pdfApplication;

import java.awt.Color;
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.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
/*
import org.apache.pdfbox.exceptions.COSVisitorException;
*/
public class HelloPdf {

	public static void main(String[] args) {
		PDDocument document = new PDDocument();
		PDPage page = new PDPage(PDRectangle.A4);
		document.addPage(page);
		PDDocumentInformation pddi= new PDDocumentInformation() ;
		pddi.setTitle("HelloPDF 2ページPDF生成");
		document.setDocumentInformation(pddi);
		
		PDFont font=PDType1Font.COURIER;
		String FontFileName="/usr/share/fonts/truetype/fonts-japanese-gothic.ttf";
//		 /usr/share/fonts/truetype/fonts-japanese-gothic.ttf --> /etc/alternatives/fonts-japanese-gothic.ttf --> /usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf

		try {
			font= PDType0Font.load(document, new File(FontFileName));
			PDPageContentStream contentStream = new PDPageContentStream(document,page);
			contentStream.setNonStrokingColor(Color.RED);
			contentStream.addRect(40, 650, 260, 50);
			contentStream.fill();           
	            
			contentStream.beginText();	// beginText() .... endText()
				contentStream.setNonStrokingColor(Color.BLACK);
				contentStream.setFont(font, 12); //fontSize 12
				contentStream.showText("+");
				contentStream.newLineAtOffset(0, 700);
				contentStream.showText("Hello World");
				contentStream.newLineAtOffset(50, -20);
				contentStream.setNonStrokingColor(Color.YELLOW);
				contentStream.showText("font.getName()= " + font.getName());
				contentStream.newLineAtOffset(150, -20);
				contentStream.setNonStrokingColor(Color.BLACK);
				contentStream.showText("font.getSubType()= " + font.getSubType());
				contentStream.newLineAtOffset(-30, -20);
				contentStream.showText("font.toString()= " + font.toString());
				contentStream.newLineAtOffset(-30, -20);
				contentStream.showText("こんにちわ");
				contentStream.newLineAtOffset(-30, -20);
				contentStream.showText("AAA");
				contentStream.newLineAtOffset(0,-20);
				contentStream.showText("page.getMediaBox().getWidth() =  " +  page.getMediaBox().getWidth()    );
				contentStream.newLineAtOffset(0,-20);
				contentStream.showText("page.getMediaBox().getHeight() =  " +  page.getMediaBox().getHeight()    );
				contentStream.endText();

			contentStream.moveTo(100, 100);
			contentStream.lineTo(250, 150);
			contentStream.setStrokingColor(Color.GREEN);
			contentStream.setLineWidth(5);
			contentStream.setLineDashPattern(new float[]{8,4}, 0);
			contentStream.stroke();

			contentStream.setNonStrokingColor(Color.CYAN);
			contentStream.addRect(150, 160, 10, 20);
			contentStream.fill();
             	
			contentStream.setStrokingColor(Color.BLUE);
			contentStream.addRect(0, 0, page.getMediaBox().getWidth(), page.getMediaBox().getHeight());
			contentStream.stroke();              
            
			// 画像オブジェクトを作成する
			PDImageXObject image = PDImageXObject.createFromFile("duke.png", document);
//           PDXObjectImage xImage = new PDJpeg(document, new FileInputStream("hogehoge.jpg"));

			contentStream.drawImage(image, 150, 200, image.getWidth(), image.getHeight());
			contentStream.close();
			
//			2ページ目
			page = new PDPage(PDRectangle.A4);
			document.addPage(page);
			contentStream = new PDPageContentStream(document, page);
			contentStream.beginText();	// beginText() .... endText()
				contentStream.setNonStrokingColor(Color.BLACK);
				contentStream.setFont(font, 12); //fontSize 12  ;beginText()の後、showText()の前にsetFontは必須
				contentStream.newLineAtOffset(50, 700);
				contentStream.showText("Hello PDF");
				contentStream.newLineAtOffset(0, -20);
				contentStream.showText("2ページ目");
	       contentStream.endText();
	       contentStream.drawImage(image, 150, 200, image.getWidth(), image.getHeight());
			contentStream.close();
			
			document.save("HelloPdf.pdf");
			document.close();
		} catch (IOException e) {
			e.printStackTrace();
		} 
		finally{
			System.out.println("HelloPdf finished.");
		}
	}
}