我希望有人可以帮助我……看来我想做的事情应该很简单,但是我已经与这件事斗争了一天多,而且没有想法。我在 StackOverflow 和整个 Internet 上找到了很多信息,但没有什么能帮助我解决这个问题。
我正在尝试使用 itext-2.0.8 和 core-renderer-R8 来创建带有嵌入字体的 PDF。我正在尝试从有效的 XHTML 生成 PDF,并使用 @font-face 样式标签嵌入字体。我已通过在浏览器中打开文件确认 @font-face 标记包含字体。而且我总是小心地保持 TTF 字段与 XHTML/CSS 文档相关。
为了尝试解决这个问题,我创建了一个小的“Hello World”类型程序来尝试嵌入字体。我采取了两种不同的方法,但都未能产生预期的结果。我在http://christopherluft.com/FlyingSaucer.zip放置了这个小 Eclipse 程序的副本
该程序在这两种情况下都会生成 PDF,但都没有按预期嵌入 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();
}
}
XHTML 中的 @font-face 包含如下所示:
@font-face {
font-family: 'MisoRegular';
src: url("miso-regular-webfont.ttf");
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
现在我觉得这是一个非常常见的用例,我想我只是没有执行一个简单的步骤才能让它工作......问题是我已经有一段时间了,我认为我是无法透过树木看到森林。任何人可以为我提供的任何帮助将不胜感激。感谢您的时间。