Генерация PDF из HTML с многоязычным текстом с использованием flying-saucer+iText, работают только китайские шрифты
Я пытаюсь преобразовать страницу HTML в PDF с помощью iText и летающих тарелок. кодирования для HTML-страницы
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<title>中文測試</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
name
{
font-family: "Arial Unicode MS";
color: blue;
font-size: 48;
}
</style>
</head>
<body>
<name>名偵探小怪獸</name>
<h1>भारतीय जनता पार्टी ने फिर कहा है कि बहुमत न होने के कारण वो दिल्ली में सरकार बनाने की
इच्छुक नहीं है और दोबारा चुनाव के लिए तैयार है.
</h1>
<h1>Japanese 日本国</h1>
</body>
</html>
И Java-код для этого -
import java.io.*;
import org.xhtmlrenderer.pdf.*;
import com.lowagie.text.pdf.*;
public class ChineseToPdf {
public static void main(String[] args) {
try {
String inputFile = "chinese.html";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = "test.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver resolver = renderer.getFontResolver();
resolver.addFont("C:/Windows/Fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
И в выходных данных только китайские шрифты отображаются должным образом, хинди и японский приходят как пробел.
Пожалуйста, помогите мне выбраться.2 ответа:
Стиль, который вы определили, применяется только к тегу
name
, а хинди и японский текст находятся вне этого тега. Он отображается шрифтом по умолчанию, который не поддерживает все символы юникода.Чтобы исправить ошибку, вы можете изменить свой стиль, чтобы использовать шрифт "Arial Unicode MS"для всех документов:
body{font-family: "Arial Unicode MS";}