css - 使用 IText 将 XHTML 转换为 PDF - 需要专家

标签 css itext html-to-pdf

我正在使用 iText 将 XHTML 转换为 PDF。我使用 XLSX 到 HTML 转换器创建了 XHTML 并清除了。 Here你可以看到 HTML 页面。关键是我无法将其转换为 A4 页面上的等效 PDF。我尝试了最近和较旧的 iText 库,使用了 ITextRenderer、XMLWorkerHelper 和 HTMLWorker,但没有人正确创建 PDF。按照我的尝试。

外部 CSS 示例(HTML 和 CSS 是路径):

com.itextpdf.text.Document document = new com.itextpdf.text.Document(PageSize.A4);
          PdfWriter pdfWriter = PdfWriter.getInstance
               (document, new FileOutputStream(PDF));
          document.open();
          document.addAuthor("Real Gagnon");
          document.addCreator("Real's HowTo");
          document.addSubject("Thanks for your support");
          document.addCreationDate();
          document.addTitle("Please read this");

          XMLWorkerHelper worker = XMLWorkerHelper.getInstance();

          String str = readHtml();
          worker.parseXHtml(pdfWriter, document,  new FileInputStream(HTML), new FileInputStream(CSS));
          document.close();

使用 ITextRenderer 和内部 CSS 的示例,但由于它不考虑字体标签,我以编程方式添加了字体:

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = builder.parse(new ByteArrayInputStream(readHtml().getBytes("UTF-8")));

        ITextRenderer renderer = new ITextRenderer();
        File tmpFontFile = new File(
                "C:\\Android\\workspace\\GestioneCommesse\\WebContent\\resources\\font\\arial_narrow.ttf");
        renderer.getFontResolver().addFont(tmpFontFile.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        renderer.setDocument(doc, null);

        FileOutputStream os = new FileOutputStream(PDF);
        Transformer tf = TransformerFactory.newInstance().newTransformer();
        tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        tf.setOutputProperty(OutputKeys.INDENT, "yes");
        tf.transform(new DOMSource(doc), new StreamResult(os));
        os.close();

        File file = new File("c:\\temp.pdf");
        file.createNewFile();
        OutputStream os2 = new FileOutputStream(file);
        renderer.layout();
        renderer.createPDF(os2);
        os.close();

在这里你可以看到我得到的两个结果。在一个 pdf 中,整个 css 都丢失了,而在另一个 pdf 中,我无法更改宽度和字体样式:

Example1已使用 XmlWorkerHelper 和 Example2 创建使用 iTextRenderer

THIS示例我得到结果 2

最佳答案

我正在做一个元素,我也遇到了字体问题。我在 html 页面上用画笔脚本字体设计了一个 div,当我创建一个 PDF 时,该字体没有显示在 PDF 上。我注意到通过将引号从单引号更改为双引号对我有用。

这是我之前的:

< div style="font-family : 'Brush Script MT';" >< /div >

(注意单引号和双引号的位置,这是行不通的) 然后我尝试了

< div style='font-family : "Brush Script MT";'>

(起初它自己并没有工作)

但后来我使用 FontFactory 注册了字体并给它一个同名的别名。

FontFactory.RegisterDirectories();
var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\BRUSHSCI.TTF";
FontFactory.Register(fontPath, "Brush Script MT");

希望对你有帮助

关于css - 使用 IText 将 XHTML 转换为 PDF - 需要专家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23838448/

相关文章:

java - 如何使用 iText List 将具有不同权重的文本添加到单个 ListItem

python-2.7 - PDF 格式的 scikit 学习文档

css - 具有对比父级的粘性 css 效果

java - 将 PdfDiv 添加到段落

java - 不明白为什么我收到错误 : Could not find or load main class from console

ios - UIPrintPageRenderer/HTML 到 PDF 问题 : extra blank space added in rendered PDF

android - Kotlin:以编程方式编辑pdf或html

javascript - 使用 jQuery 延迟加载 div?

css - 在 Wordpress 中添加样式表

css - 如何使 div 与父级高度相同(显示为表格单元格)