HTML to PDF / DOCX / RTF Java converter library › Forums › PD4ML v3 Archived Forums (Read Only) › Troubleshooting › Convert XML to PDF with SSL resources
- This topic has 3 replies, 2 voices, and was last updated Jun 18, 2015
15:56:01 by ally_lly.
-
AuthorPosts
-
June 16, 2015 at 19:03#27025
We have an application using PD4ML to transform XML and export into PDF. There are issues when it requires SSL resources.
1. Some XMLs refers to remote SSL xsl file, for example:
2. Some xsl file refers to remote SSL image files, for example:
Here are some of our codes to generate PDF:
public void generatePdf(InputStream sourceStream, OutputStream targetStream, String headerText, boolean forcePrint) throws Exception {
PD4ML converter = new PD4ML();
if (headerText != null) {
PD4PageMark header = new PD4PageMark();
Font font = header.getFont();
Font boldFont = font.deriveFont(Font.BOLD);
header.setFont(boldFont);
header.setTitleTemplate(headerText);
converter.setPageHeader(header);
}
PD4PageMark footer = new PD4PageMark();
footer.setPageNumberTemplate(“Page $[page] of $[total]”);
footer.setPageNumberAlignment(PD4PageMark.CENTER_ALIGN);
converter.setPageFooter(footer);
converter.setPageSize(PD4Constants.A4);
converter.setPageInsetsMM(new Insets(10, 10, 10, 10));
converter.setHtmlWidth(820);
if (forcePrint) {
MapdynamicParameters = new HashMap ();
dynamicParameters.put(PD4Constants.PD4ML_PRINT_DIALOG_POPUP, “true”);
converter.setDynamicParams(dynamicParameters);
}
converter.render(new InputStreamReader(sourceStream, “UTF-8”), targetStream);
}The code couldn’t get HTTPS xlt file and couldn’t transform XML. Is there a workaround to solve it with PD4ML?
Thank you very much.
June 17, 2015 at 16:26#29761From your problem description the usage scenario is not quite clear. Do you pass XML+XSL reference directly to PD4ML? In the case it should not work: PD4ML accepts as an input format HTML only (well, also SVG). Before a converting to PDF you need to transform the XML to HTML.
For a case it cannot load images/CSS by HTTPS:
PD4ML does not “officially” support HTTPS, however it implements very basic HTTPS resource loader (using the standard JDK classes). For example, WebSphere and Weblogic implement their own versions of HTTPS protocol, and the implementations are not derived from the standard API. That causes ClassCastExceptions on the platforms by attempts to load HTTPS resources.
In order to workaround such issues PD4ML supports so-called custom resource loaders.
pd4ml-html-css-pdf-tips-tricks-f7/a-definition-of-custom-resource-loaders-t40.html
If it is your case, you may implement your own HTTPS loader, utilizes Weblogic SSL classes. I’ve attached our standard SSL loader implementation, which could give you some implementation ideas.
June 18, 2015 at 14:54#29762Thank you for your reply.
The code is from our legacy project. It takes XML file from database and transform it, output is a PDF file. There is a link to remote HTTPS xslt file in XML, and that xslt file contains URLs to remote HTTPS image. If it is a local xslt file, the code works just fine. Could you shed some light? Here is the code with comments:
<br /> /**<br /> * Generates a PDF document from an XML file that requires transformation using an<br /> * XSL stylesheet.<br /> *<br /> * @param sourceStream The source XML document stream.<br /> * @param targetStream The target PDF document stream.<br /> * @param headerText Text to display as a page header in the target PDF.<br /> * @param forcePrint Whether or not to force the print dialog to appear when the PDF is loaded.<br /> *<br /> * @throws Exception If something goes wrong while transforming the XML or generating the PDF.<br /> */<br /> public void generatePdf(InputStream sourceStream, OutputStream targetStream, String headerText, boolean forcePrint) throws Exception {<br /> PD4ML converter = new PD4ML();<br /> if (headerText != null) {<br /> PD4PageMark header = new PD4PageMark();<br /> Font font = header.getFont();<br /> Font boldFont = font.deriveFont(Font.BOLD);<br /> header.setFont(boldFont);<br /> header.setTitleTemplate(headerText);<br /> converter.setPageHeader(header);<br /> }<br /> PD4PageMark footer = new PD4PageMark();<br /> footer.setPageNumberTemplate("Page $[page] of $[total]");<br /> footer.setPageNumberAlignment(PD4PageMark.CENTER_ALIGN);<br /> converter.setPageFooter(footer);<br /> converter.setPageSize(PD4Constants.A4);<br /> converter.setPageInsetsMM(new Insets(10, 10, 10, 10));<br /> converter.setHtmlWidth(820);<br /> if (forcePrint) {<br /> Map<String, String> dynamicParameters = new HashMap<String, String>();<br /> dynamicParameters.put(PD4Constants.PD4ML_PRINT_DIALOG_POPUP, "true");<br /> converter.setDynamicParams(dynamicParameters);<br /> }<br /> converter.render(new InputStreamReader(sourceStream, "UTF-8"), targetStream);<br /> }<br />
June 18, 2015 at 15:56#29760Hmm… In the code PD4ML API assumes, that InputStream sourceStream returns HTML.
There was no PD4ML version, which could implicitly transform XML to HTML. The transformation should be done in advance to PD4ML API call.
If the comment means XHTML under “XML”, the conversion will work, but anyway any XSL references will be ignored.
-
AuthorPosts
The forum ‘Troubleshooting’ is closed to new topics and replies.