Giter VIP home page Giter VIP logo

pdf-kit's Introduction

pdf-kit

java根据模板动态生成PDF文件

一、需求说明:

 根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看。

二、解决方案:

  iText+FreeMarker+JFreeChart生成可动态配置的PDF文档
  
  iText有很强大的PDF处理能力,但是样式和排版不好控制,直接写PDF文档,数据的动态渲染很麻烦。
  
  FreeMarker能配置动态的html模板,正好解决了样式、动态渲染和排版问题。
  
  JFreeChart有这方便的画图API,能画出简单的折线、柱状和饼图,基本能满足需要。

三、实现功能:

   1、能动态配置PDF文档内容
   
   2、能动态配置中文字体显示
   
   3、设置自定义的页眉页脚信息
   
   4、能动态生成业务图片
   
   5、完成PDF的分页和图片的嵌入

四、主要代码结构说明:

  1、component包:PDF生成的组件 对外提供的是PDFKit工具类和HeaderFooterBuilder接口, 其中PDFKit负责PDF的生成,HeaderFooterBuilder负责自定义页眉页脚信息。
  
  2、builder包:负责PDF模板之外的额外信息填写,这里主要是页眉页脚的定制。
  
  3、chart包:JFreeChart的画图工具包,目前只有一个线形图。
  
  4、test包:测试工具类
  
  5、util包:FreeMarker等工具类。  

pdf-kit's People

Contributors

superad avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pdf-kit's Issues

模板里怎么修改成其他字体呢?

模板里怎么修改成其他字体呢?在字体文件里也没看到pingfang的字体,但是就能正常显示,现在改成其他字体都不显示,该怎么办呢?

字体加粗问题

在网上找了查了挺久的 没看到字体怎么加粗。
css写加粗不起效果,您知道怎么做么 可以给一点提示么

com.tuniu.car.rdc.pdf.exception.PDFException: 字体初始化失败

把作者的项目用到自己的项目中,使用总是出字体初始化失败,但是目录下是有这个字体的。这个字体就是作者项目的字体, bf = BaseFont.createFont(fontPath,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);,代码走到这一行就抛异常

动态表格断页

请问下好比我一个表格是动态的生成的,某个单元格的文本内容过长,会出现跳页问题,怎么解决?
image

html模板引入css文件报空指针异常

html模板文件使用 <link rel="stylesheet" href="test.css"> 引入 test.css 文件,报空指针异常,异常信息如下,有空的话劳烦大神帮我看一下,难道不支持引入css文件,只支持内嵌css样式吗?
`14:26:24.917 [main] DEBUG freemarker.cache - Couldn't find template in cache for "enterprise.ftl"("zh_CN", UTF-8, parsed); will try to load it.
14:26:24.920 [main] DEBUG freemarker.cache - TemplateLoader.findTemplateSource("enterprise_zh_CN.ftl"): Not found
14:26:24.921 [main] DEBUG freemarker.cache - TemplateLoader.findTemplateSource("enterprise_zh.ftl"): Not found
14:26:24.921 [main] DEBUG freemarker.cache - TemplateLoader.findTemplateSource("enterprise.ftl"): Found
14:26:24.922 [main] DEBUG freemarker.cache - Loading template for "enterprise.ftl"("zh_CN", UTF-8, parsed) from "C:\software\ideaCode\bidi\pdf-kit\src\test\resources\templates\enterprise.ftl"
java.lang.NullPointerException
at com.itextpdf.text.pdf.PdfWriter.addSimple(PdfWriter.java:2234)
at com.itextpdf.text.pdf.PdfContentByte.setFontAndSize(PdfContentByte.java:1637)
at pdf.kit.component.builder.PDFBuilder.onCloseDocument(PDFBuilder.java:120)
at com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.java:838)
at com.itextpdf.text.Document.close(Document.java:416)
at pdf.kit.component.PDFKit.convertToPDF(PDFKit.java:117)
at pdf.kit.component.PDFKit.exportToFile(PDFKit.java:52)
at pdf.kit.ScatterPlotChartTest.testCreatePdf2(ScatterPlotChartTest.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
pdf.kit.exception.PDFException: PDF export to File fail
at pdf.kit.component.PDFKit.exportToFile(PDFKit.java:55)
at pdf.kit.ScatterPlotChartTest.testCreatePdf2(ScatterPlotChartTest.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.NullPointerException
at com.itextpdf.text.pdf.PdfWriter.addSimple(PdfWriter.java:2234)
at com.itextpdf.text.pdf.PdfContentByte.setFontAndSize(PdfContentByte.java:1637)
at pdf.kit.component.builder.PDFBuilder.onCloseDocument(PDFBuilder.java:120)
at com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.java:838)
at com.itextpdf.text.Document.close(Document.java:416)
at pdf.kit.component.PDFKit.convertToPDF(PDFKit.java:117)
at pdf.kit.component.PDFKit.exportToFile(PDFKit.java:52)
... 23 more

Process finished with exit code 0
`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.