【问题标题】:pdf.js giving back "InvalidPDFException: Invalid Pdf Structure"pdf.js 回馈“InvalidPDFException:无效的 Pdf 结构”
【发布时间】:2018-04-16 23:22:14
【问题描述】:

我目前有一个后端 java 服务,它使用 itext 为我将 html 转换为 pdf。我将 pdf 作为字节 [] 返回给客户端(Angular 5)。但是当我尝试在其上运行 getDocument 函数时,我最终得到 "invalid pdf structure"。我不相信 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 文件的直接 url 测试了这段代码,它可以工作。

这是一些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);

    }

请把你们的帮助借给我!

【问题讨论】:

    标签: javascript java angular pdf.js


    【解决方案1】:

    而不是:

    return this.http.get(environment.webappServer+"/get1098E", {responseType:'arraybuffer'}).map(
      (res) =>{
          return res;
        }
      )
    

    我刚刚删除了 responseType:'arraybuffer'。 然后我接受响应并手动将其转换为类型化数组(Uint8Array)。 我猜 responseType:arraybuffer 回馈了一些损坏的东西。

    【讨论】:

    • 嗨。你能展示你是如何转换它的吗?非常感谢!
    猜你喜欢
    • 2014-01-27
    • 2021-11-24
    • 2021-01-01
    • 1970-01-01
    • 2012-09-03
    • 2022-01-10
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多