我目前有一个后端java服务,使用itext将html转换为pdf。我将pdf作为byte []返回给客户端( Angular 5 )。但是当我尝试在其上运行getDocument函数时,我最终得到"无效的pdf结构" 。我不相信pdf结构实际上是无效的。我将我的html模板上传到在线pdf转换器,它工作得很好。
这是我从后端获得的内容:
这是我的pdfjs代码:
class MyDocumentsProvider{
downloadPdf():any{
return this.http.get(environment.webappServer+"/get1098E", {responseType:'arraybuffer'}).map(
(res) =>{
return res;
}
)
}
}
this.myDocumentsProvider.downloadPdf().subscribe((res)=>{
PDFJS.disableWorker = true; //<-- removing this does nothing
PDFJS.getDocument(res).then((pdf)=>{
this.showLoader = false;
this.pdf = pdf;
this.pagesTotal = pdf.numPages;
pdf.getPage(this.pageNum).then((page) => {
this.handlePages(page);
this.writeFile();
})
}).catch((err)=>{
this.showError = true;
console.error(err);
})
},((err)=>{
this.showError = true;
console.error(err);
}))
}
我也尝试过做
PDFJS.getDocument(new Uint8Array(res))then((pdf)...
我已经使用直接网址对pdf文件测试了这段代码,但它确实有效。
这是一些java代码:
@RequestMapping(value="/testPdf", headers="Accept=*/*", method = RequestMethod.GET)
public ResponseEntity<?> testPdf() throws IOException{
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type","application/octet-stream;charset=UTF-8"); //<-- this was added later on. Did nothing....
ResponseEntity <byte[]> arr = pdfService.htmlTemplateToPdf()
return new ResponseEntity<>(arr,responseHeaders, HttpStatus.OK);
}
请把你的援助伙伴借给我!
答案 0 :(得分:1)
而不是:
return this.http.get(environment.webappServer+"/get1098E", {responseType:'arraybuffer'}).map(
(res) =>{
return res;
}
)
我刚删除了responseType:&#39; arraybuffer&#39;。 然后我接受了响应并手动将其转换为类型化数组(Uint8Array)。 我想responseType:arraybuffer回馈了一些损坏的内容。