Мне нужно создать PDF файл из источника HTML. В настоящее время я справляюсь с проблемой относительно специальных (польских) символов в выходном файле, точно с их отсутствием.
Источник HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table width="100%" border="0.5" align="center" cellpadding="0" style="border-collapse:collapse; border:1px solid black; font-family:Arial, Helvetica, sans-serif; font-size:16px">
<tr>
<td align="center" ><b>Test: ąęłóćńśŁÓŃĆŻŹąśżźłęó</b></td>
</tr>
</table>
Источник Java:
Document document = new Document(PageSize.A4, 38, 38, 50, 38);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("iTextExample.pdf"));
document.open();
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader(readFileAsString("index.html")));
document.close();
public static String readFileAsString(String filePath) throws IOException {
DataInputStream dis = new DataInputStream(new FileInputStream(filePath));
try {
long len = new File(filePath).length();
if (len > Integer.MAX_VALUE) {
throw new IOException("File " + filePath + " too large, was " + len + " bytes.");
}
byte[] bytes = new byte[(int) len];
dis.readFully(bytes);
return new String(bytes, "UTF-8");
} finally {
dis.close();
}
}
Мой вопрос: как изменить шрифт по умолчанию (Helvetica), например. Arial Bold в целом PDF-документе?
Я тестировал множество примеров, связанных с StyleSheet, и никто из них не работал. Я должен изменить шрифт по умолчанию, потому что нет польских символов - что решение, на которое я надеюсь, будет работать.
Спасибо за любую помощь!
Изменить:
My FontProvider:
class defaultFontProvider extends FontFactoryImp {
private String _default;
public defaultFontProvider(String def) {
_default = def;
}
public Font getFont(String fontName, String encoding, boolean embedded, float size, int style, BaseColor color, boolean cached) {
if (fontName == null || size == 0) {
fontName = _default;
}
return super.getFont(fontName, encoding, embedded, size, style, color, cached);
}
}
В приведенном выше коде встроен arial.ttf
, который в порядке, но как сделать его шрифтом по умолчанию (вместо Helvetica) для всего документа.
Тогда..
Map<String,Object> providers = new HashMap<String, Object>();
defaultFontProvider dfp = new defaultFontProvider("arial.ttf");
providers.put(HTMLWorker.FONT_PROVIDER, dfp);
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.setProviders(providers);