誰かが私を助けてくれることを願っています...私がやろうとしていることはかなり単純なはずですが、私はこのことと1日以上戦っていて、アイデアがありません. StackOverflow とインターネット全体に関する多くの情報を見つけましたが、この問題の解決に役立つものは何もありませんでした。
itext-2.0.8 を core-renderer-R8 と共に使用して、フォントが埋め込まれた PDF を作成しようとしています。有効な XHTML から PDF を生成しようとしており、@font-face スタイル タグを使用してフォントを埋め込んでいます。ブラウザでファイルを開いて @font-face タグにフォントが含まれていることを確認しました。また、TTF フィールドを XHTML/CSS ドキュメントに相対的に保つように常に注意しています。
これをやり遂げるために、フォントを埋め込んでみる小さな「Hello World」タイプのプログラムを作成しました。私は2つの別々のアプローチを取りましたが、どちらも望ましい結果を生み出すことができません。この小さな Eclipse プログラムのコピーをhttp://christopherluft.com/FlyingSaucer.zipに置きました。
プログラムは両方のインスタンスで PDF を生成しますが、PDF は期待どおりに埋め込まれません。setDocument でファイルを使用する最初の方法では、エラーは発生しませんが、フォントも発生しません。2 番目の方法では 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();
}
そして、私が使用している 2 番目の方法 (アプリで使用する実際の方法に近い) は次のとおりです。
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;
}
今、これは本当に一般的な使用例だと思います。これを機能させるための簡単な手順を 1 つ実行できていないだけだと思います...問題は、私がしばらくこれに取り組んでいて、木の間から森が見えない。誰かが私に提供できる助けがあれば、大歓迎です。お時間をいただきありがとうございます。