Как создать 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
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 это сделать:
Ответ #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