如何利用iText文档转换为PDF文件

如何利用iText文档转换为PDF文件,第1张

可以使用虚拟打印机来处理:

方法一:使用虚拟打印机pdf factory即可,而且其他格式文件只要是能够打印,选择这个虚拟打印机,都可以做成PDF文件,很简单实用;

方法二:用其他虚拟打印机转成PDF文件。

方法三:使用专门的转换软件,把文件转成PDF文件。

请参考:http://blogcsdnnet/ptzrbin/article/details/43449701

主要原理:

使用 poi 将word转换成 html

使用IText 将html转换成pdf(由于html中所有标签都必须要闭合,才能使用IText,所以这里用jsoup对html进行转换)

缺点: 会有失真问题,另外涉及到中文编码问题

public void GenerateAllParts() {

Document document = new Document();

try {

PdfWritergetInstance(document, new FileOutputStream("d:\\allpdf"));

// 生成字体

BaseFont bfChinese = BaseFontcreateFont("STSongStd-Light", "UniGB-UCS2-H", false);

// 标题字体

Font f30 = new Font(bfChinese, 30, FontNORMAL, ColorBLACK);

// 正文字体

Font f12 = new Font(bfChinese, 12, FontNORMAL, ColorBLACK);

Font f6 = new Font(bfChinese, 6, FontNORMAL, ColorBLACK);

Font f8 = new Font(bfChinese, 8, FontNORMAL, ColorBLACK);

documentopen();

// 标题

documentadd(new Paragraph("报表实例", f30));

// 换行

documentadd(new Chunk("\n\n"));

//

documentadd(

new Paragraph(

new Chunk("报表", f12)

setLocalGoto("table")));

// 换行

documentadd(new Chunk("\n\n"));

documentadd(

new Paragraph(

new Chunk("", f12)

setLocalGoto("image")));

documentadd(new Chunk("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"));

///////////////////////////////////////////////////

// 报表位置

documentadd(new Chunk("报表实例", f12)setLocalDestination("table"));

// 添加table实例

PdfPTable table = new PdfPTable(5);

tablesetWidthPercentage(100);

tablesetHorizontalAlignment(PdfPTableALIGN_LEFT);

PdfPCell cell = new PdfPCell();

cellsetBackgroundColor(new Color(213, 141, 69));

cellsetHorizontalAlignment(PdfPCellALIGN_CENTER);

// 表格标题

cellsetPhrase(new Paragraph("标题一", f8));

tableaddCell(cell);

cellsetPhrase(new Paragraph("标题二", f8));

tableaddCell(cell);

cellsetPhrase(new Paragraph("标题三", f8));

tableaddCell(cell);

cellsetPhrase(new Paragraph("标题四", f8));

tableaddCell(cell);

cellsetPhrase(new Paragraph("标题五", f8));

tableaddCell(cell);

// 表格数据

PdfPCell newcell = new PdfPCell();

newcellsetHorizontalAlignment(PdfPCellALIGN_CENTER);

newcellsetPhrase(new Paragraph("数据一", f8));

tableaddCell(newcell);

newcellsetPhrase(new Paragraph("数据二", f8));

tableaddCell(newcell);

newcellsetPhrase(new Paragraph("数据三", f8));

tableaddCell(newcell);

newcellsetPhrase(new Paragraph("数据四", f8));

tableaddCell(newcell);

newcellsetPhrase(new Paragraph("数据五", f8));

tableaddCell(newcell);

documentadd(table);

////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////

// 添加连接

documentadd(new Chunk("实例", f12)setLocalDestination("image"));

Image jpg = ImagegetInstance("d:\\3jpg");

documentadd(jpg);

//////////////////////////////////////////////////////////

documentclose();

} catch (Exception e) {

// TODO: handle exception

}

}

场景:我们经常会需要用代码生成pdf文件,涉及到复杂的内容也可以选用先自己制作pdf模板,再用代码去读取,动态数据部分的内容无法用模板实现的就要用Java代码去实现

需求:生成如下的pdf

具体是这样的,我们现在在开发一个项目,其中有个功能是将用户填写的报表在线生成pdf下载,是通过流直接输出到用户的电脑里,服务器上不会存在生成的pdf文件,但是现在有一个问题,因为pdf文件页数是不确定的,所以在每一页加水印现在无法实现,请问怎样弄才能实现这一功能?我之前的思路是这样的,在生成pdf的java代码最后加个循环,通过得到document的页数然后用pdfContentByte在每一页加水印,但是我没找到可以定位到第几页的方法。部分代码:JavacoderesponsesetContentType( ext/html;charset=GBK);responsesetContentType(application/pdf);responsesetHeader(Content-Disposition

返回值:ByteArrayOutputStream

这种方法适用于PDF模板中的变量不多的情况,如果变量过多使用也不是很方便(编辑PDF模板推荐使用Adobe Acrobat Pro软件)。

  检查下有没有documentnewPage()使得把数据放到下一页了。

如果没有,那就需要分析代码。但是换种思路也能解决你问题:

把数据作为附件一,附件二等形式生成在pdf的最后,那样就没人关注pdf内容的空白了。

  用iText生成PDF文档需要5个步骤:

  ①建立comlowagietextDocument对象的实例。

  Document document = new Document();

  ②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。

  PDFWritergetInstance(document, new FileOutputStream("HelloworldPDF"));

  ③打开文档。

  documentopen();

  ④向文档中添加内容。

  documentadd(new Paragraph("Hello World"));

  ⑤关闭文档。

  documentclose();

  通过上面的5个步骤,就能产生一个HelloworldPDF的文件,文件内容为"Hello World"。

  建立comlowagietextDocument对象的实例

  comlowagietextDocument对象的构建函数有三个,分别是:

  public Document();

  public Document(Rectangle pageSize);

  public Document(Rectangle pageSize,

  int marginLeft,

  int marginRight,

  int marginTop,

  int marginBottom);

可以用表格布局

BaseFont bf = BaseFontcreateFont( "STSong-Light", "UniGB-UCS2-H", false, false, null, null);

Font fontChinese5 = new Font(bf,8);

PdfPTable table1 = new PdfPTable(2); //表格两列

table1setHorizontalAlignment(ElementALIGN_CENTER); //垂直居中

table1setWidthPercentage(100);//表格的宽度为100%

float[] wid1 ={075f,025f}; //两列宽度的比例

table1setWidths(wid1);

table1getDefaultCell()setBorderWidth(0); //不显示边框

PdfPCell cell11 = new PdfPCell(new Paragraph("SilkRoad24 GmbH",fontChinese5)); table1addCell(cell11);

String imagepath = "D:\\wl\\logopng";

Image image = ImagegetInstance(imagepath);

table1addCell(image);

documentadd(table1);//增加到文档中

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/12176112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存