我需要将HTML页面的一部分和java中的一部分数据转换为单个PDF进行生产。如何实现?
例如:我有一个包含图像和数据库中的一些数据的页面。从这两个可用数据中,我想创建一个PDF文档。最佳解决方案是什么 您可以尝试从视差生成jsPDF,生成PDF非常简单我需要将HTML页面的一部分和java中的一部分数据转换为单个PDF进行生产。如何实现?,java,html,pdf,pdf-generation,Java,Html,Pdf,Pdf Generation,例如:我有一个包含图像和数据库中的一些数据的页面。从这两个可用数据中,我想创建一个PDF文档。最佳解决方案是什么 您可以尝试从视差生成jsPDF,生成PDF非常简单 您可以尝试使用iText 7,我们可以在其中定义页眉、页脚、图像、css文件等选项 下面是Itext中提供的示例代码 import com.itextpdf.html2pdf.ConverterProperties; import com.itextpdf.html2pdf.HtmlConverter; import com.ite
您可以尝试使用iText 7,我们可以在其中定义页眉、页脚、图像、css文件等选项 下面是Itext中提供的示例代码
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.licensekey.LicenseKey;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class pdfHTMLHeaderAndFooterExample {
public static final String sourceFolder = "src/test/resources/pdfHTML/";
public static final String destinationFolder = "target/output/pdfHTML/";
public static final String LICENSE = "src/test/resources/pdfHTML/itextkey_trial.xml";
public static final String[] files = {"ipsum"};
public static void main(String[] args) throws IOException, InterruptedException {
LicenseKey.loadLicenseFile(LICENSE);
for (String name : files) {
String htmlSource = sourceFolder + name + ".html";
String resourceFolder = sourceFolder + name + "/";
String pdfDest = destinationFolder + name + ".pdf";
File file = new File(pdfDest);
System.out.println("Parsing: " + htmlSource);
file.getParentFile().mkdirs();
new pdfHTMLHeaderAndFooterExample().parseWithHeaderAndFooter(htmlSource, pdfDest, resourceFolder);
}
}
public void parseWithHeaderAndFooter(String htmlSource, String pdfDest, String resoureLoc) throws IOException, InterruptedException {
File pdf = new File(pdfDest);
pdf.getParentFile().mkdirs();
//Create Document
PdfWriter writer= new PdfWriter(pdfDest);
PdfDocument pdfDocument = new PdfDocument(writer);
//Create event-handlers
String header = "pdfHtml Header and footer example using page-events";
Header headerHandler = new Header(header);
PageXofY footerHandler = new PageXofY(pdfDocument);
//Assign event-handlers
pdfDocument.addEventHandler(PdfDocumentEvent.START_PAGE,headerHandler);
pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE,footerHandler);
//Convert
ConverterProperties converterProperties = new ConverterProperties().setBaseUri(resoureLoc);
HtmlConverter.convertToDocument(new FileInputStream(htmlSource), pdfDocument, converterProperties);
//Write the total number of pages to the placeholder
footerHandler.writeTotal(pdfDocument);
pdfDocument.close();
}
//Header event handler
protected class Header implements IEventHandler {
String header;
public Header(String header) {
this.header = header;
}
@Override
public void handleEvent(Event event) {
//Retrieve document and
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfDocument pdf = docEvent.getDocument();
PdfPage page = docEvent.getPage();
Rectangle pageSize = page.getPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(
page.getLastContentStream(), page.getResources(), pdf);
Canvas canvas = new Canvas(pdfCanvas, pdf, pageSize);
canvas.setFontSize(18f);
//Write text at position
canvas.showTextAligned(header,
pageSize.getWidth() / 2,
pageSize.getTop() - 30, TextAlignment.CENTER);
}
}
//page X of Y
protected class PageXofY implements IEventHandler {
protected PdfFormXObject placeholder;
protected float side = 20;
protected float x = 300;
protected float y = 25;
protected float space = 4.5f;
protected float descent = 3;
public PageXofY(PdfDocument pdf) {
placeholder =
new PdfFormXObject(new Rectangle(0, 0, side, side));
}
@Override
public void handleEvent(Event event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfDocument pdf = docEvent.getDocument();
PdfPage page = docEvent.getPage();
int pageNumber = pdf.getPageNumber(page);
Rectangle pageSize = page.getPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(
page.getLastContentStream(), page.getResources(), pdf);
Canvas canvas = new Canvas(pdfCanvas, pdf, pageSize);
Paragraph p = new Paragraph()
.add("Page ").add(String.valueOf(pageNumber)).add(" of");
canvas.showTextAligned(p, x, y, TextAlignment.RIGHT);
pdfCanvas.addXObject(placeholder, x + space, y - descent);
pdfCanvas.release();
}
public void writeTotal(PdfDocument pdf) {
Canvas canvas = new Canvas(placeholder, pdf);
canvas.showTextAligned(String.valueOf(pdf.getNumberOfPages()),
0, descent, TextAlignment.LEFT);
}
}
}
谢谢。但我正在用Java搜索解决方案。我过去使用过com.itextpdf。@Wesleydekeirsmaker谢谢。我在分析它。这实际上是在要求我们推荐使用库,因为该功能不是核心Java类的一部分。这类问题与堆栈溢出无关。