2015-05-05 13 views
8

Tôi mới sử dụng js góc cạnh và tôi muốn mở tài liệu PDF trong cửa sổ mới của trình duyệt sau khi nhấn nút.Mở một PDF trong cửa sổ mới của trình duyệt với angularjs

Tôi thực hiện yêu cầu GET với $http.get() ở giao diện người dùng, tại chương trình phụ trợ có dịch vụ còn lại của Java phản hồi GET và tạo tệp PDF. Tôi muốn mở tệp PDF này trên trình duyệt.

Nếu không thể mở tệp PDF theo cách này thì ít nhất hãy mở mọi tệp PDF bằng AngularJs, làm cách nào tôi có thể thực hiện việc này?

@GET 
@Path("/printPdf") 
public Response printService(){ 

//generates the pdf 

File reportFile = new File(filePath); 
String name = reportName + "." + "pdf"; 
ResponseBuilder response = Response.ok(new  TemporaryFileInputStream(reportFile)); 
response.header("Content-Disposition", "attachment; filename=" + name); 
response.header("Content-Type", "application/pdf"); 
response.header("Access-Control-Expose-Headers", "x-filename"); 
response.header("x-filename", name); 

return response.build(); 
} 

đây là những gì có ở phụ trợ để tạo phản hồi trong dịch vụ còn lại.

+0

Cùng cách bạn làm với bất kỳ pdf ... Đây không phải là góc cụ thể. Bạn đang gặp phải vấn đề gì? – charlietfl

+0

Tôi có thể làm như thế nào? – DarkAngeL

+0

gửi url trở lại và mở url đó – charlietfl

Trả lời

13

Nếu bạn có một cái gì đó như thế này:

var myPdfUrl = 'something' 
$http.get(myPdfUrl); 

Làm điều này thay vì:

var myPdfUrl = 'something' 
$window.open(myPdfUrl); 

Nếu thay vào đó bạn có một cái gì đó như thế này:

$http 
    .get(generatePdfUrl) 
    .then(function(data){ 
     //data is link to pdf 
    });  

Làm điều này:

$http 
    .get(generatePdfUrl) 
    .then(function(data){ 
     //data is link to pdf 
     $window.open(data); 
    });   
+1

Tôi đã thử giải pháp của bạn nhưng không hoạt động có vẻ như tôi đang làm điều gì đó sai ở phần phụ trợ trong phần còn lại , tôi chỉ chỉnh sửa và đăng mã của nó. Có điều gì sai không? – DarkAngeL

+1

Cảm ơn Mathew Berg, tôi đã làm cho nó hoạt động thay đổi dòng mã response.header này ("Content-Disposition", "attachment; filename =" + name) thành response.header ("Content-Disposition", "inline; filename =" + tên) vì nó yêu cầu tôi tải xuống thay vì mở tệp trong cửa sổ mới. – DarkAngeL

+0

Cảm ơn nhưng nó thực sự là 'window.open (dữ liệu);' –

12

Có lẽ điều này có thể giúp đỡ, trong trường hợp bạn có một cái gì đó như thế này:

$http.get('generatePdfUrl') 
    .then(function (data) {  // data is your url 
     var file = new Blob([data], {type: 'application/pdf'}); 
     var fileURL = URL.createObjectURL(file); 
    }); 

Sau đó sử dụng dịch vụ của bạn trong bộ điều khiển và làm

$window.open(fileURL); 
+1

trình chặn cửa sổ bật lên can thiệp vào chrome – Per

Các vấn đề liên quan