Пользовательский шрифт не работает с itextrenderer в Java
Я встроил свои пользовательские шрифты в HTML с @ font-face. Это работает со всеми браузерами, но когда я пытаюсь преобразовать его в pdf через itextrender в java, пользовательский шрифт больше не работает, он принимает шрифты по умолчанию, такие как Arial.
Код CSS:
@font-face {
font-family: Subaru-Medium;
src: url('fonts/Subaru-Medium.eot'); /* IE9 Compat Modes */
src: url('fonts/Subaru-Medium.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('fonts/Subaru-Medium.ttf') format('truetype'), /* Safari, Android, iOS */
url('fonts/Subaru-Medium.svg#svgFontName') format('svg'); /* Legacy iOS */
}
Java-код:
public static void writePDF(String HTMLfileName, String PDFFileName, String WhereToSave,String fontDirectory)
{
try
{
String url = new File(HTMLfileName).toURI().toURL().toString();
String outputFile = WhereToSave+PDFFileName;
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver fontResolver=renderer.getFontResolver();
fontResolver.addFont("C:\\Users\\benay.debnath\\Desktop\\htmltemplate\\fonts\\Subaru-Medium.ttf", true);
// fontResolver.addFontDirectory(fontDirectory, true);
SharedContext scontext=renderer.getSharedContext();
// scontext.setDPI(72);
scontext.setDotsPerPixel(12);
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
System.out.println("status:$:true^#^message:$:PDF Genarated^#^fileName:$:"+outputFile);
}catch (Exception e) {
System.out.println("status:$:false^#^message:$:"+e.getMessage());
}
}
Кто-нибудь может помочь мне найти то, что я делаю неправильно? помощь высоко ценится.
2 ответа
Эта проблема решена, проблема была в css Я упомянул семейство шрифтов:"Subaru-Medium" в файле шрифта (.ttf) имя шрифта было "Subaru Medium", поэтому он не работал. Теперь работает нормально:)
Прежде всего, убедитесь, что шрифт, указанный ниже, установлен в вашей системе, если нет, то установите шрифт и добавьте следующую строку в ваш код.
public static void writePDF(String HTMLfileName, String PDFFileName, String WhereToSave,String fontDirectory)
{
try
{
String url = new File(HTMLfileName).toURI().toURL().toString();
String outputFile = WhereToSave+PDFFileName;
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("C:\\Windows\\Fonts\\Calibri.ttf","UTF-8",BaseFont.NOT_EMBEDDED);
// fontResolver.addFontDirectory(fontDirectory, true);
SharedContext scontext=renderer.getSharedContext();
// scontext.setDPI(72);
scontext.setDotsPerPixel(12);
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
System.out.println("status:$:true^#^message:$:PDF Genarated^#^fileName:$:"+outputFile);
}catch (Exception e) {
System.out.println("status:$:false^#^message:$:"+e.getMessage());
}
Я также столкнулся с той же проблемой, которую я решил, используя вышеуказанное решение. надеюсь, это будет полезно для вас:)