Javascript Java xhtmlrenderer itextrenderer html pdf缺少字母(粗体)
服务器端:Javascript Java xhtmlrenderer itextrenderer html pdf缺少字母(粗体),javascript,java,pdf,fonts,xhtmlrenderer,Javascript,Java,Pdf,Fonts,Xhtmlrenderer,服务器端: StringBuilder excelExportText=reportService.exportDealReport(criteria); final ITextRenderer renderer = new ITextRenderer(); renderer.getFontResolver().addFont("reports/fonts/Arial.ttf", BaseFont.IDENTITY_H, Ba
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 base64到ArrayBuffer(数据){
让binaryString=window.atob(数据);
设binaryLen=binaryString.length;
let bytes=新的Uint8Array(二进制数);
for(设i=0;i
}
pdf文件可以从客户端创建和获取。但当打开它时,一些字母消失了,如“d”,“b”。。。缺少的字母都应该用粗体标记th或h。
正如您所见,我在字体解析器中包含了粗体字体(Arial_bold.ttf)。关于英语,没有其他语言字母
请提供建议,并提前感谢
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;