1

私の .xsl ファイルでは、このような外部グラフィックを使用しています
<fo:external-graphic width="90pt" height="29pt" src="url(xsl/logo.jpg)"/>

しかし、生成された PDF に画像が読み込まれず、コンソールにこのエラーが表示されます。
[ERROR] Error while creating area : Error with image URL: xsl\logo.jpg (The system cannotfind the path specified) and no base URL is specified

この問題を解決するにはどうすればよいですか? ベースURLを設定すればいいと思います。しかし、ベース URL を設定するにはどうすればよいでしょうか。助けてください。

4

4 に答える 4

3

Apache FOP 1.1 Ver. を使用しています。

    fopFactory = FopFactory.newInstance();
    // for image base URL : images from Resource path of project
    String serverPath = request.getSession().getServletContext().getRealPath("/");
    fopFactory.setBaseURL(serverPath);
    // for fonts base URL :  .ttf from Resource path of project
    fopFactory.getFontManager().setFontBaseURL(serverPath);

プロジェクトのリソース ディレクタにすべての画像と必要なフォント フォント ファイルを追加しました。それは私にとってはうまくいっています。ありがとうございました

于 2013-10-07T11:17:50.687 に答える
3

このリンクから解決策を得ました
http://groups.yahoo.com/group/XSL-FO/message/6116

Java コードを使用してベース ディレクトリを設定する

ServletContext servletContext = getServletConfig().getServletContext();

String appPath = servletContext.getRealPath(""); //root of web app
org.apache.fop.configuration.Configuration.put("baseDir",appPath);

これは私にとってはうまくいきました。
より良い解決策を知っている場合は投稿してください。

于 2011-03-24T08:31:37.310 に答える
2

私は同じ問題を抱えていましたが、これはバージョン 0.95 の fop でのみ機能します。SetBaseUrl はバージョン 1.0 では無視されます

于 2011-10-18T19:00:33.743 に答える
0

バージョン 1.0、1.1 の解決策: fop 1.0 および 1.1 では、メソッド setBaseURL() がローカル ファイルで正しく機能しないため、メソッド setURIResolveri を使用してインターフェイス URIResolver の実装を記述できます。

1.add in uses import javax.xml.transform.URIResolver;

2.mainClassに追加

 private static class LocalResolver implements URIResolver {
         private String BaseFolder; 
            @Override
            public Source resolve(String href, String base) throws TransformerException {
             File f = new File(BaseFolder + "\\" + href);
             if (f.exists())
             return new StreamSource(f);
                     else
                      throw new TransformerException("File " + f.getAbsolutePath() +" not found!");         
            }

         public LocalResolver(String BaseFolder) {
           this.BaseFolder = BaseFolder;   
         }

     }

Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

3.transformer.transform(src、res)を呼び出す前にこれを追加します:

fop.getUserAgent().setURIResolver(new LocalResolver("C:\\Users\\photon\\Downloads\\fop-1.1-bin\\fop-1.1"));
于 2013-12-02T09:57:32.800 に答える