gpt4 book ai didi

java - 如何使用 SVG 创建具有以下 HTML 字符串的 PDF 文档?

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:51 27 4
gpt4 key购买 nike

我正在尝试将 HTML 字符串转换为 PDF 文档。但只有文本部分被打印到 PDF 而不是 SVG。这是我试过的。

  1. 将 HTML 字符串转换为 org.w3c.dom.Document
  2. 使用 Flying Saucer 生成 pdf
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xhtmlrenderer.layout.SharedContext;
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.lowagie.text.DocumentException;
    public class PDFCreator {
public static void main(String[] args) {
PDFCreator pdfCreator = new PDFCreator();
String html = "<!DOCTYPE html> <html> <head> <meta name=\"generator\" content=\"HTML Tidy for Java (vers. 2009-12-01), see jtidy.sourceforge.net\" /> <style type=\"text/css\"> #svg {display:block;}</style> <title>Sample Document</title> </head> <body> <h1>My First HTML Document with SVG</h1> <div id=\"svg\"> <svg width=\"100\" height=\"100\"> <circle cx=\"50\" cy=\"50\" r=\"40\" stroke=\"green\" stroke-width=\"4\" fill=\"yellow\" /></svg></div> </body></html>";
Document document = pdfCreator.createDocument(html);
pdfCreator.create(document);
}

public void create(Document document) {
try {
String outputFile = "D:\\htmlWithSVG.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(document, null);
ChainingReplacedElementFactory chainingReplacedElementFactory = new ChainingReplacedElementFactory();
chainingReplacedElementFactory.addReplacedElementFactory(new SVGReplacedElementFactory());
SharedContext sharedContext = renderer.getSharedContext();
sharedContext.setReplacedElementFactory(chainingReplacedElementFactory);
renderer.layout();
renderer.createPDF(os);
os.close();
} catch (DocumentException ex) {
ex.printStackTrace();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}

public Document createDocument(String xml) {
InputSource inputSource = new InputSource(new StringReader(xml));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = null;
Document document = null;
try {
builder = factory.newDocumentBuilder();
document = builder.parse(inputSource);
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
} catch (SAXException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
return document;
}}

我还查看了以下教程,该教程中使用了类 ChainingReplacedElementFactorySVGReplacedElementFactory

http://www.samuelrossille.com/home/render-html-with-svg-to-pdf-with-flying-saucer.html

最佳答案

您可以尝试使用第三方工具将您的 html 文件转换为 pdf 格式。它主要处理所有事情。

wkhtmltopdf 是一种很好的查看方式。

How to use and improve wakhtmltopdf performance?

这是我发布的链接。我在 C# 中尝试过

关于java - 如何使用 SVG 创建具有以下 HTML 字符串的 PDF 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24491917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com