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

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

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

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

PDF

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

Q&A

解決済

2回答

2780閲覧

[PDFBox] 複数の画像を一つのpdfにまとめて生成する方法が知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

PDF

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

0グッド

0クリップ

投稿2021/08/30 01:20

編集2021/08/30 04:06

質問内容 「複数の画像ファイルを一つのpdfファイルにまとめて出力したい。」
これをやりたいのですが。提示画像のコメント部内部のコードなのですが画像ファイルを読み込んでそれをpageに入れて最後にそれぞれの空のページに画像を焼き付けて一つのpdfファイルに保存するという動作をしたいのですがどうすればいいかわかりません。

参考サイト: https://weblabo.oscasierra.net/java-pdfbox-3/
参考サイト: https://pdfbox.apache.org/docs/2.0.8/javadocs/
参考サイト: https://gist.github.com/uchicom/bc068b304b5b47b39a8048bc603160ac
参考サイト: https://pdfbox.apache.org/

java

1package sample; 2 3import java.io.IOException; 4import java.io.File; 5import javax.imageio.ImageIO; 6import java.awt.image.BufferedImage; 7 8import java.util.ArrayList; 9import java.util.Scanner; 10import java.util.List; 11 12 13import org.apache.pdfbox.pdmodel.PDDocument; 14import org.apache.pdfbox.pdmodel.PDPage; 15import org.apache.pdfbox.pdmodel.PDPageContentStream; 16import org.apache.pdfbox.pdmodel.common.PDRectangle; 17import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; 18 19 20public class Main 21{ 22 //画像クラス 23 static class Image 24 { 25 //コンストラクタ 26 public Image(int w,int h,String n) 27 { 28 width = w; 29 height = h; 30 path = n; 31 } 32 33 34 public int width; //横 35 public int height; //縦 36 public String path; //パス 37 } 38 39 //ファイルの画像パスを取得 40 static public void GetDirectory(File dir,List<Image> list) 41 { 42 for(int i = 0; i < dir.listFiles().length; i++) 43 { 44 45 try 46 { 47 BufferedImage b = ImageIO.read(dir.listFiles()[i]); 48 Image img = new Image(b.getWidth(),b.getHeight(),dir.listFiles()[i].getPath()); 49 50 list.add(img); 51 52 b = null; 53 } 54 catch (IOException e) 55 { 56 e.printStackTrace(); 57 } 58 59 60 System.out.println("###################################"); 61 System.out.println("Width: " + list.get(list.size() -1).width); 62 System.out.println("Height: " + list.get(list.size() -1).height); 63 System.out.println("Path: " + list.get(list.size() -1).path); 64 System.out.println("###################################\n"); 65 } 66 } 67 68 //PDFファイルを生成 69 static void GeneratePDF(List<Image> list,List<String> pathList) 70 { 71 try 72 { 73 PDDocument document = new PDDocument(); //ドキュメント 74 List<PDPage> page = new ArrayList<>(); //ページ 75 76 for(Image image : list) 77 { 78 79 80 PDRectangle rec = new PDRectangle(); 81 rec.setUpperRightX(0); 82 rec.setUpperRightY(0); 83 rec.setLowerLeftX(image.width); 84 rec.setLowerLeftY(image.height); 85 86 page.add(new PDPage(rec)); 87 document.addPage(page.get(page.size() -1)); 88 } 89 90 91 //////////////////////////////////////////////////////////////////////////////////////////// 92 for(int i = 0; i < list.size(); i++) 93 { 94 95 PDImageXObject xImage = PDImageXObject(document); 96 PDPageContentStream stream = new PDPageContentStream(document,page.get(i)); 97 stream.drawImage(xImage, 0,0); 98 99 100 stream.close(); 101 } 102 //////////////////////////////////////////////////////////////////////////////////////////// 103 104 105 106 107 document.save("test.pdf"); 108 109 document.close(); 110 111 112 113 114 115 116 }catch(IOException e) 117 { 118 e.printStackTrace(); 119 } 120 } 121 122 123 124 private static PDImageXObject PDImageXObject(PDDocument document) { 125 // TODO Auto-generated method stub 126 return null; 127 } 128 129public static void main(String args[]) 130 { 131 Scanner scanner = new Scanner(System.in); 132 List<Image> imageList = new ArrayList<>(); 133 134 File f = new File(scanner.next()); 135 136 GetDirectory(f,imageList); //画像パス読み込み 137 138 139 List<String> fileList = new ArrayList<>(); 140 GeneratePDF(imageList,fileList); //PDFファイルを生成 141 142 143 144 145 scanner.close(); 146 } 147} 148

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

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

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

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

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

guest

回答2

0

『参考サイトでは二つのpdfファイルを一つのpdfにまとめている』とはどういう意味なのでしょう?

https://gist.github.com/uchicom/bc068b304b5b47b39a8048bc603160ac
この二つめの参考サイトでは、どこがどう問題なのか説明を追加していただけるでしょうか。

これを見てやれば、「複数の画像ファイルを一つのpdfファイルにまとめて出力したい。」は達成できそうに見えるのですけれど…

☆☆ このままだとアレなので追記 ☆☆

ページを追加(1ページ目)

のところから

ストリームを閉じる

までを2回繰り返せば、2つのページに同じ画像が貼り付けられたPDFが生成されるはずです。

別に画像にするにはどうすれば良いか。
それは簡単ですよね。createFromFileで渡す画像ファイル名を変えれば良い。

同じページに貼り付けるにはどうすれば良いか。
これも簡単なことです。『ページの追加』をせずに、同じページに貼り付ければ良い。

投稿2021/08/30 02:31

編集2021/08/30 02:45
ishina_yum

総合スコア509

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

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

ishina_yum

2021/08/30 02:34

あああああ! ごめんなさい、書く場所間違えました! この回答は『追記・修正依頼』と思ってください…
退会済みユーザー

退会済みユーザー

2021/08/30 02:34

質問ですがひとつづつpdfを生成してそれを連結するという方法しかないのでしょうか?
ishina_yum

2021/08/30 03:10

同じpdfの中に、何回も画像を描画すれば良いだけですけれど…… 何故、それが1回しかできないと思っているのでしょう?
退会済みユーザー

退会済みユーザー

2021/08/30 04:08

質問文を更新しました。質問ですが描画とはコードのどこの部分でしょうか?
guest

0

ベストアンサー

質問文の///のコードを以下のようにして解決しました。
生成した空のpdfページにひとつづつ画像を焼き付けるという動作で実現しました。

java

1 2 for(int i = 0; i < list.size(); i++) 3 { 4 5 PDImageXObject xImage = PDImageXObject.createFromFile(list.get(i).path,document); 6 PDPageContentStream stream = new PDPageContentStream(document,page.get(i)); 7 stream.drawImage(xImage, 0,0); 8 9 10 stream.close(); 11 } 12

投稿2021/08/30 04:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問