質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Q&A

解決済

1回答

6800閲覧

pdfBOXでテキスト出力の場所を変更したい

unity3dbigginer

総合スコア65

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

0グッド

0クリップ

投稿2020/05/31 04:42

初めに

現在、Javaを使ってpdfファイルを生成しようと試み、pdfBOXを使って作業しています。

ソースコード

Java

1import java.io.File; 2import java.io.IOException; 3import java.util.Calendar; 4 5import org.apache.fontbox.ttf.TrueTypeCollection; 6import org.apache.pdfbox.pdmodel.PDDocument; 7import org.apache.pdfbox.pdmodel.PDPage; 8import org.apache.pdfbox.pdmodel.PDPageContentStream; 9import org.apache.pdfbox.pdmodel.font.PDFont; 10import org.apache.pdfbox.pdmodel.font.PDType0Font; 11 12public class PdfTest { 13 @SuppressWarnings("resource") 14public static void main(String args[]) { 15 Calendar cal =Calendar.getInstance(); 16 17 18 19 try { 20 PDDocument document = new PDDocument(); 21 22 PDPage page = new PDPage(); 23 document.addPage(page); 24 25 File file = new File("C:/Windows/Fonts/msmincho.ttc"); 26 TrueTypeCollection collection = new TrueTypeCollection(file); 27 PDFont font = PDType0Font.load(document, collection.getFontByName("MS-Mincho"), true); 28 29 PDPageContentStream contentStream = new PDPageContentStream(document, page); 30 contentStream.beginText(); 31 contentStream.setFont(font, 12); 32 contentStream.newLineAtOffset(250,750); 33 contentStream.setLeading(12); 34 contentStream.showText( "サンプル" ); 35 contentStream.newLine(); 36 contentStream.showText(String.valueOf(cal.get(Calendar.YEAR))+"/"+String.valueOf(cal.get(Calendar.MONTH)+1)+"/"+String.valueOf(cal.get(Calendar.DATE))); 37 contentStream.endText(); 38 contentStream.close(); 39 40 document.save("helloworld.pdf"); 41 document.close(); 42 } 43 catch (IOException e) { 44 e.printStackTrace(); 45 } 46 } 47}

実行結果

イメージ説明

実現したいこと

現在、タイトルの「サンプル」の下に日付が来ていますが、
日付は右端に移動させたいです。

イメージ
(スペース)             サンプル
(スペース)                        2020/5/31

また、サンプルのテキストの位置を、
contentStream.newLineAtOffset()で出力位置を決めていますが、
画面の真ん中といった、HTMLでいうalign-centerのようなスタイルで記載したいです。

最後に

ご教授宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

画面の真ん中といった、HTMLでいうalign-centerのようなスタイルで記載したいです。

できません。PDFってそういうもんです。
文字描画位置は始点を自力で計算して出力する必要があります。
以下のような感じで実装します。

java

1 PDDocument document = new PDDocument(); 2 3 PDPage page = new PDPage(); 4 document.addPage(page); 5 6 File file = new File("C:/Windows/Fonts/msmincho.ttc"); 7 TrueTypeCollection collection = new TrueTypeCollection(file); 8 PDFont font = PDType0Font.load(document, collection.getFontByName("MS-Mincho"), true); 9 10 PDPageContentStream contentStream = new PDPageContentStream(document, page); 11 contentStream.beginText(); 12 contentStream.setFont(font, 12); 13 contentStream.newLineAtOffset(250, 750); 14 contentStream.setLeading(12); 15 contentStream.showText("サンプル"); 16 contentStream.endText(); 17//位置決めをしなおすには、いったんendTextして、またbeginTextしなおせばよい 18 contentStream.beginText(); 19//ページ幅の取得 20 float pagewidth = page.getMediaBox().getWidth(); 21 String text = String.valueOf(cal.get(Calendar.YEAR)) + "/" 22 + String.valueOf(cal.get(Calendar.MONTH) + 1) + "/" + String.valueOf(cal.get(Calendar.DATE)); 23//右寄せ時のテキストx座標計算。この方法だと右端ベタになるので適宜マージンを加える必要あり。 24 contentStream.newLineAtOffset(pagewidth - font.getStringWidth(text)/1000*12, 740); 25 contentStream.showText(text); 26 contentStream.endText(); 27 contentStream.close();

そんな苦労が簡単に書いてある参考資料

投稿2020/06/01 03:56

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unity3dbigginer

2020/06/01 13:30

ありがとうございます! 一度endtextして位置を変えるんですね! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問