|
XLS-FO разная ориентация страниц у разных документов
|
|||
---|---|---|---|
#18+
Добрый день. Подскажите пожалуйста, как сделать следующее: Имеется xml с РПД такой структуры: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Необходимо при генерации pdf СФ(Commercial_Invoice ) выводить на страницах с книжной ориентацией, а все остальные документы с альбомной. При этом должна сохраниться сортировка документов, как она есть в xml-файле. Никак не могу сделать, не потеряв сортировку, как в XML-файле. <xsl:template match="documents"> Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2014, 01:06 |
|
XLS-FO разная ориентация страниц у разных документов
|
|||
---|---|---|---|
#18+
Как-то так Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2014, 18:48 |
|
XLS-FO разная ориентация страниц у разных документов
|
|||
---|---|---|---|
#18+
_Vasilisk_, спасибо Вам большое! 3 дня бился с этой проблемой... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2014, 22:44 |
|
XLS-FO разная ориентация страниц у разных документов
|
|||
---|---|---|---|
#18+
Форумчане, в продолжении темы есть вопрос посложнее. Вот XML <?xml version="1.0" encoding="UTF-8"?> <documents> <!-- Счет-фактура --> <Commercial_Invoice clnt_id="362651"> 1 </Commercial_Invoice> <!-- Счет-фактура --> <Commercial_Invoice clnt_id="1644763"> 2 </Commercial_Invoice> <!-- Корректировочный счет-фактура --> <Adj_Commercial_Invoice clnt_id="1195947"> 3 </Adj_Commercial_Invoice> <Bill clnt_id="737659"> 4 <Commercial_Invoice clnt_id="362651"> 4.1 </Commercial_Invoice> </Bill> <Bill clnt_id="395064"> 5 </Bill> <payment_request> 6 </payment_request> <Commercial_Invoice clnt_id="1644763"> 7 </Commercial_Invoice> </documents> По аналогии с предыдущим примером написал xslt <?xml version="1.0" encoding="UTF-8"?> <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="documents"> <fo:root > <fo:layout-master-set> <fo:simple-page-master master-name="A4_landscape" page-height="21cm" page-width="29.7cm" font-family="sans-serif" margin-top="0.5cm" margin-bottom="1cm" margin-left="2cm" margin-right="2cm"> <fo:region-body margin-top="0mm" margin-bottom="10mm" /> <fo:region-before extent="10mm" /> <fo:region-after extent="10mm" /> </fo:simple-page-master> <fo:simple-page-master master-name="A4_portrait" page-height="29.7cm" page-width="21cm" font-family="sans-serif" margin-top="0.5cm" margin-bottom="1cm" margin-left="2cm" margin-right="2cm"> <fo:region-body margin-top="0mm" margin-bottom="10mm" /> <fo:region-before extent="10mm" /> <fo:region-after extent="10mm" /> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="A4_landscape"> <fo:flow flow-name="xsl-region-body" font-family="Arial"> <xsl:apply-templates select="*" mode="doc"></xsl:apply-templates> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <xsl:template match="Commercial_Invoice[parent::Bill]" mode="doc"> <fo:page-sequence master-reference="A4_portrait"> <fo:flow flow-name="xsl-region-body" font-family="Arial"> <fo:block><xsl:apply-templates select="."/></fo:block> </fo:flow> </fo:page-sequence> </xsl:template> </xsl:stylesheet> При обработке происходит ошибка вызова одного page-sequence из под другого: net.sf.saxon.trans.XPathException: org.apache.fop.fo.ValidationException: "{ http://www.w3.org/1999/XSL/Format}page-sequence" is not a valid child of "fo:flow"! (See position 27:-1) Как же правильно вызвать использование одного макета страниц для элемента, который находится внутри другого, на который назначен другой макет страницы? Понимаю, что логика такая: Перед использованием нового макета страницы, старый должен быть закрыт. Предположим <documents> обрабатывается макетом «A4_landscape». Внутри <documents> используется элемент <Commercial_Invoice[parent::Bill]> который должен выводиться макетом «A4_portrait». Необходимо часть содержимого <documents> до <Commercial_Invoice[parent::Bill]> вывести с макетом «A4_landscape», закрыть последовательность «A4_landscape», затем вывести содержимое <Commercial_Invoice[parent::Bill]> с макетом «A4_portrait», закрыть – «A4_portrait», вывести оставшуюся часть <documents> с макетом «A4_landscape». Как это описать к коде xslt ? Заранее благодарен за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 11:59 |
|
XLS-FO разная ориентация страниц у разных документов
|
|||
---|---|---|---|
#18+
Андрей Ф.Необходимо часть содержимого <documents> до <Commercial_Invoice[parent::Bill]> вывести с макетом «A4_landscape», закрыть последовательность «A4_landscape», затем вывести содержимое <Commercial_Invoice[parent::Bill]> с макетом «A4_portrait», закрыть – «A4_portrait», вывести оставшуюся часть <documents> с макетом «A4_landscape».Собственно все то же самое, что и в исходном сообщении Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 18:18 |
|
|
start [/forum/topic.php?fid=14&tid=1332090]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 277ms |
0 / 0 |