반응형

# Java MQTT Client 만들기_Mosquitto MQTT broker 설치 및 서버구동

  • MQTT : 메세지를 중계해주는 프로토콜.
  • 아두이노 등을 이용하여 포트 번호 등의 정보를 이용, 통신하여 온도, 습도 등 원하는 정보 표시가능.

## Mosquitto MQTT broker

Mosquitto MQTT broker 설치

  • 운영체제에 맞는 프로그램 다운로드 진행.

  • 다운로드 받은 설치 파일 실행, 경로를 C드라이브에 MQTTProject 폴더 생성하여 지정 후 설치진행.

Mosquitto MQTT broker 서버 구동

  • 관리자 권한으로 cmd 실행.
  • 아래 명령어 입력하여 MQTT 서버 구동 
mosquitto -v

구독자(subscriber) 실행

  • 서버 구동한건 내려놓고, 별도로 관리자 권한으로 cmd 실행
  • 아래 명령어 입력하여 실행 - 수신 대기 창.

  • 외부에서 연결 시에는 아래와 같이 입력하여 진행
mosquitto_sub -h MQTT서버ip주소 -t iot -p 1883

발행자(publisher) 실행

  • 아래 명령어 입력하여 실행 - 메시지(토픽) 발행 창.

  • 이렇게 하면 아래와 같이 구독자에게 입력한 내용이 전달된다. (JSON 등의 형식으로도 전달 가능)

반응형
반응형

# Java iText API 활용 Excel에서 데이터 읽어서 PDF로 만들기

  • Excel 에 저장된 데이터를 읽어서 PDF로 생성. (Excel > PDF)
  • 기존에 키값에 해당하는 데이터를 입력하여 조회된 정보를 Excel 파일로 만드는 작업을 했었는데, 반대로 Excel 에 저장된 데이터를 가져와 PDF로 생성하는 작업 진행. (이전 작업 내역 종합하여 진행)

## 생성 결과

## 작업 소스

isbn.xls
0.25MB
bookList.pdf
0.31MB
malgun.ttf
12.83MB

import java.io.*;
import java.util.*;
import java.util.List;

import org.apache.poi.hssf.usermodel.*;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import kr.inflearn.ExcelVO;

public class Project04_F {
	public static void main(String[] args) {
		// 엑셀 데이터 읽어와서 PDF 생성하기.
		// 1. 엑셀 불러오기
		String filename = "isbn.xls";	
		
		List<ExcelVO> data = new ArrayList<ExcelVO>();
		try (FileInputStream fis = new FileInputStream(filename)) {
			HSSFWorkbook workbook = new HSSFWorkbook(fis);
			HSSFSheet sheet = workbook.getSheetAt(0);
			Iterator rows = sheet.rowIterator();
			String[] imsi = new String[5];
			
			rows.next();	// 첫번째 줄은 헤더 이므로 다음줄로 이동.
			while (rows.hasNext()) { // 로우
				HSSFRow row = (HSSFRow) rows.next();
				Iterator cells = row.cellIterator();
				
				int i = 0;
				while (cells.hasNext()) {	// 셀 정보
					HSSFCell cell = (HSSFCell) cells.next();
					imsi[i] = cell.toString();
					i++;
					
					if (i == 5) {	// 5의 경우 이미지 정보로 필요없으므로 5일때 break.
						break;
					}
				}
				
				ExcelVO vo = new ExcelVO(imsi[0], imsi[1], imsi[2], imsi[3], imsi[4]);
				data.add(vo);
			}
			
			// 2. Excel 데이터 바탕으로 PDF 생성
			pdf_maker(data);
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	private static void pdf_maker(List<ExcelVO> data) {
		// 헤더에 들어갈 값.
		String[] headers = new String[]{"제목", "저자", "출판사", "이미지"};
		
		Document doc = new Document(PageSize.A4);
		try {
			PdfWriter.getInstance(doc, new FileOutputStream(new File("bookList.pdf")));
			doc.open();
			
			// 폰트 설정.
			BaseFont bFont = BaseFont.createFont(
					"MALGUN.TTF", 
					BaseFont.IDENTITY_H	
					, BaseFont.NOT_EMBEDDED);
			Font headerFont = new Font(bFont, 12);	// 헤더 폰트
			Font rowFont = new Font(bFont, 10);	// row 폰트
			
			// 테이블 생성
			PdfPTable table = new PdfPTable(headers.length);
			
			for (String header : headers) {
				// 테이블_셀 생성
				PdfPCell cell = new PdfPCell();
				cell.setGrayFill(0.9f);
				cell.setPhrase(new Phrase(header.toUpperCase(), headerFont));
				table.addCell(cell);
			}	
			table.completeRow();	
			
			// Excel데이터 바탕, PDF에 들어갈 테이블에 정보 입력.
			for (ExcelVO vo : data) {
				Phrase phrase = new Phrase(vo.getTitle(), rowFont);
				table.addCell(new PdfPCell(phrase));
				
				phrase = new Phrase(vo.getAuthor(), rowFont);
				table.addCell(new PdfPCell(phrase));
				
				phrase = new Phrase(vo.getCompany(), rowFont);
				table.addCell(new PdfPCell(phrase));
				
				// 이미지
				Image image = Image.getInstance(vo.getImageUrl());
				table.addCell(image);
				
				table.completeRow();
			}
			doc.addTitle("PDF Table Demo");
			doc.add(table);	// document 에 생성한 테이블 추가.
			System.out.println("bookList 생성 완료.");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			doc.close();
		}		
	}
}
반응형
반응형

# Java iText API 활용 PDF 에 image 삽입 및 크기조절 하기

  • Java iText API 활용하여 PDF에 image 를 삽입 및 이미지의 크기를 조절할 수 있다.

## 활용 방법

파일에서 이미지 생성

import java.io.*;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

public class Project04_C {
	public static void main(String[] args) {
		Document doc = new Document();

		try {
			PdfWriter.getInstance(doc, new FileOutputStream("ImageDemo.pdf"));
			doc.open();
			
			// 파일에서 이미지 생성
			String filename = "test_image.jpg";
			Image image = Image.getInstance(filename);
			doc.add(image);
            
			System.out.println("PDF 생성 완료.");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			doc.close();
		}
	}
}

URL에서 이미지 생성

import java.io.*;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

public class Project04_C {
	public static void main(String[] args) {
		Document doc = new Document();

		try {
			PdfWriter.getInstance(doc, new FileOutputStream("ImageDemo.pdf"));
			doc.open();
	
			// URL로 부터 이미지 생성
			String url = "https://cdn.inflearn.com/public/main_sliders/90eee9de-869d-4906-aa7a-88998858dc6d/%5B%E1%84%8B%E1%85%B5%E1%84%87%E1%85%A6%E1%86%AB%E1%84%90%E1%85%B3%5D%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%91%E1%85%B3%E1%84%8F%E1%85%A9%E1%86%AB_main_521.png";
			Image urlImage = Image.getInstance(url);
			doc.add(urlImage);

			System.out.println("PDF 생성 완료.");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			doc.close();
		}
	}
}

## 생성 결과

  • 아래와 같이 파일, URL 을 이용 이미지를 추가하여 PDF 생성. (이미지 크기 때문에 2페이지에 걸쳐서 출력)

## 작업 소스

import java.io.*;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

public class Project04_C {
	public static void main(String[] args) {
		Document doc = new Document();

		try {
			PdfWriter.getInstance(doc, new FileOutputStream("ImageDemo.pdf"));
			doc.open();
			
			// 파일에서 이미지 생성
			String filename = "test_image.jpg";
			Image image = Image.getInstance(filename);
			doc.add(image);
			
			// URL로 부터 이미지 생성
			String url = "https://cdn.inflearn.com/public/main_sliders/90eee9de-869d-4906-aa7a-88998858dc6d/%5B%E1%84%8B%E1%85%B5%E1%84%87%E1%85%A6%E1%86%AB%E1%84%90%E1%85%B3%5D%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%91%E1%85%B3%E1%84%8F%E1%85%A9%E1%86%AB_main_521.png";
			Image urlImage = Image.getInstance(url);
			doc.add(urlImage);

			System.out.println("PDF 생성 완료.");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			doc.close();
		}
	}
}

 

# Java iText API 활용 PDF 에  삽입한 image 크기조절 하기

  • 위에서 이미지를 추가하여 PDF 생성 시 크기 조절 문제 발생. 이를 해결하기 위해 추가 작업 진행.
  • scaleAbsolute, scalePercent, scaleToFit

## 활용방법

이미지 크기조절 방법 1_scaleAbsolute

Document doc = new Document();

try {
    PdfWriter.getInstance(doc, new FileOutputStream("ImageDemo.pdf"));
    doc.open();

    // 파일에서 이미지 생성
    String filename = "test_image.jpg";
    Image image = Image.getInstance(filename);
    image.scaleAbsolute(200f, 200f);	// 이미지 크기 조절
    doc.add(image);

    System.out.println("PDF 생성 완료.");
} catch (Exception e) {
    e.printStackTrace();
} finally {
    doc.close();
}

이미지 크기조절 방법 2_scalePercent

Document doc = new Document();

try {
    PdfWriter.getInstance(doc, new FileOutputStream("ImageDemo.pdf"));
    doc.open();

    // URL로 부터 이미지 생성
    String url = "https://cdn.inflearn.com/public/main_sliders/90eee9de-869d-4906-aa7a-88998858dc6d/%5B%E1%84%8B%E1%85%B5%E1%84%87%E1%85%A6%E1%86%AB%E1%84%90%E1%85%B3%5D%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%91%E1%85%B3%E1%84%8F%E1%85%A9%E1%86%AB_main_521.png";
    Image urlImage = Image.getInstance(url);
    urlImage.scalePercent(200f);	// 이미지 크기 조절 (%)
    doc.add(urlImage);

    System.out.println("PDF 생성 완료.");
} catch (Exception e) {
    e.printStackTrace();
} finally {
    doc.close();
}

이미지 크기조절 방법 3_scaleToFit

Document doc = new Document();

try {
    PdfWriter.getInstance(doc, new FileOutputStream("ImageDemo.pdf"));
    doc.open();

    // 파일에서 이미지 생성
    String filename = "test_image.jpg";
    Image image = Image.getInstance(filename);
    image.scaleToFit(100f, 200f);	// 이미지 크기 조절 (정한 사이즈에 맞게)
    doc.add(image);

    System.out.println("PDF 생성 완료.");
} catch (Exception e) {
    e.printStackTrace();
} finally {
    doc.close();
}

## 실행 결과

## 작업 소스

import java.io.*;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

public class Project04_D {
	public static void main(String[] args) {
		Document doc = new Document();

		try {
			PdfWriter.getInstance(doc, new FileOutputStream("ImageScalingDemo.pdf"));
			doc.open();
			
			// 1. scaleAbsolute 사용 이미지 크기 조절
			String filename1 = "test_image.jpg";
			Image image1 = Image.getInstance(filename1);
			image1.scaleAbsolute(200f, 200f);
			doc.add(image1);
			
			// 2. scalePercent 사용 이미지 크기 조절
			String filename2 = "test_image.jpg";
			Image image2 = Image.getInstance(filename2);
			image2.scalePercent(100f);
			doc.add(image2);
			
			// 3. scaleAbsolute 사용 이미지 크기 조절
			String filename3 = "test_image.jpg";
			Image image3 = Image.getInstance(filename3);
			image3.scaleToFit(100f, 200f);
			doc.add(image3);

			System.out.println("PDF 생성 완료. (이미지 크기 조절)");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			doc.close();
		}
	}
}
반응형
반응형

# Java iText API 활용 PDF 에 Paragraph (단락, 문단, 절) 만들기

  • Java iText API 활용하여 PDF에 단락, 문단, 절 등을 입력하여 생성할 수 있다.

## 활용 방법

Paragraph (단락, 문단, 절) 만들기

Paragraph paragraph = new Paragraph();

Chunk (부분, 규모가 큰) 만들기

String content = "hello world hello world hello world hello world hello world";

Chunk chunk = new Chunk(content);

Paragraph 줄 간격

String content = "hello world hello world hello world hello world hello world";
Paragraph paragraph1 = new Paragraph(32);
paragraph1.setSpacingBefore(50);
paragraph1.setSpacingAfter(50);

for (int i = 0; i < 20; i++) {
	Chunk chunk = new Chunk(content);
	paragraph1.add(chunk);
}

doc.add(paragraph1);

Paragraph paragraph2 = new Paragraph(32);	// 줄 간격
paragraph2.setSpacingBefore(50);		// 문단 앞 간격
paragraph2.setSpacingAfter(50);			// 문단 뒤 간격

for (int i = 0; i < 10; i++) {
	paragraph2.add(new Chunk(content));
}

doc.add(paragraph2);

## 생성 결과

## 작업 소스

import java.io.*;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

public class Project04_B {
	public static void main(String[] args) {
		Document doc = new Document();
		
		try {
			FileOutputStream fos = new FileOutputStream("paragraphDemo.pdf");
			PdfWriter.getInstance(doc, fos);
			doc.open();
			
			String content = "Hello World Hello World Hello World Hello World Hello World Hello World";
			Paragraph par1 = new Paragraph(32);	// 줄 간격 32
			par1.setSpacingBefore(50);
			par1.setSpacingAfter(50);
			
			for (int i = 0; i < 20; i++) {
				Chunk chunk = new Chunk(content);
				par1.add(chunk);
			}
			
			doc.add(par1);
			
			Paragraph par2 = new Paragraph();
			
			for (int i = 0; i < 10; i++) {
				//Chunk chunk = new Chunk(content);
				//par2.add(chunk); 
				par2.add(new Chunk(content));
			}
			doc.add(par2);
			doc.close();
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}
반응형

+ Recent posts