2021年4月8日木曜日

決定した環境でPDFBoxが正常に動くか検証

JavaプログラムからPDFを出力するライブライはいくつかありますが、今回は無償で商用利用可能なライセンスとなっているApache PDFBox(検証時最新は3.0)を検証します。

なおPDFBoxはApache Commons-Logging1.2を必要としますので、こちらも併せてダウンロードします。

今回のタスク

  • Apache PDFBoxのライブラリをダウンロード
  • Apache Commons-Loggingライブラリをダウンロード
  • Java ServletからPDFをブラウザに返却するServletクラスを作成して検証
  • PDFに出力する文字には、フォントMS明朝、MSゴシックを使ってみる
  • servletを実行するOSはWindowsとする
それでは始めましょう

まずはApache PDFBoxのライブラリをダウンロードします

 https://pdfbox.apache.org/へアクセスします

Dowunloadをクリックします

下のほうへスクロールします

pdfbox-app-3.0.0-RC1.jarをクリックします

Apacheのサイトにリダイレクトされるので、ここでHTTPS://downloads.apache.org/をクリックします

下のほうへスクロールしていきます

pdfboxがありました。ここをクリックします

バージョンごとにまとめられています。ここで3.0.0-RC1のフォルダをクリックします

ライブラリにたどり着きました。最低限ひつような「fontbox-xxx.jar」と「pdfbox-xxx.jar」をダウンロードします。

続けて、commons-loggingのダウンロードです https://commons.apache.org/proper/commons-logging/download_logging.cgi

下へスクロールします

Binariesの中、commons-logging-1.2-bin.zipをダウンロードします

zipを解凍し、commons-logging-1.2.jarを取り出します。
最終的に、上記に示す3つのjarを使用しますので、これをビルドパスに通してください。

Java Servletを作成します(完成形は下記)
package sample01;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.fontbox.ttf.TrueTypeCollection;
import org.apache.fontbox.ttf.TrueTypeFont;
import org.apache.pdfbox.pdmodel.PDDocument;
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;

@WebServlet("/S02")
public class Servlet02 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("application/pdf");
		response.setHeader("Cache-Control","pdfs");
		response.setHeader("Pragma","pdfs");
		try(OutputStream out = response.getOutputStream()){
			createPdf(out);
		}

	}

	protected void createPdf(OutputStream out) throws IOException{
		// 空のドキュメントオブジェクトを作成します
		try(PDDocument document = new PDDocument()) {
			// 新しいページのオブジェクトを作成します
			PDRectangle rectangle = PDRectangle.A4;
			PDPage page = new PDPage(rectangle);
			document.addPage(page);
			try (TrueTypeCollection ttcG = new TrueTypeCollection(new File("C:/Windows/Fonts/msgothic.ttc"));
				 TrueTypeCollection ttcM = new TrueTypeCollection(new File("C:/Windows/Fonts/msmincho.ttc"))) {

	            TrueTypeFont ttfG = ttcG.getFontByName("MS-Gothic");
	            PDFont fontG = PDType0Font.load(document, ttfG, true);
	            TrueTypeFont ttfM = ttcM.getFontByName("MS-Mincho");
	            PDFont fontM = PDType0Font.load(document, ttfM, true);

	            try(PDPageContentStream contentStream = new PDPageContentStream(document, page)){
	            	//文字出力
	            	contentStream.beginText();
					contentStream.setFont(fontG, 14);
					contentStream.newLineAtOffset(10, rectangle.getHeight() - 40);
					contentStream.showText( "この文字はフォント MSゴシックです" );
					contentStream.endText();
	            	//文字出力
					contentStream.beginText();
					contentStream.setFont(fontM, 14);
					contentStream.newLineAtOffset(10, rectangle.getHeight() - 70);
					contentStream.showText( "この文字はフォント MS明朝です" );
					contentStream.endText();
	            }
				// ドキュメントを保存します
				document.save(out);
			}
		}
	}
}

ブラウザから、http://localhost:8080/sample01/S02 へアクセスします
上手く、PDFが表示できました。
PDFBoxは無償で利用できますが、GUIでフォーマットを作成したりといったものはありませんので、座標を計算してコーディングするといったひと手間が必要です。



0 件のコメント:

コメントを投稿

適格請求書等保存方式(インボイス制度)と消費税の端数処理

消費税の税額計算は 売上税額-仕入れ税額=納税額 2023年10月以降、この納税額の計算の元になる請求書は適格請求書(インボイス)の保存が必要となる。 2019年10月から消費税が10%に引き上げられる際に、日用品等は8%に据え置かれ複数税率を扱う事業者が発生する。 この軽減税率...