2

Flying Saucerを使用して、いくつかのPDFドキュメントを文字列からHTMLにレンダリングしています。

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputStream is = new ByteArrayInputStream(html.getBytes("UTF-8"));
Document doc = builder.parse(is);

response.setContentType("application/pdf; charset=UTF-8");
response.setHeader("Content-disposition", "inline; filename=\"" + outFileName + "\"");

OutputStream os = response.getOutputStream();

ITextRenderer iTextRenderer = new ITextRenderer();
iTextRenderer.setDocument(doc,null);
iTextRenderer.layout();
iTextRenderer.createPDF(os);
os.flush();
os.close();

プレーンテキストの場合、これは問題なく機能します。HTMLコンテンツで外部CSSを参照しました。ただし、PDFが生成されると、CSSは適用されません。

setDocument()メソッドはdocumentとurlの2つのパラメーターを取ることを読みました。urlパラメーターは、外部CSSなどのxhtmlに表示される相対パスの前に追加するために使用されるベースURLを示します

だから、私は供給しようとしました

コンテキストパス/css

baseURLでディレクトリを作成し、で使用しましたsetDocument()。それでも結果はありません

だから、私の質問baseURLとして渡す正しいURLは何ですか?

String baseURL = ""; // What goes here as root URL for resources
iTextRenderer.setDocument(doc,baseURL);
4

3 に答える 3

2

FAQはこれを伝えています:

URLは「ベース」であり、通常のURLの場合、親の場所(親ディレクトリ、またはレンダリングするドキュメントが配置されている場所)になります。ドキュメントにCSSと画像の絶対URIがある場合、またはない場合外部参照がある場合は、ベースURLをnullにすることができます。ドキュメントにCSSまたは画像の相対URIがある場合、ベースURLはnullではなく、現在のドキュメントが配置されているディレクトリまたはアドレスを指している必要があります。

cssへのパスではなく、ドキュメントへのパスをテストしましたか?しかし、CSSのリンクにも問題があったので、URIを挿入しました(これまでのところ問題はありません:-))。上記のリンクを使用すると、機能しますか?

新しい投稿で申し訳ありませんが、コメントによると、ネガティブな文字しか残っていません...

于 2012-08-30T13:06:29.143 に答える
0


<link rel="stylesheet" type="text/css" href="file://path/to/your.css" />
ドキュメント(ヘッド)に挿入することで、CSSパスを挿入できます。

(場合によっては、URIの代わりに単純なパスを使用できます)

于 2012-08-24T16:26:16.203 に答える
0

問題はファイルパスではなく、メディアです。1つは画面にレンダリングすることで、もう1つはPDFファイルのような印刷メディアにレンダリングすることです。したがって、XMLファイル内のスタイルシートTAGに属性を追加する必要があります。

code.google.com/p/flying-saucer/wiki/FAQPDFから

PDFがCSSを取得していません!

PDFは「印刷」メディアとして扱われます。メディアタイプに関するCSS2.1仕様のセクションを参照してください。リンクまたは埋め込むときに、CSSのメディアタイプを指定していることを確認してください。タイプ「print」または「all」を使用します。

簡単な答えは、 次のmedia="all"ようにXMLスタイルシートTAGに属性を追加することです。

<?xml-stylesheet href="foo.css" media="all" type="text/css"?>

あなたが使用できる代替案 media="print"

于 2014-01-30T05:10:59.410 に答える