java ZIPファイル作成,PDFファイル作成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java ZIPファイル作成,PDFファイル作成相关的知识,希望对你有一定的参考价值。
package com.somei.student_management_system.login.bean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Component
public class CreateZip {
@Autowired
MakePdf makePdf;
/**
* クラス名のリスト、ZIPファイル名を受け取りPDFを格納したZIPファイルを返す
*
* @param classList クラス名が格納されたリスト
* @param zipFilename 返すZIPファイルの名前
* @return deleteList 削除用のリスト
*/
public List<String> createZip(List<String> classList, String zipFilename) {
// PDFファイル名
String pdfName = null;
// 削除用のPDFファイルの名前リスト
List<String> deleteList = new ArrayList<>();
// ZIPファイルを作成
FileOutputStream fos = null;
ZipOutputStream zos = null;
try {
// アーカイブファイルを用意する。
byte[] buffer = new byte[1024];
fos = new FileOutputStream(zipFilename);
zos = new ZipOutputStream(fos);
//PDFファイルを作成し、ZIPファイルに入れていく
for (int i = 0; i < classList.size(); i++) {
pdfName = makePdf.makePdf(classList.get(i));
// 削除用のリストに追加
deleteList.add(pdfName);
FileInputStream fin = new FileInputStream(pdfName);
// エントリーを追加
zos.putNextEntry(new ZipEntry(pdfName));
int length;
while ((length = fin.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
// アーカイブに含めるファイルの中身
byte[] data = pdfName.getBytes(StandardCharsets.UTF_8);
zos.write(data);
zos.closeEntry();
fin.close();
}
} catch (
IOException e) {
e.printStackTrace();
} finally {
if (zos != null) {
try {
zos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
return deleteList;
}
}
package com.somei.student_management_system.login.bean;
import com.somei.student_management_system.login.domain.model.NameList;
import com.somei.student_management_system.login.domain.service.StudentService;
import lombok.val;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class MakePdf {
@Autowired
StudentService studentService;
/**
* PDF作成(プロジェクト直下に保存)
*
* @param homeRoom
* @return
*/
public String makePdf(String homeRoom) {
// ファイル名作成用に日付を取得
LocalDate data = LocalDate.now();
// ファイル名を決める
String filename = DateTimeFormatter.ofPattern("yyyyMMdd").format(data) + homeRoom + ".pdf";
// 引数で渡されたクラスのリストを取得
List<NameList> list = studentService.selectManyByHomeRoom(homeRoom);
// jrxmlファイルのパラメータ指定用
Map<String, Object> map = new HashMap<>();
map.put("classRoom", homeRoom);
// jasperreport用のリストのデータソースを作成
JRDataSource dataSource = new JRBeanCollectionDataSource(list);
// 帳票レイアウト
val report = loadReport();
try {
if (report != null) {
// データソースとパラメータをコンパイルされた帳票に設定
/** 日本語が表示されない場合は Jaspersoft Studio上で
* 日本語が出ないオブジェクトのフォントが
*「IPAex」以外になっていないかチェック */
JasperPrint pdf = JasperFillManager.fillReport(report, map, dataSource);
// 出力用のパス・ファイル名を指定する
//以下の場合はプロジェクトフォルダの直下にPDFが作成される
File path = new File(filename);
// 帳票の出力
JasperExportManager.exportReportToPdfFile(pdf, path.getAbsolutePath());
} else {
System.out.println("jrxmlファイルが見つかりませんでした。");
}
} catch (JRException e) {
e.printStackTrace();
return null;
}
// ファイル名を返す
return filename;
}
/**
* 帳票レイアウトを読み込む
*
* @return
*/
protected final JasperReport loadReport() {
val resource = new ClassPathResource("jasperreport/name_list.jrxml");
try {
val fileName = resource.getFilename();
if (fileName.endsWith(".jasper")) {
try (val is = resource.getInputStream()) {
return (JasperReport) JRLoader.loadObject(is);
}
} else if (fileName.endsWith(".jrxml")) {
try (val is = resource.getInputStream()) {
JasperDesign design = JRXmlLoader.load(is);
return JasperCompileManager.compileReport(design);
}
} else {
throw new IllegalArgumentException(
".jasper または .jrxml の帳票を指定してください。 [" + fileName + "] must end in either ");
}
} catch (IOException e) {
throw new IllegalArgumentException("failed to load report. " + resource, e);
} catch (JRException e) {
throw new IllegalArgumentException("failed to parse report. " + resource, e);
}
}
}
以上是关于java ZIPファイル作成,PDFファイル作成的主要内容,如果未能解决你的问题,请参考以下文章
java Overwride.javaで作成したテキストファイルの中身をコマンドライン上に表示する。