Как создать PDF-файл из XML на Java?
В настоящий момент я создаю XML-файл на 9X_xsltproc Java и отображаю его на странице JSP, преобразовывая 9X_xsltprocessor его с помощью XSL / XSLT. Теперь мне нужно 9X_xml-transform взять этот XML-файл и отобразить ту же информацию 9X_openjdk в PDF-файле. Есть ли способ сделать это, используя 9X_oraclejdk какой-нибудь файл XSL?
Я видел библиотеку 9X_itextpdf iText Java-PDF, но не могу найти способ использовать 9X_pdf ее с XML и таблицей стилей.
Мы будем благодарны 9X_itext за любую помощь. Заранее спасибо!
- Теперь есть iText® XMLWorker, реал ...
Ответ #1
Ответ на вопрос: Как создать PDF-файл из XML на Java?
A - Объяснение
Для создания выходных данных в формате pdf следует 9X_xml-transform использовать структуру Apache FOP. Просто вы предоставляете 9X_xml-transform данные в формате xml и визуализируете страницу 9X_xml-transform с помощью файла xsl-fo и указываете такие параметры, как 9X_openjdk margin, макет страницы. в этом файле xsl-fo.
Я представлю простую демонстрацию. Я 9X_xslt использую инструмент сборки maven для сбора необходимых 9X_xslt файлов jar. Обратите внимание, что в конце 9X_itextpdf страницы есть графика svg, встроенная в 9X_openjdk pdf. Я также хочу продемонстрировать, что 9X_oraclejdk вы можете встраивать SVG-графику в PDF-файл.
B - Пример входных данных XML
User Bill Data Thursday December 9 2016 00:04:29 John Doe 34239 123AD329248 17.84 Michael Doe 54823 942KFDSCW322 34.50 Jane Brown 66742 ABDD324KKD8 69.36
C - Шаблон XSL-FO
Bill Id: , Date: XXX COMPANY Page of MONTHLY BILL REPORT Full Name Postal Code National ID Payment
D - Структура каталога проекта
E - файл POM
4.0.0 com.levent.fopdemo apache-fop-demo jar 1.0-SNAPSHOT apache-fop-demo http://maven.apache.org 2.1 org.apache.xmlgraphics fop ${fop.version} Apache Fop Demo org.apache.maven.plugins maven-compiler-plugin 3.5.1
1.8
F - Демо-код: PdfGenerationDemo.java
package com.levent.fopdemo; import java.io.File; import java.io.IOException; import java.io.OutputStream; import javax.xml.transform.Result; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.stream.StreamSource; import org.apache.fop.apps.FOPException; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.MimeConstants; public class PdfGenerationDemo { public static final String RESOURCES_DIR; public static final String OUTPUT_DIR; static { RESOURCES_DIR = "src//main//resources//"; OUTPUT_DIR = "src//main//resources//output//"; } public static void main( String[] args ) { try { convertToPDF(); } catch (FOPException | IOException | TransformerException e) { e.printStackTrace(); } } public static void convertToPDF() throws IOException, FOPException, TransformerException { // the XSL FO file File xsltFile = new File(RESOURCES_DIR + "//template.xsl"); // the XML file which provides the input StreamSource xmlSource = new StreamSource(new File(RESOURCES_DIR + "//data.xml")); // create an instance of fop factory FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI()); // a user agent is needed for transformation FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); // Setup output OutputStream out; out = new java.io.FileOutputStream(OUTPUT_DIR + "//output.pdf"); try { // Construct fop with desired output format Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); // Setup XSLT TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(new StreamSource(xsltFile)); // Resulting SAX events (the generated FO) must be piped through to // FOP Result res = new SAXResult(fop.getDefaultHandler()); // Start XSLT transformation and FOP processing // That's where the XML is first transformed to XSL-FO and then // PDF is created transformer.transform(xmlSource, res); } finally { out.close(); } } }
G - Пример вывода: output.pdf
- Интересно! Но мне нужно добавить `compile group: 'xml-apis', name: 'xml-apis', version: '1.4.01' в мою за ...
Ответ #2
Ответ на вопрос: Как создать PDF-файл из XML на Java?
Вы можете использовать объекты форматирования 9X_xsltprocessor XSL. Вот несколько хороших статей о том, как 9X_xslt это сделать:
- http://www.xml.com/pub/a/2001/01/17/xsl-fo/index.html
- http://www.xml.com/pub/a/2001/01/24/xsl-fo/index.html?page=1
- http://www.javaworld.com/javaworld/jw-04-2006/jw-0410-html.html
Ответ #3
Ответ на вопрос: Как создать PDF-файл из XML на Java?
Вы также можете проверить проект Apache 9X_jre FOP here
Ответ #4
Ответ на вопрос: Как создать PDF-файл из XML на Java?
BIRT имеет графический интерфейс для Eclipse, который 9X_itextpdf позволяет вам определять PDF из XML, DB, CSV 9X_openjdk и т. д.
Ответ #5
Ответ на вопрос: Как создать PDF-файл из XML на Java?
Возможно, вы захотите взглянуть на существующие 9X_jre библиотеки XSL-FO, которые могут создавать 9X_xsl PDF-файлы в качестве преобразования. Попробую 9X_xslt найти ссылку.
Ответ #6
Ответ на вопрос: Как создать PDF-файл из XML на Java?
Попробуйте проект xhtmlrenderer. См. Статью «Generating PDFs for Fun and Profit with Flying Saucer and iText».
9X_jdk
Ответ #7
Ответ на вопрос: Как создать PDF-файл из XML на Java?
Вы можете применить XSL-Fo к своему XML 9X_xsltransform и преобразовать его с помощью преобразователя 9X_itext Java:
File xmlfile = new File(baseDir, xml); File xsltfile = new File(baseDir, xsl); File pdffile = new File(outDir, "ResultXMLPDF.pdf"); FopFactory fopFactory = FopFactory.newInstance(); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); OutputStream out = new java.io.FileOutputStream(pdffile); out = new java.io.BufferedOutputStream(out); try { Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); // Setup XSLT TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(new StreamSource(xsltfile)); transformer.setParameter("versionParam", "1.0"); Source src = new StreamSource(xmlfile); Result res = new SAXResult(fop.getDefaultHandler()); transformer.transform(src, res); } finally { out.close(); } System.out.println("Success!");
-
4
-
3
-
6
-
5
-
4
-
3
-
5
-
3
-
1
-
2
-
7
-
2
-
4
-
5
-
2
-
4
-
2
-
2
-
1
-
2
-
1
-
3
-
1
-
2
-
1
-
1
-
5
-
5
-
3
-
7
-
5
-
3
-
5
-
3
-
4
-
5
-
2
-
2
-
1
-
2
-
4
-
4
-
2
-
1
-
1
-
1
-
4
-
3
-
4
-
1