[Java] PDFを出力する方法(itextpdf)
こんにちは。明月です。
この投稿はJavaでPDFを出力する方法(itextpdf)に関する説明です。
ウェブサービスで、特にポータルサービスならデータの結果を出力するところならPDF出力が多いです。最近はほとんどPDFの出力なら標準でなっているほど多いです。
PDFで出力したら修正もできないし、イメージよりドキュメント形式になっているフォーマットになっているのでです。
これをJava環境でPDFを作成して出力して使う方法に関して説明します。
Java環境で使うためにMavenレポジトリを通ってitextpdf」と「xmlworker」をしなければならないです。
repository - https://mvnrepository.com/artifact/com.itextpdf/itextpdf/5.5.13.1
repository - https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker/5.5.13.1
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker -->
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13.1</version>
</dependency>
簡単なPDFを出力するプログラムを作成しましょう。コンソールで実行するとPDFが生成するプログラムです。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.StringReader;
import java.net.URL;
import java.nio.charset.Charset;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorker;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.itextpdf.tool.xml.css.StyleAttrCSSResolver;
import com.itextpdf.tool.xml.html.CssAppliersImpl;
import com.itextpdf.tool.xml.html.Tags;
import com.itextpdf.tool.xml.parser.XMLParser;
import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
public class Main {
// 実行関数
public static void main(String[] args) {
// PDFを作成するHTML
String html = "<html>" +
"<head></head>" +
"<body>" +
"<div>Hello world</div>" +
"<div>明月です。</div>" +
"</body>" +
"</html>";
// ファイルIOを取得する。
// 出力パスは"d:\\work\\test.pdf"
try (FileOutputStream os = new FileOutputStream("d:\\work\\test.pdf")) {
// Pdfタイプのdocumentを生成する。
Document document = new Document(PageSize.A4, 10, 10, 10, 10);
// PdfWriterを取得する。
PdfWriter writer = PdfWriter.getInstance(document, os);
// documentオブジェクトをopenする。
document.open();
// css設定するインスタンス
StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver();
// Cssファイルを設定する。(css1.cssファイルをインポートする。)
try (FileInputStream cssStream = new FileInputStream("d:\\work\\css1.css")) {
cssResolver.addCss(XMLWorkerHelper.getCSS(cssStream));
}
// Cssファイルを設定する。(css2.cssファイルをインポートする。)
try (FileInputStream cssStream = new FileInputStream("d:\\work\\css2.css")) {
cssResolver.addCss(XMLWorkerHelper.getCSS(cssStream));
}
// フォント設定
XMLWorkerFontProvider font = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
// windowのフォントを読み込む。
font.register("c:/windows/fonts/malgun.ttf", "MalgunGothic");
// フォントインスタンスを生成する。
CssAppliersImpl cssAppliers = new CssAppliersImpl(font);
// htmlContext pipeline生成(フォントインスタンスを設定)
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// PDFのpipelineを生成
PdfWriterPipeline pdfPipeline = new PdfWriterPipeline(document, writer);
// Htmlのpipelineを生成する。(htmlタグ、pdfのpipeline設定)
HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdfPipeline);
// cssのpipelineをマージする。
CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline);
// Work生成、pipeline設定
XMLWorker worker = new XMLWorker(cssResolverPipeline, true);
// Xmlパーサ生成(HtmlをPDFに 変換)
XMLParser xmlParser = new XMLParser(true, worker, Charset.forName("UTF-8"));
// 出力する。
try (StringReader strReader = new StringReader(html)) {
xmlParser.parse(strReader);
}
// ドキュメントのリソース返却
document.close();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
ソースでCSSファイルを二つ読み込みます。
body {
/*フォント設定*/
font-family: MalgunGothic;
}
div {
/* div要素の背景色は赤 */
background-color: red;
/* フォント色は青 */
color: blue;
}
上のCSSファイルを下記のディレクトリに設定します。
設定は完了しました。
プログラムを実行して結果を確認しましょう。
ここまでJavaでPDFを出力する方法(itextpdf)に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
「Devlopment note / Java」の他投稿
- [Java] Jsoupを利用してXMLファイル(HTML)を扱う方法2020/05/19 19:32:21
- [Java] 日付フォーマット(SimpleDateFormat)を使う方法2020/03/25 00:36:53
- [Java] サーブレット(Servlet)の環境でファイルアップロード(プログレスバーでファイルアップロード状態を表示する方法)する方法2020/03/24 00:48:21
- [Java] Spring環境でファイルアップロード(プログレスバーでファイルアップロード状態を表示する方法)する方法2020/03/22 23:15:12
- [Java] FTPに接続してファイルをダウンロード、アップロードする方法(FTPClient)2020/03/20 02:44:36
- [Java] JSPのSpring環境でschedulerのcronを使う方法2020/03/18 00:24:32
- [Java] POIを利用してExcelを扱う方法2020/03/17 01:48:00
- [Java] PDFを出力する方法(itextpdf)2020/03/13 00:47:31
- [Java] ログライブラリ(log4j)を使う方法2020/03/12 00:54:39
- [Java] Jsonタイプのデータを使う方法(Gsonライブラリ)2020/03/11 00:30:15
- [Java] Base64をエンコード、デコードする方法2020/03/09 10:24:01
- [Java] cmdコマンドを実行するための方法2020/03/06 18:01:10
- [Java] メール(javax.mail)を発送する方法2020/03/05 20:07:49
- [Java] クラス複製(Clonable, Reflection)2020/03/05 00:03:19
- [Java] シリアライズ(直列化: Serializable)2020/03/03 00:03:33
最新投稿
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07