Hello,
My code looks like this...
public static synchronized DocResult generateImpl(String outputFormat,
Document document, Node dataNode, String pageCount) {
log.debug("generateImpl: start");
if (dataNode == null) {
return null;
}
DocResult docResult = null;
Source xslfo = generateXslFo(document);
try {
// configure fopFactory as desired with the needed resolvers
ResourceResolver defaultResolver =
ResourceResolverFactory.createDefaultResourceResolver();
SchemeAwareResourceResolverBuilder resolverBuilder =
ResourceResolverFactory.createSchemeAwareResourceResolverBuilder(defaultResolver);
resolverBuilder.registerResourceResolverForScheme("image", new
ImageResolver());
resolverBuilder.registerResourceResolverForScheme("measurementImage",
new MeasurementImageResolver());
ResourceResolver resolver = resolverBuilder.build();
FopFactory fopFactory = new FopFactoryBuilder(new
File(".").toURI(), resolver).build();
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
if(MIME_TIFF.equalsIgnoreCase(outputFormat)) {
// Give TIFF a high compression ratio
TIFFRenderer renderer = new TIFFRenderer(foUserAgent);
BitmapRenderingSettings renderingSettings =
renderer.getRenderingSettings();
renderingSettings.setCompressionMethod("LZW"); // LZW,
JPEG, PACKBITS
foUserAgent.setRendererOverride(renderer);
}
// configure foUserAgent as desired
foUserAgent.setTargetResolution(document.getPreviewDPI()); //
only used for bitmap targets and not for PDF targets
ByteArrayOutputStream out = new ByteArrayOutputStream();
// Construct fop with desired output format
Fop fop = fopFactory.newFop(outputFormat, foUserAgent, out);
// Setup XSLT
TransformerFactory factory = TransformerFactory.newInstance();
factory.setErrorListener(new TransformerErrorListener());
Transformer transformer = factory.newTransformer(xslfo);
if (transformer == null) return null;
transformer.setErrorListener(new TransformerErrorListener()); //
log transformer errors / warnings to our log4j logger
transformer.setParameter("versionParam", "2.0"); // Set the
value of a <param> in the stylesheet
LocalDateTime now = DateTimeHelper.getNow();
transformer.setParameter("currentDate",
DateTimeHelper.localDateTimeToString(Format.DATE_FORMAT_2, now));
transformer.setParameter("currentTime",
DateTimeHelper.localDateTimeToString(Format.TIME_FORMAT_1, now));
transformer.setParameter("pageCount", pageCount);
// Use size and margins from the template or from the document?
Document templateDocument = document.getTemplateDocument();
Document masterDocument = document;
if (templateDocument != null) {
masterDocument = templateDocument;
}
transformer.setParameter("pageHeight", masterDocument.getHeight());
transformer.setParameter("pageWidth", masterDocument.getWidth());
transformer.setParameter("margin-top", masterDocument.getMarginTop());
transformer.setParameter("margin-bottom",
masterDocument.getMarginBottom());
transformer.setParameter("margin-left", masterDocument.getMarginLeft());
transformer.setParameter("margin-right", masterDocument.getMarginRight());
// Setup input for XSLT transformation (FOP needs SAX!)
String dataString = XMLUtils.w3cNodeToString(dataNode);
SAXBuilder saxBuilder = new SAXBuilder();
saxBuilder.setErrorHandler(new SaxParserErrorListener());
org.jdom2.Document dataDocument = saxBuilder.build(new
StringReader(dataString));
DOMSource src = new DOMSource((new DOMOutputter()).output(dataDocument));
// Resulting SAX events (the generated FO) must be piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
// Start XSLT transformation and FOP processing
transformer.transform(src, res);
docResult = new DocResult();
docResult.setFop(fop);
docResult.setData(out.toByteArray());
} catch (Exception e) {
log.error("Problem generating PDF file (probably an error in one
of the XML strings)", e);
return null;
}
log.debug("generateImpl: end");
return docResult;
}
Not directly useable but might help.
MAG,
Milo
Op di 15 okt. 2019 om 17:44 schreef Simon Steiner <
[email protected]>:
> Hi,
>
>
>
> There maybe some help in:
>
> https://issues.apache.org/jira/browse/FOP-2480
>
> https://issues.apache.org/jira/browse/FOP-2495
>
>
>
> Thanks
>
>
>
> *From:* Luis Panadero Guardeño <[email protected]>
> *Sent:* 15 October 2019 16:29
> *To:* [email protected]
> *Cc:* Luis Panadero Guardeño <[email protected]>
> *Subject:* Re: Help to upgrade code from FOP 1.1 to FOP 2.2
>
>
>
> And how I assign a URIResolver to it ?
>
> El 15/10/19 a las 15:43, Simon Steiner escribió:
>
> Hi,
>
>
>
> You can try using on FOP 2.x
>
> FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
>
>
>
> Thanks
>
>
>
> *From:* Luis Panadero Guardeño <[email protected]>
> <[email protected]>
> *Sent:* 15 October 2019 08:52
> *To:* [email protected]
> *Cc:* Luis Panadero Guardeño <[email protected]>
> <[email protected]>
> *Subject:* Help to upgrade code from FOP 1.1 to FOP 2.2
>
>
>
> Hi,
>
> I'm trying to upgrade some old code to FOP 2.2. After seeing the upgrade
> examples on the web, I don't have clue how upgrade this code. This os the
> old code that works perfectly on FOP 1.1 :
>
> public static Result createXmlResult(OutputStream output, URIResolver
> uriResolver)
> throws FOPException
> {
> FopFactory fopFactory = FopFactory.newInstance();
> FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
> foUserAgent.setURIResolver(uriResolver);
>
> Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent,
> output);
> return new SAXResult(fop.getDefaultHandler());
> }
>
> ¿Any suggestion ?
>
>
>
> --
>
> *Luis Panadero Guardeño*
> Departamento de Informática
> [email protected]
>
> [image: DIGIBÍS S.L.]
>
> DIGIBÍS S.L.
>
>
>
> C/ Alenza, 4, 5ª planta.
> 28003 Madrid
> Tf. 91 432 08 88 . Fax 91 432 11 13
>
> http://www.digibis.com
>
> Certificado ISO 9001.
> No imprimir si no es necesario. Protejamos el Medio Ambiente
>
> *En cumplimiento de la LOPD y la LSSI, le informamos de que sus datos
> personales son incorporados a un fichero, titularidad de DIGIBÍS, S.L., con
> el fin de ofrecerle información sobre servicios que pueden ser de su
> interés. Podrá ejercitar sus derechos ARCO (de acceso, rectificación,
> cancelación y oposición) mediante un escrito dirigido a **[email protected]
> <[email protected]>*
> * , con copia del DNI o documento identificativo sustitutorio.En caso de
> querer darse de baja pinche aquí
> <[email protected]?subject=DAR%20DE%20BAJA>. *
>
>
>
> --
>
> *Luis Panadero Guardeño*
> Departamento de Informática
> [email protected]
>
> [image: DIGIBÍS S.L.]
>
> DIGIBÍS S.L.
>
>
>
> C/ Alenza, 4, 5ª planta.
> 28003 Madrid
> Tf. 91 432 08 88 . Fax 91 432 11 13
>
> http://www.digibis.com
>
> Certificado ISO 9001.
> No imprimir si no es necesario. Protejamos el Medio Ambiente
>
>
> *En cumplimiento de la LOPD y la LSSI, le informamos de que sus datos
> personales son incorporados a un fichero, titularidad de DIGIBÍS, S.L., con
> el fin de ofrecerle información sobre servicios que pueden ser de su
> interés. Podrá ejercitar sus derechos ARCO (de acceso, rectificación,
> cancelación y oposición) mediante un escrito dirigido a
> [email protected] <[email protected]> , con copia del DNI o documento
> identificativo sustitutorio.En caso de querer darse de baja pinche aquí
> <[email protected]?subject=DAR%20DE%20BAJA>. *
>
>
>