2017-05-23 20 views
0

저는 XSL-FO에서 공백 처리에 관한 몇 가지 팁을 혼동합니다. (단락 내부)eXist-db 응용 프로그램에서 생성 된 XSL-FO에서 줄 바꿈을 버리는 방법은 무엇입니까?

샘플 : 단락에서 사용

<hi rendition="simple:italic"> jeden její prvek i(</hi> 
<hi rendition="simple:bold-italic">E</hi> 
<hi rendition="simple:italic">)</hi> 

특성 (모든 hi의 부모)

<xsl:attribute name="linefeed-treatment">ignore</xsl:attribute> 
<xsl:attribute name="white-space-treatment">preserve</xsl:attribute> 
<xsl:attribute name="white-space-collapse">true</xsl:attribute> 

...

jeden její prvek 제가

( 생산 e )

서식이 좋으며 이탤릭체와 굵은 이탤릭체가 모두 적합합니다. 문제는 대괄호 안에있는 공백입니다.

문제점이 개별 요소의 eXist-db 처리로 인해 발생할 수 있는지 여부는 알 수 없습니다. eXide에서 파일을 열 때마다 자동으로 모든 인라인 요소가 별도의 줄로 나뉩니다. 이것이 FOP에 파일을 제공하는 동안의 경우이고 linebreak가 U + 000A와 다른 경우, 나는 잃어 버릴 것이라고 생각합니다.

UPDATE I

내 앱 내부 일반적인 문서 처리가 다소 복잡하지만 이런 식 테스트 할 때 결과는 동일하다 :

  1. 변수로 doc() 기능을 갖는 문서를 로딩하는 단계;
  2. 스타일 시트를 통해 변수를 전달하고이를 다른 변수에 저장하십시오.
  3. 두 번째 변수를 xslfo:render() 함수에 전달하십시오.
  4. pdf 결과를 직접 스트리밍하거나 DB에 저장하십시오.

test.fo으로 중간 제품을 저장할 수는 있지만 내부에 공백 문제가있는 이유는 분명하지 않습니다. 나는 문제가 연속적인 인라인 요소에 대해 전형적이라고 생각한다. 나는이 fo와 PDF 파일을 생성하려고하면

UPDATE는 II

, 결과는 예상대로 :

<fo:root xml:lang="en" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
    <fo:simple-page-master page-height="297mm" page-width="210mm" margin-top="10mm" margin-left="20mm" margin-right="20mm" 
     margin-bottom="10mm" master-name="PageMaster1"> 
     <fo:region-body margin-top="0mm" margin-left="0mm" margin-right="0mm" margin-bottom="10mm" /> 
    </fo:simple-page-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="PageMaster1"> 
    <fo:flow flow-name="xsl-region-body"> 
     <fo:block text-align="justify"> 
     <fo:block>Lorem ipsum dolor 
      <fo:inline font-style="italic">test(</fo:inline> 
      <fo:inline font-weight="bold">E</fo:inline> 
      <fo:inline font-style="italic">)end</fo:inline> 
      next lorem.</fo:block> 
     </fo:block> 
    </fo:flow> 
    </fo:page-sequence> 
</fo:root> 

내가 테스트 fo 파일을 저장하려고하면이 문제가있는 부분은 그렇게 보인다 :

<fo:inline font-style="italic" color="#91046e" language="cs">jeden její prvek i(</fo:inline> <fo:inline font-weight="bold" font-style="italic" color="#5f3cb6" language="cs">E</fo:inline> <fo:inline font-style="italic" color="#91046e" language="cs">)</fo:inline> 

따라서 내 스타일 시트에 문제가있는 것 같습니다. 예를 들어

, 이탤릭체 내 템플릿 :

<xsl:template match="tei:hi[@rendition='simple:italic']"> 
    <fo:inline xsl:use-attribute-sets="italic"> 
     <xsl:apply-templates/> 
    </fo:inline> 
</xsl:template> 

나는 순간에 특별한 공백이나 줄 바꿈 처리를 사용하지 않습니다. 나는 아무 효과없이 그것을 시도했다. 나는 또한 직렬화, 효과와 함께 놀려고했습니다.(특히 작은 epub 파일을 생성 할 때 사용하지만 여기서는 fo 출력이 동일하게 유지됩니다. Saxon에서는 직렬화 옵션을 덮어 씁니다. 인쇄는 아무리해도 파일을 그대로 사용합니다.)

+0

eXist의 어떤 버전입니까? – joewiz

+0

@joewiz, 3.1.1 –

+0

conf.xml의 공백 설정은 무엇이며 FO를 생성하기 위해 스크립트가 따르는 파이프 라인 (또는 재현 가능한 테스트가 더 나은지)을 설명 할 수 있습니까? – joewiz

답변

1

'편집 > 환경 설정 '을 선택하면'소프트 랩 '및'보이지 않는 항목 표시 '환경 설정을 조정하여 eXide가 공백을 추가하는지 여부를 결정할 수 있습니다.

'들여 쓰기'및 '억제 들여 쓰기'매개 변수를 설정할 수 있습니다. https://www.w3.org/TR/xquery-31/#id-serializationhttps://www.w3.org/TR/xslt-xquery-serialization-31/#xml-indent을 참조하십시오.

eXist가 처리 할 FO를 로그 또는 http://exist-db.org/xquery/file 모듈의 기능을 사용하는 파일 (http://exist-db.org/exist/apps/fundocs/view.html?uri=http://exist-db.org/xquery/file&location=java:org.exist.xquery.modules.file.FileModule&details=true 참조)로 작성하여 eXist가 흰색을 추가하는지 여부를 확인할 수 있습니다. -공간.

+0

감사합니다. 나는 시도 할 것입니다. 나는 eXide에 수동으로 라인을 "결합"할 때마다 예상대로 결과를 추가해야합니다 (세션이 끝날 때까지 지속됩니다). 보이지 않는 항목을 표시 할 때 실제로 줄 바꿈이 ** ** 있지만 정규식과 일치시킬 수는 없습니다! –