Мы планируем сгенерировать PDF-файл в альбомном режиме, передав html-текст в качестве входных данных. Кроме того, PDF-файл создается в альбомном режиме, однако контент в портретном режиме. Ниже приведены шаги, которые мы используем для выполнения вышеуказанного требования.
1) Получите xml-контент из исходной системы.
2) Используйте xsl для генерации вывода html из xml.
3) Передайте вывод html в качестве входных данных в java-класс pdf, в дальнейшем класс будет генерировать pdf-файл в ландшафтном режиме.
образец XML-файла: http://www.filedropper.com/resettsample
образец файла xsl: http://www.filedropper.com/resettcopy
код Java
package testproject; import java.io.File; import java.io.FileOutputStream; import java.io.StringReader; import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.Date; import javax.xml.transform.Result; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.RectangleReadOnly; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; public class PDFTest { public static void main(String[] args) { try { new PDFTest().PDFCreateRequest(); } catch (Exception ex) { ex.printStackTrace(); } } public static void PDFCreateRequest() throws Exception { StringWriter stringWriter = null; Result result = null; TransformerFactory tFactory = null; Transformer transformer = null; String strXMLFile = null; String strXSLFile = null; String strHTMLString = null; String strFeedFolderPath = null; String strPDFFileName = null; String strPDFFileNameWithExtension = null; String strPDFFile = null; Document document = null; PdfWriter pdfWriter = null; strXMLFile = "C:\\RESETT_sample.xml"; String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date()); strXSLFile = "C:\\RESETT_Copy.xsl"; stringWriter = new StringWriter(); result = new StreamResult(stringWriter); tFactory = TransformerFactory.newInstance(); transformer = tFactory.newTransformer(new StreamSource(strXSLFile)); transformer.transform(new StreamSource(strXMLFile), result); strHTMLString = stringWriter.toString(); System.out.println("###### [HTML output " + strHTMLString); strPDFFileName = "RESETT_" + timeStamp; strFeedFolderPath = "C:\\pdfdocuments"; strPDFFileNameWithExtension = strPDFFileName + ".pdf"; strPDFFile = strFeedFolderPath + File.separator + strPDFFileNameWithExtension; // This is for PDF Landscape output document = new Document(new RectangleReadOnly(842, 595), 10, 10, 75, 20); // This is for PDF Portrait output document = new Document(PageSize.A4, 10, 10, 75, 20); pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(strPDFFile)); document.open(); XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, document, new StringReader(strHTMLString)); document.close(); } }
Приветствуются любые предложения о том, как достичь требуемого результата.
Спасибо Сандип