有关Java导出pdf的功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关Java导出pdf的功能相关的知识,希望对你有一定的参考价值。

我也在网上搜了很多资料,大多数都是利用itext,自己也照着写了。代码差不多是一模一样的。但是我导出的PDF文件中貌似只有中文、英文及符号。没法子写入数字。本来我写的内容是数字跟文本混合的。最后出来的却只有文本。比较纠结。附上截图以及自己采纳的相关资料。画红框的地方表示的就是文本混合写的。但是最后却只剩下了文本,木有数字了

转pdf时,有2种解决方法 

1 itext ,这个我就不说了 ,代码很多,我想你也实践过。

2 通过openoffice转换为pdf 。这个比较繁琐,要安装一系列的组件,网络上也有类似的文章,前段时间我开发仿百度文库的功能,就是将普通的办公文档在网页显示,办公文档-openoffice(pdf)-swftools(swf)-flexpaper,就是这样的流程,如果需要,我将所用到的组件发你,代码就不能给你了(嘿嘿)。操作excel 或word 还是比较容易的,将生成好的excel或word转换为pdf非常容易,基本上是原样输出

组件列表

参考技术A 可以尝试下用jasperreport,不过就是需要自己画模板,其他的都还好,java代码也不多,画好模板后,会生成一个xml的文件,java代码中,加载这个文件,然后执行导出pdf,word都可以.调用它相应的方法 参考技术B 建议你使用pageoffice,应该能帮到你的

java利用itext导出pdf

项目中有一功能是导出历史记录,可以导出pdf和excel,这里先说导出pdf。在网上查可以用那些方式导出pdf,用itext比较多广泛。

导出pdf可以使用两种方式,一是可以根据已有的pdf模板,进行生成文档。二是直接用代码生成pdf

一、使用模板生成pdf

1、添加依赖

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>

</dependency>

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>

2、创建word,创建需要的样式,例如,保存为pdf格式,

技术分享图片

3、使用Adobe Acrobat 打开,打开内容编辑,选择编辑域,编辑域的名称与代码的数据属性名对应。

技术分享图片

 

4、java代码

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

/**
* @Title: CreatePdf.java
* @Description: TODO
* @author zhangjunhong
* @date 2018年10月22日
*/
public class CreatePdf {
public static void fillTemplate() throws Exception {
//读取的模板
String templatePath = "D:/mypdf1.pdf";
//生成的pdf存储的路径
String targetPath = "D:/test1.pdf";
PdfReader reader;
FileOutputStream outputStream;
ByteArrayOutputStream bos;
PdfStamper stamper;
reader = new PdfReader(templatePath);
outputStream = new FileOutputStream(targetPath);
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
//取得模板表单对应的域
AcroFields from = stamper.getAcroFields();
String[] strings = { "12222", "zahang", "男", "1992-09-12" };
int i = 0;
Iterator<String> iterator = from.getFields().keySet().iterator();
while (iterator.hasNext()) {
String name = iterator.next().toString();
System.err.println(name);
from.setField(name, strings[i++]);
}
stamper.setFormFlattening(true);
stamper.close();
Document document = new Document();
PdfCopy copy = new PdfCopy(document, outputStream);
document.open();
PdfImportedPage importedPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importedPage);
document.close();
}
public static void main(String[] args) throws Exception{
fillTemplate();
}

}

5、结果

技术分享图片

二、根据数据生成pdf并导出,这个好像挺简单的,直接代码一波,看注释,也可以生成表格之类的

@RequestMapping("/export/pdf")
public void exPdf(HttpServletResponse response){
OutputStream os=null;
try {
// 指定解析器
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
String filename = "大面积延误历史记录详情.pdf";
response.setContentType("application/pdf");
response.setHeader("Content-Disposition",
"attachment;fileName=" + URLEncoder.encode(filename, "UTF-8"));
os = new BufferedOutputStream(response.getOutputStream());
//生成pdf
Document document=new Document();
PdfWriter writer=PdfWriter.getInstance(document, os);
// 页面大小
Rectangle rectangle = new Rectangle(PageSize.A4);
// 页面背景颜色
rectangle.setBackgroundColor(BaseColor.WHITE);
document.setPageSize(rectangle);
// 页边距 左,右,上,下
document.setMargins(20, 20, 20, 20);
document.open();
//中文字体 ----不然中文会乱码
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
//设置字体
Font font = new Font(bf, 14, Font.BOLD, BaseColor.BLACK);
Paragraph p=new Paragraph("设置了字体样式的标题哈哈哈哈哈今天比较闲嘤嘤嘤", font);
document.add(p);
document.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}

结果:访问路径http://127.0.0.1:8080/export/pdf,下载下来的pdf文档技术分享图片

 

 

还有很多对pdf的操作,如添加page,表格等,可查看itext的官方文档,

或者看这个博客:https://blog.csdn.net/weixin_36380516/article/details/76984283

最后是不是贴上我花了几天写的pdf导出,这个技术是简单了,尼玛项目业务逻辑贼复杂。周五任务完成截止日期,昨天写完啦,等前端对接接口,,就写写博客,算了,先不贴代码。我再整理整理

 































































































以上是关于有关Java导出pdf的功能的主要内容,如果未能解决你的问题,请参考以下文章

java 有关word,excel,pdf转换成html 有几种方式

Reporting Services 中的 PDF 导出问题

将道场图表导出为 pdf 或其他一些矢量格式

java spring MVC 用poi做Excel导入碰到一个问题,求大神指教,有关下拉框的问题

如何使用 VBA 将 pdf 保存/导出到某个文件夹

java利用itext导出pdf