저는 Apache FOP 2.8을 사용하여 Apache FOP 중간 형식(IF) 파일을 자체 작성 xslt 스타일시트를 사용하여 HTML 文件
로 변환했습니다.
외부 라이브러리로서 현재 saxon12he만 설치되어 있습니다.
소스 IF 문서에는 다음과 같은 이미지 xml 요소가 있습니다.
으아악쉽게 HTML
로 변환하면 비슷한 결과를 얻을 수 있습니다
다음 템플릿을 사용하는 경우:
으아악여기서 질문이 생성되었습니다 HTML-file
不能是“独立的”...意味着除了 HTML-file
之外还必须有 < code>files 目录,其中包含 Logo.png
,以便 HTML-file
找到图像路径 filesLogo.png
< /p>
하지만 내가 이루고 싶은 것은 HTML 文件
"자립"하는 것이에요.
다음과 같은 간단한 함수 호출을 통해 Logo.png
转换为 Base64
를 변환하는 방법이 있나요?
다음 출력을 생성합니다:
으아악또 다른 까다로운 부분은 중간 형식에서는 xlink:href
也可以生成 .pdf
파일이...
위와 같은 방법으로 Base64 이미지로 변환해 주시면 좋겠습니다.
또는 HTML 문서를 "자체 포함"으로 만드는 다른 방법이 있을 수도 있지만, base64로 변환하는 것이 지금까지 제가 가진 유일한 아이디어입니다.
이 문서에 이어 Saxon 12 HE용 Java 확장 기능을 만들어 보았습니다
그래서 하나 구현했습니다ExtensionFunctionDefinition
문서에 다음과 같이 적혀 있기 때문입니다. "이러한 확장 기능을 구현하는 클래스는 구성에 등록되어야 합니다. " 이는 "net.sf.saxon.Transform 또는 net.sf.saxon.Query의 하위 클래스를 지정하고 applyLocalOptions( 메서드를 재정의하여" 수행할 수 있습니다. ) config.registerExtensionFunction()에 대한 적절한 호출을 수행하도록 " net.sf.saxon.Transform 확장도 추가했습니다 < /代码>:
으아악아티팩트를 구축하면 jar
文件时(我使用 IntelliJ
btw를 얻을 수 있습니다. ) "컴파일 출력"만 추가했기 때문에 jar 파일의 크기는 3kb가 되었습니다.
그런 다음 Apache FOP 옆에 있는 lib 폴더에 항아리를 넣고 saxon-he-12.2.jar
추가했습니다.
xmlns:ext="http://example.com/saxon-extension"
到 xsl:stylesheet
.
근데 지금 전화하면
으아악오류가 발생했습니다net.sf.saxon.trans.XPathException:找不到名为 Q{http://example.com/saxon-extension}imageToBase64() 的 1 参数函数
< /p>
나만의 확장 기능을 만들라고 지시한 @MartinHonnen의 도움으로 이 작업을 수행했습니다.
그래서 저는 새로운 Java 프로그램(Java 8을 사용하는 데 중요함)을 만들고 두 개의 클래스를 추가했습니다.
으아악그리고 이것을 바탕으로 stackoverflow-entry 다른 클래스
으아악MyTransformerFactory
:이제
jar
文件并将其放入 Apache FOP 的lib
폴더를 만듭니다.그런 다음 추가하세요
set CUSTOMOPTS=-Djavax.xml.transform.TransformerFactory=ExtensionsPackage.MyTransformerFactory
fop.bat
并将%CUSTOMOPTS%
添加到:runFop
으로.스타일시트에 네임스페이스 추가:
으아악다음과 같이 사용하세요:
으아악이제 콘솔을 통해 fop.bat를 실행한다면
xsl:value-of
将提供12345
.