Я надеюсь, что кто-нибудь может мне помочь... кажется, что то, что я пытаюсь сделать, должно быть довольно простым, но я борюсь с этим уже больше дня, и у меня закончились идеи. Я нашел много информации о StackOverflow и в Интернете в целом, но ничто не помогло мне решить эту проблему.
Я пытаюсь использовать itext -2.0.8 вместе с основным -визуализатором -R8 для создания PDF-файла со встроенным шрифтом. Я пытаюсь создать PDF-файл из действительного XHTML и встраиваю шрифт, используя тег стиля лица @font -. Я подтвердил, что тег лица @font -включает шрифт, открыв файл в браузере. И я всегда стараюсь, чтобы поле TTF соответствовало документу XHTML/CSS.
Чтобы попытаться пройти через это, я создал небольшую программу типа «Hello World», чтобы попытаться встроить шрифт. Я использовал два разных подхода, и оба они не дали желаемого результата. Я разместил копию этой небольшой программы Eclipse по адресу http://christopherluft.com/FlyingSaucer.zip
. Программа создает PDF-файл в обоих случаях, но ни один из них не встраивается должным образом. Первый метод, использующий файл с setDocument, не выдает ни ошибок, ни шрифтов. И второй метод создает PDF, но показывает java.net.MalformedURLException в выходных данных отладки.
Я испробовал многочисленные перестановки различных путей и URL-адресов; однако ни один из них не приводит к желаемому результату. Я подозреваю, что я что-то не понимаю в ITextRenderer.setDocument; однако мне было очень трудно найти какую-либо подходящую документацию, относящуюся к моему варианту использования.
Первый метод, который я пытаюсь использовать, это:
public static void main(String[] args) throws IOException, DocumentException {
System.getProperties().setProperty("xr.util-logging.loggingEnabled",
"true");
XRLog.setLoggingEnabled(true);
String inputFile = "sample.xhtml";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = "firstdoc.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
}
И второй метод, который я использую (, который ближе к фактическому способу, которым мы используем его в нашем приложении ), это:
public static void main(String[] args) throws IOException, DocumentException {
System.getProperties().setProperty("xr.util-logging.loggingEnabled", "true");
XRLog.setLoggingEnabled(true);
String inputFile = "sample.xhtml";
String url = new File(inputFile).toURI().toURL().toString();
DocumentBuilder documentBuilder;
org.w3c.dom.Document xhtmlContent;
try
{
documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
documentBuilder.setEntityResolver(new XhtmlEntityResolver(new SuppressingEntityResolver()));
xhtmlContent = documentBuilder.parse(url);
System.out.println(url);
String outputFile = "firstdoc.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(xhtmlContent,".");
renderer.layout();
renderer.createPDF(os);
System.out.println("Finishing up....");
os.close();
}
catch (SAXException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ParserConfigurationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
И @font -включение лица в XHTML выглядит следующим образом:
@font-face {
font-family: 'MisoRegular';
src: url("miso-regular-webfont.ttf");
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
Теперь я чувствую, что это действительно распространенный вариант использования, и я представляю, что мне просто не удается выполнить один простой шаг, чтобы заставить это работать... проблема в том, что я занимаюсь этим какое-то время и думаю, что не могу увидеть лес за деревьями. Любая помощь, которую кто-либо может предложить мне, будет принята с благодарностью. Спасибо за уделенное время.