1


私はpdf出力を生成するためにfopを使用していますが、それは初めてです。長時間の作業の後、私は 1 つの問題に直面 しました。

私のxslファイルがあります:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:template match="root">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
            <fo:layout-master-set>
            <fo:simple-page-master master-name="my-page">
                <fo:region-body margin="1in"/>
            </fo:simple-page-master>
        </fo:layout-master-set>
        <fo:page-sequence master-reference="my-page">
            <fo:flow flow-name="xsl-region-body">

                <!-- LOGO
                <fo:block>

                </fo:block>
                 -->

                <!-- TEXT -->
                <fo:block text-align="justify">
                    <xsl:value-of select="text" />
                </fo:block>

                <!-- TABLES -->
                <xsl:for-each select="./table">
                    <fo:block>
                        <fo:block font-weight="bold"> <!-- Add some adjustment -->
                            <xsl:value-of select="@name" />
                        </fo:block>
                        <table> <!-- Add some border -->
                            <fo:table-body> <!-- Add some adjustment -->
                                <fo:table-row>
                                    <xsl:for-each select="./header/cell">
                                        <fo:table-cell>
                                                <fo:block font-weight="bold"> <!-- Add some adjustment and extra border -->
                                                    <xsl:value-of select="." />
                                                </fo:block>
                                            </fo:table-cell>
                                    </xsl:for-each>
                                </fo:table-row>
                                <xsl:for-each select="./row">
                                    <fo:table-row>
                                        <xsl:for-each select="./cell">
                                            <fo:table-cell>
                                                <fo:block> <!-- Add some adjustment -->
                                                    <xsl:value-of select="." />
                                                </fo:block>
                                            </fo:table-cell>
                                        </xsl:for-each>
                                    </fo:table-row>
                                </xsl:for-each>
                            </fo:table-body>
                        </table>
                    </fo:block>
                </xsl:for-each>
            </fo:flow>
        </fo:page-sequence>
    </fo:root>
</xsl:template>
</xsl:stylesheet>

そして、そこにあるJava部分の印刷ファイルがトリガーされます

private void convertToPDF(File xsl, File pdf) throws IOException,
        FOPException, TransformerException {

    FOUserAgent foUserAgent = fopFactory.newFOUserAgent();

    OutputStream out = new BufferedOutputStream(new FileOutputStream(pdf));
    try {
        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent,
                out);

        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(new StreamSource(
                xsl));

        Source src = prepareSource();

        Result res = new SAXResult(fop.getDefaultHandler());

        // Start XSLT transformation and FOP processing
        transformer.transform(src, res);
    } finally {
        out.close();
    }
}

このメソッドに指定されたパラメーター xsl は、私のプロジェクト リソースから選択されたファイルであり、これが適切なファイルであると確信しています (出力されます)。

私の xml ソースは Java で動的に生成されます。これらのファイルが必要な場合は、この投稿を編集してそこに配置します。

xsl ファイルを編集して単純化しようとしましたが、何も機能しませんでした。

コンパイルには、Spring Tool Suite 拡張機能を備えた Eclipse を使用しています。
助けてくれませんか?

また、私のPDF出力に画像を配置する方法を教えてもらえますか?

4

0 に答える 0