2013-11-19 3 views
3

Я в затруднении, пытаясь понять это. Я новичок в использовании xsl-fo (реализация apache-fop), и мне нужен блок с рамкой и содержимым внутри padded, поэтому он не сталкивается с границей. Однако, когда я добавляю прокладку, прокладка также применяется к следующему блоку?Каким образом xsl-fo padding применяется к другим блокам?

<fo:page-sequence master-reference="report-page"> 
<fo:flow flow-name="xsl-region-body"> 

    <fo:block border="1px solid black" font-size="8pt" margin-bottom="3mm" padding="3mm" > 
     <fo:block font-weight="bold">FOO</fo:block> 
     <fo:block>ANOTHER BLOCK</fo:block> 
    </fo:block> 

    <fo:block font-size="8pt">BAR</fo:block> 
</fo:flow> 

Почему BAR становится отступом количеством дополнения от предыдущего блока? Если я удаляю прокладку на первом блоке, все в порядке?

+0

Какая версия FOP? В вашем случае ни один из них не должен показывать какой-либо отступ, так как прокладка находится вне блока. –

+0

@KevinBrown 1.1 –

ответ

3

Что вы должны делать, это установить границу на «0 мм» и отложить до «3 мм» на блоке, если ваше намерение не должно иметь места снаружи граница и расстояние в 3 мм между текстом и границей.

<fo:block border="1px solid black" font-size="8pt" margin="0mm" padding="3mm"> 
    <fo:block font-weight="bold">FOO</fo:block> 
</fo:block> 

Если запас дно было предназначено, чтобы сделать пространство между элементами, то вы должны использовать пространство-после или пространства-до на следующий элемент.

+0

Спасибо margin = "0mm" сделал трюк !, но ничего себе, что так странно для меня. В моей нижней части было да, чтобы добавить место после блока (изменит это), но почему 1) вы должны сделать его margin = "0mm" (удаление полностью по-прежнему имеет проблему с отступом) и 2) маржа была равна установлен на «нижний», так почему же это вызывает отступ к «правильному»? –

+0

Ну, это большая часть стандарта для чтения ... в вашем случае, дополнение (без поля) применяется вне блока, чтобы граница натолкнулась на текст. –

1

Попробуйте сделать следующее (это не тестировался, потому что моя установка Apache FOP не находится в пределах досягаемости ...)

EDIT: Теперь испытания. Заполнение применяется только к первому блоку («FOO»).

Укажите отступы внутри фо: встроенный элемент, как это:

<fo:block border="1px solid black" margin-bottom="3mm"> 
<fo:inline padding="3mm" font-size="8pt" font-weight="bold"> 
    <fo:block>FOO</fo:block> 
</fo:inline> 
</fo:block> 

Кроме того, я переехал начертание шрифта и размера шрифта свойства строкового элемента, поскольку внутренний блок является единственным место они необходимы (по крайней мере, в вашем простом фрагменте). Внешний блок определяет границу. Дайте мне знать, если это сработает.

+0

Это решение тоже меня закрыло, но Кевин, похоже, работал немного лучше, так как я не показывал полный код, который действительно имеет несколько блоков, окруженных границей. В вашем выше, я предполагаю, что из-за «inline» только первый блок получает прописку слева, а также каждый блок внутри заполняется сверху (или, возможно, применяется к нему). (Я изменю свой оригинал, чтобы показать еще несколько блоков.) –

Смежные вопросы