C# Фонет.Стандартный многостраничный выпуск версии v1.0.5

#c# #xml #xslt #apache-fop

Вопрос:

Поэтому я использую таблицу стилей (для тестирования), как показано ниже, с помощью Fonet.Стандарт v1.0.5 через NuGet. Он генерирует PDF-файл, и когда содержимое <fo:flow flow-name=»xsl-регион-тело»> подходит для менее чем страницы, все в порядке. Но когда содержимое переполняет его, в PDF создается только первая страница, однако нижний колонтитул правильно указывает, что должно быть несколько страниц, т. Е. в нем указана страница 1 из 2. Та же структура отлично работает с Apache FOP в среде, отличной от Windows. Так что я должен делать это по-другому с Фонетом.Стандартный? Для справки xml для тестирования был удален обратно в

 <?xml version="1.0" encoding="UTF-8"?>
<Data>
<DateTime>02/06/2021 10:56</DateTime>
</Data>
 

и xslt-это

 <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
<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="first" page-height="29.7cm" page-width="21cm" margin-top="18mm" margin-bottom="18mm" margin-left="18mm" margin-right="18mm">
      <fo:region-body margin-top="80mm" margin-bottom="5mm"/>      
      <fo:region-before region-name="header-first"  extent="80mm" />
      <fo:region-after region-name="footer-first" extent="20mm"/>
    </fo:simple-page-master>
    <fo:simple-page-master master-name="rest" page-height="29.7cm" page-width="21cm" margin-top="18mm" margin-bottom="18mm" margin-left="18mm" margin-right="18mm">
      <fo:region-body  margin-top="25mm"  margin-bottom="5mm"/>
      <fo:region-before region-name="header-rest"  extent="25mm" />
      <fo:region-after region-name="footer-rest" extent="5mm"/>
    </fo:simple-page-master>
    <fo:page-sequence-master master-name="document">
      <fo:repeatable-page-master-alternatives>
        <fo:conditional-page-master-reference page-position="first" master-reference="first"/>
        <fo:conditional-page-master-reference page-position="rest" master-reference="rest"/>
      </fo:repeatable-page-master-alternatives>
    </fo:page-sequence-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="document">
    <fo:static-content flow-name="footer-first">
      <fo:block padding="1pt" text-align="center">
        page <fo:page-number/> of <fo:page-number-citation ref-id="LastPageIndicator"/>
      </fo:block>      
    </fo:static-content>
    <fo:static-content flow-name="footer-rest">
      <fo:block padding="1pt" text-align="center">
        page <fo:page-number/> of <fo:page-number-citation ref-id="LastPageIndicator"/>
      </fo:block>      
    </fo:static-content>
    <fo:static-content flow-name="header-first">
        <fo:block padding="1pt" text-align="center">
            test first header
        </fo:block>      
    </fo:static-content>
    <fo:static-content flow-name="header-rest">
        <fo:block padding="1pt" text-align="center">
            test rest header
        </fo:block>      
    </fo:static-content>    
    <fo:flow flow-name="xsl-region-body">
        <fo:block padding="1pt" text-align="center">
test detai here
        </fo:block>      
        <fo:block id="LastPageIndicator"> </fo:block>
    </fo:flow>
    </fo:page-sequence>
    </fo:root>
    </xsl:template>
</xsl:stylesheet>

 

Комментарии:

1. Проверьте поля, высоту и размеры в xsd. Они не выглядят последовательными. Я не знаю размеров страниц, которые вы используете для вывода PDF, поэтому не могу рекомендовать изменения.

2. опечатка в «первом»

3. Высота страницы составляет 29,7 см, что кажется небольшим. Верхний колонтитул составляет 80 мм (0,8 см), а нижний колонтитул-20 мм (0,2 см).

4. да, 29,7 см-это высота формата А4, 80 мм=8 см. 20 мм=2 см… все правильно

5. Ваш xslt выглядит просто отлично. Помогает ли добавление атрибута region-name в fo:region-body следующим образом <поле fo:region-body-вверху=»80 мм», поле внизу=»5 мм», имя региона=»xsl-регион-тело»/> ?

Ответ №1:

извините, не обращайте внимания на шум! Код фонета работает нормально. в .Рендеринге использовался поток памяти, который позже преобразуется в Pdf, и там был код, начиная с того момента, когда ожидалось, что это будет только одна страница. В конечном итоге найдено при отладке с помощью .Render, выводящего данные непосредственно в файл вместо потока.