服务器端:
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("&","&")
.replaceAll("&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)。所有关于英语,没有其他语言字母。
请告知,并提前感谢。