-
Notifications
You must be signed in to change notification settings - Fork 0
/
transformer.py
30 lines (25 loc) · 1.22 KB
/
transformer.py
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
from java.io import ByteArrayInputStream, ByteArrayOutputStream, File
from java.lang import System
from java.util import Base64
from javax.xml.transform import TransformerFactory
from javax.xml.transform.sax import SAXResult
from javax.xml.transform.stream import StreamSource
from org.apache.fop.apps import FopFactory, MimeConstants
if "." in localeEnvVar:
localeEnvVar = localeEnvVar[0 : localeEnvVar.index(".")]
if "_" in localeEnvVar:
localeEnvVar = localeEnvVar[0 : localeEnvVar.index("_")]
if localeEnvVar == "C":
localeEnvVar = "en"
fopFactory = FopFactory.newInstance(File(".").toURI())
foUserAgent = fopFactory.newFOUserAgent()
out = ByteArrayOutputStream()
fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out)
factory = TransformerFactory.newInstance()
factory.setURIResolver(lambda href, base: StreamSource(File(path + "/xslt/" + href)))
transformer = factory.newTransformer(StreamSource(File(path + "/xslt/ddi-to-fo.xsl")))
transformer.setParameter("language-code", localeEnvVar)
src = StreamSource(ByteArrayInputStream(Base64.getDecoder().decode(x["base64"])))
saxRes = SAXResult(fop.getDefaultHandler())
transformer.transform(src, saxRes)
res["base64"] = Base64.getEncoder().encodeToString(out.toByteArray())