Angular + Spring Boot + JasperSoft: 无法加载PDF文档
创始人
2024-10-14 13:01:59
0

问题描述:在使用Angular + Spring Boot + JasperSoft生成PDF文档时,无法加载PDF文档。

解决方法:

  1. 确保JasperSoft服务器正常运行,并且可以访问到生成的PDF文档。可以通过直接访问JasperSoft服务器上的URL来验证。

  2. 在Angular项目中,确保已正确配置JasperSoft服务器的URL。可以在Angular项目的环境配置文件中设置JasperSoft服务器的URL,例如在environment.ts文件中添加如下配置:

export const environment = {
  production: false,
  jasperSoftUrl: 'http://localhost:8080/jasperserver'
};

在需要加载PDF文档的组件中,可以通过使用HttpClient在Angular中访问JasperSoft服务器的URL。示例如下:

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { environment } from 'src/environments/environment';

@Component({
  selector: 'app-pdf-viewer',
  templateUrl: './pdf-viewer.component.html',
  styleUrls: ['./pdf-viewer.component.css']
})
export class PdfViewerComponent implements OnInit {
  pdfUrl: string;

  constructor(private http: HttpClient) { }

  ngOnInit() {
    this.loadPdf();
  }

  loadPdf() {
    const reportPath = '/reports/myreport.pdf';
    this.pdfUrl = `${environment.jasperSoftUrl}${reportPath}`;

    // 通过HttpClient获取PDF文档
    this.http.get(this.pdfUrl, { responseType: 'blob' })
      .subscribe(response => {
        this.createPdfObjectUrl(response);
      });
  }

  createPdfObjectUrl(blob: Blob) {
    const fileURL = URL.createObjectURL(blob);
    const iframe = document.getElementById('pdf-iframe') as HTMLIFrameElement;
    iframe.src = fileURL;
  }
}

在上述代码中,pdfUrl变量定义了PDF文档的URL,通过HttpClient发送GET请求获取PDF文档的二进制数据,并使用createPdfObjectUrl方法将二进制数据转换为可供