【发布时间】:2021-01-15 11:47:21
【问题描述】:
我正在制作一个 pdf 文件。在 Idea 在本地生成文件时 - 正确生成了 pdf。如果您将此文件发送到 MiniO S3 - 将生成符号“#”而不是俄罗斯字母
我自己尝试通过 metadata.setContentType ("application / pdf; charset = utf-8"); 明确指定编码没有帮助:-(
现在我更倾向于添加字体。告诉我如何将其添加到现有代码中。
提前谢谢你!
@SneakyThrows
public byte[] createDocument(PaymentInstructionModel model) {
WordprocessingMLPackage word = Docx4J.load(new ClassPathResource("template.docx").getInputStream());
MainDocumentPart mainDocumentPart = word.getMainDocumentPart();
Map<String, String> variables = objectMapper.convertValue(model, new TypeReference<>() {});
mainDocumentPart.variableReplace(variables);
ByteArrayOutputStream os = new ByteArrayOutputStream();
Docx4J.toPDF(word, os);
return os.toByteArray();
}
byte[] document = documentService.createDocument(model);
String key = String.format("%s/%d-%d-%d_Платёж_№%s.pdf",
event.getPaymentNumber(),
event.getPaymentDate().getYear(),
event.getPaymentDate().getMonthValue(),
event.getPaymentDate().getDayOfMonth(),
event.getPaymentNumber());
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(document.length);
amazonS3.putObject(S3Buckets.CLIENT_PAYMENT_PDF_BUCKET, key, new ByteArrayInputStream(document), metadata);
【问题讨论】:
-
可能正在使用库 IText? mvnrepository.com/artifact/com.itextpdf/itextpdf
-
您的代码似乎没有使用 iText。
-
''' byte[] docBytes = documentService.createDocument(model);文档文档 = 新文档(); BaseFont helvetica = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED);字体字体 = new Font(helvetica, 12, Font.NORMAL); PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));文档.open(); document.add(new Chunk(Arrays.toString(docBytes), font)); // TODO document.close(); '''