0

服务器端:

        StringBuilder excelExportText=reportService.exportDealReport(criteria);

        final ITextRenderer renderer = new ITextRenderer();
        renderer.getFontResolver().addFont("reports/fonts/Arial.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        renderer.getFontResolver().addFont("reports/fonts/Arial_Bold.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

        String htmlText=excelExportText.toString();

        renderer.setDocumentFromString(new StringBuilder()
                .append("<html>")
                .append("<head><style>@page { size: landscape; } body { font-size: .5em; font-family: Arial,\"Arial bold\";} table tr th {background: #eee;font-weight: bold;border-bottom: 1px solid black;text-align: center;padding: 5px 3px; } tr:nth-child(even) {background: #DDEEF2} tr:nth-child(odd) {background: #FFF} table tr td {padding: 3px;} table {page-break-after: always;border-collapse: collapse;width: 100%;}</style></head>")
                .append("<body>")
                .append(htmlText)
                .append("</body></html>")
                .toString()
                .replaceAll("<br/>", "<br></br>")
                .replaceAll("&","&amp;")
                .replaceAll("&amp;nbsp;"," "));

        renderer.layout();
        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        renderer.createPDF(baos);
        Encoder encoder = Base64.getEncoder();
        String base64PDF =encoder.encodeToString(baos.toByteArray());
        baos.close(); 

        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "attachment; filename=report.pdf");
    
        InputStream targetStream = IOUtils.toInputStream(base64PDF, "UTF-8");
        FileCopyUtils.copy(targetStream, response.getOutputStream());
        response.flushBuffer();

客户端:

private downloadPdf = (fileName: string, content: any, mimeType: string) => {
  let arrBuffer = this.base64ToArrayBuffer(content);
  let arrBuffer = this.base64ToArrayBuffer(content);
  let newBlob = new Blob([arrBuffer], { type: mimeType });
  let data = window.URL.createObjectURL(newBlob);
  let link = document.createElement("a");
  document.body.appendChild(link);
  link.href = data;
  link.download = fileName;
  link.click();
  window.URL.revokeObjectURL(data);
  link.remove();

}

private base64ToArrayBuffer(data) {
  let binaryString = window.atob(data);
  let binaryLen = binaryString.length;
  let bytes = new Uint8Array(binaryLen);
  for (let i = 0; i < binaryLen; i++) {
    let ascii = binaryString.charCodeAt(i);
    bytes[i] = ascii;
  }
  return bytes;

}

可以从客户端创建和获取 pdf 文件。但是当打开它时,一些字母消失了,例如“d”,“b”......并且丢失的字母在标签th或h中都应该是粗体。如您所见,我确实在字体解析器中包含了粗体字体(Arial_Bold.ttf)。所有关于英语,没有其他语言字母。

请告知,并提前感谢。

4

0 回答 0