Как встроить внешний файл PDF / TXT в другой с помощью XSL-FO? - PullRequest
5 голосов
/ 20 мая 2011

Можно ли встроить внешний PDF или текстовый документ в основной PDF с помощью XSL-FO / XSLT?

У меня есть таблица стилей xslt для создания PDF-документов. Но входной XML содержит встроенные документы PDF в формате TEXT или Base64. Итак, что я делаю в своей HTML-версии таблицы стилей, я извлекаю текст или PDF и выгружаю его на диск. Тогда в xslt у меня это:

<xsl:when test='(n1:text/@mediaType="application/pdf") or (n1:text/@representation="B64")'>
    <IFRAME name='documentFrame' id='documentFrame' WIDTH='100%' HEIGHT='65%' src='{$DOC_URI}'/>
</xsl:when>

Для преобразования HTML это работает отлично. Можно ли добиться того же результата (вставлять документ) в PDF? У меня есть XSLT для генерации PDF, но я не смог добиться того же результата.

Я пробовал надстройки для Apache FOP, подобные этой ( Поддержка изображений PDF ):

 <fox:external-document src="my-doc.pdf"/>

Видимо, это только для изображений.

Есть подсказки?

Спасибо

Ответы [ 2 ]

7 голосов
/ 21 мая 2011

Итак, я обнаружил, что это возможно, используя мое предыдущее решение, но я просто делал это неправильно. Проверьте это здесь: FOP Extension

Также, вот пример того, как его использовать:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xmlgraphics.apache.org/fop/extensions">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="A4">
            <fo:region-body/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="A4">
        <fo:flow flow-name="xsl-region-body">
            <fo:block-container>
                <fo:block>Hello W3Schools</fo:block>    
                <fo:block>
                </fo:block>
            </fo:block-container>
        </fo:flow>
    </fo:page-sequence>

    <fox:external-document content-type="pdf" src="../example_file/test.pdf"/>
</fo:root>
1 голос
/ 09 февраля 2018

code-gijoe очень поздний ответ, так как я только начал использовать fop, но вы можете сделать (с расширением FOX)

    <fo:block-container absolute-position="absolute">
        <fo:block>
            <fo:external-graphic src="src/main/resources/externalpdf/test.pdf"/>
            <fo:block-container absolute-position="absolute" left="0pt" top="100pt" right="200pt" bottom="270pt">
                <fo:block font-weight="bold" font-size="15pt" border="{$border}" text-align="center" line-height="18pt" font-style="italic">
                    Hello
                </fo:block>
            </fo:block-container>
        </fo:block>
    </fo:block-container>

чтобы вставить его на ту же страницу и наложить на него текст

...