Tôi đang tạo PDF bằng cách sử dụng plugin xuất của Grails (về cơ bản là Flying Saucer). Trang GSP của tôi là trang UTF-8 (hoặc ít nhất các thuộc tính cho thấy rằng đó là UTF-8, cũng ở đầu trang GSP có chỉ thị <?xml version="1.0" encoding="UTF-8"?>
). Lúc đầu, tệp PDF được tạo đúng chứa các ký tự âm sắc "äöüõ", nhưng ký tự Cyrillic bị thiếu trong PDF (không hiển thị). Sau đó, tôi đã thay đổi tệp css của mình như được mô tả trong tài liệu bằng cách thêm như sau:Phông chữ Chiếc đĩa bay cho các ký tự unicode
ArialUni.ttf cũng được triển khai tới máy chủ. Nhưng bây giờ tôi nhận được cả hai ký tự umlaut và ký tự Cyrillic được hiển thị như hộp. Nếu tôi thay đổi giá trị thuộc tính -fs-pdf-encoding thành Identity-H thì các ký tự umlaut được hiển thị đúng, nhưng các ký tự Cyrillic được hiển thị dưới dạng dấu hỏi.
Bất kỳ ý tưởng nào về phông chữ nào có thể được sử dụng để hiển thị đúng cả ký tự âm sắc và ký tự Cyrillic? Hoặc có thể là CSS của tôi bằng cách nào đó sai? Bất kỳ gợi ý nào cũng sẽ được đánh giá cao.
UPD 1: Tôi cũng đã cố gắng css sau (được tạo ra bởi http://fontface.codeandmore.com/):
@font-face {
font-family: 'ArialUnicodeMS';
src: url('arialuni.ttf');
src: url('arialuni.eot?#iefix') format('embedded-opentype'),
url('arialuni.woff') format('woff'),
url('arialuni.ttf') format('truetype'),
url('arialuni.svg#arialuni') format('svg');
font-weight: normal;
font-style: normal;
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: UTF-8;
}
body {
font-family:'ArialUnicodeMS';
}
Tôi đã thêm <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
Tôi cũng đã cố gắng để chạy grails với -Dfile.encoding = UTF-8, như đã được đề cập ở đây: http://grails.1312388.n4.nabble.com/PDF-plugin-Having-problems-with-instalation-td2297840.html, nhưng không có gì hữu ích. Ký tự Cyrillic không được hiển thị. Bất kỳ ý tưởng nào khác có thể là vấn đề gì?
* BTW: * Tôi đang đóng gói PDF của tôi như zip và gửi lại cho trình duyệt trong phản ứng như thế:
response.setHeader "Content-disposition", "attachment; filename=test.zip"
response.setHeader "Content-Encoding", "UTF-8"
response.contentType = 'application/zip'
response.outputStream << zip
response.outputStream.flush()
response.outputStream.close()
Tôi có cần phải bằng cách nào đó xem xét mã hóa trong khi nén ????, mà tôi làm như thế:
public static byte[] zipBytes(Map<String, ByteArrayOutputStream> fileNameToByteContentMap) throws IOException {
ByteArrayOutputStream zipBaos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(zipBaos);
fileNameToByteContentMap.eachWithIndex {String fileName, ByteArrayOutputStream baos, i ->
byte[] content = baos.buf
ZipEntry entry = new ZipEntry(fileName)
entry.setSize(content.length)
zos.putNextEntry(entry)
zos.write(content)
zos.closeEntry()
}
zos.close()
return zipBaos.toByteArray();
}
Nếu content-type của bạn định nghĩa là UTF-8 không? –
Bạn có nghĩa là loại nội dung HTML? –