質問編集履歴

1

2021/09/12 05:33

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,195 +1,7 @@
1
1
  ### 前提・実現したいこと
2
-
3
- spring bootを用いてWEBページを作成しています。
4
-
5
- サーバ側(JAVA)でPDFをダウンロードして新規タブでプレビューを表示させたいです。
6
-
7
- どなたかご教授いただけますでしょうか。
8
-
9
- よろしくお願いいたします。
10
-
11
- 以下動作の大まかな流れです。
12
-
13
-
14
-
15
- 表示画面の内容をサーバ側に送信(jQueryのajax使用)
16
-
17
-
18
-
19
- jasperReportsを用いてPDF作成
20
-
21
-
22
-
23
- ローカル(Cドライブ直下のファイルに一時保存)
24
-
25
-
26
-
27
- jsファイルからwindow.openでサーバにアクセスして一時保存したPDFファイルをローカルの「ダウンロード」に保存
28
-
29
-
30
-
31
- ブラウザ(chrome)の新規タブでプレビュー表示
32
-
33
- ### 発生している問題・エラーメッセージ
34
-
35
-
36
-
37
- ```
38
-
39
- ダウンロードまではできるが、プレビューが表示されない。
40
-
41
- ```
42
-
43
-
44
-
45
- ### 該当のソースコード
46
-
47
- コントローラークラス
48
-
49
- ```java
50
-
51
-
52
-
53
-  /**
54
-
55
- * PDF作成 表示URL取得outPut
56
-
57
- * @param 省略
58
-
59
- * @return 表示画面のView
60
-
61
- */
62
-
63
- @RequestMapping("/print")
64
-
65
- @ResponseBody
66
-
67
- public Map<String, Object> print(@ModelAttribute("form") Bean bean, BindingResult result) {
68
-
69
- Map<String, Object> map = new HashMap<>();
70
-
71
- //パス取得
72
-
73
-  map.put("fname",Service.print(bean,USER_DATA.getHOST_NAME(),USER_DATA.getEMPCD(),USER_DATA.getEMPNM(),USER_DATA.getFNM()));
74
-
75
- return map;
76
-
77
- }
78
-
79
-
80
-
81
- /**
82
-
83
- * PDF表示
84
-
85
- * @param 省略
86
-
87
- * @return 表示画面のView
88
-
89
- */
90
-
91
- @ResponseBody
92
-
93
- @GetMapping("/output/{fname}")
94
-
95
- public ResponseEntity<InputStreamResource> output(@PathVariable String fname) {
96
-
97
- ResponseEntity<InputStreamResource> ret = null;
98
-
99
- ret=Service.output(fname);
100
-
101
- return null;
102
-
103
- }
104
-
105
- ```
106
-
107
- サービスクラス
108
-
109
- ```java
110
-
111
- public String print(Bean bean,int cid,int oid,String empnm,String fnm) throws Exception{
112
-
113
- return Manager.createRreports(bean,cid,oid,empnm,fnm);
114
-
115
- }
116
-
117
-
118
-
119
- public ResponseEntity<InputStreamResource> output(String fname){
120
-
121
- return downloadPdf(genFullPath("Cドライブ直下のディレクトリ名",fname + ".pdf"));
122
-
123
- }
124
-
125
-
126
-
127
- public static String genFullPath(String fpath, String fname) {
128
-
129
- return (fpath.endsWith(File.separator) ? fpath : fpath + File.separator) + fname;
130
-
131
- }
132
-
133
- public ResponseEntity<InputStreamResource> downloadPdf(String filePath) {
134
-
135
- return downloadFile(filePath, "application/pdf");
136
-
137
- }
138
-
139
-
140
-
141
- public ResponseEntity<InputStreamResource> downloadFile(String filePath, String mimeType) {
142
-
143
- File targFile = new File(filePath);
144
-
145
- MediaType mediaType;
146
-
147
- try {
148
-
149
- mediaType = MediaType.parseMediaType(mimeType);
150
-
151
- } catch (Exception var8) {
152
-
153
- mediaType = MediaType.APPLICATION_OCTET_STREAM;
154
-
155
- }
156
-
157
-
158
-
159
- try {
160
-
161
- InputStreamResource resource = new InputStreamResource(new FileInputStream(targFile));
162
-
163
- return ((BodyBuilder)ResponseEntity.ok().header("Content-Disposition", new String[]{targFile.getName()})).contentType(mediaType).contentLength(targFile.length()).body(resource);
164
-
165
- } catch (FileNotFoundException var7) {
166
-
167
- LogUtil.error(var7);
168
-
169
- return null;
170
-
171
- }
172
-
173
- }
174
-
175
- ```
176
-
177
- jsファイル
178
-
179
- ```jQuery
180
-
181
- //新規タブでPDF表示
182
-
183
- window.open('/purojectName/output/' + data.fname,'_blank');
184
-
185
- ```
186
2
 
187
3
 
188
4
 
189
5
 
190
6
 
191
7
  ### 補足情報(FW/ツールのバージョンなど)
192
-
193
- クライアント側でファイルを開くことはしたくないです。
194
-
195
- (セキュリティ上の問題)