前言
网上搜了一堆如何把打印的纸张横向,发现颇为花费时间,特再次记录一下
解决办法
Document pdfDoc = new Document(PageSize.A4.rotate());
说明:加上 rotate()
函数即可
教程
知识点:
1、新建 完整pdf文档
依赖:
<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>
上代码:
public ByteArrayOutputStream generatePDF(){Document pdfDoc = new Document(PageSize.A4); //新建 文档ByteArrayOutputStream buffer = new ByteArrayOutputStream(); //新建输出流 PdfWriter writer = PdfWriter.getInstance(pdfDoc, buffer); //实例化 文档写对象,写入到 buffer 输出流中pdfDoc.open(); //打开文档对象pdfDoc.newPage(); //新建一个 Page页面ContentFont cf = new ContentFont(); //新建字体//定义段落Paragraph paraTitle = new Paragraph();paraTitle.setAlignment(Element.ALIGN_CENTER);//设置段落前后间距paraTitle.setSpacingAfter(5);paraTitle.setSpacingBefore(5);//设置缩进paraTitle.setIndentationLeft(50);paraTitle.setIndentationRight(50);paraTitle.setFont(cf.getTitleFont()); //设置字体Chunk chunk = new Chunk(title); //新建行内块元素paraTitle.add(chunk); //将块加入 段落对象Chunk spaceChunk = new Chunk(" ");float f = 100f;spaceChunk.setCharacterSpacing(f); //表示在 块元素之间添加固定距离 的空白paraTitle.add(Chunk.NEWLINE); //表示 换行Image image2 = Image.getInstance(bys); //新建 图片对象image2.setAlignment(Image.MIDDLE| Image.TEXTWRAP); //设置图片垂直居中,文字环绕在图片周围Chunk chunkImage = new (image2,0,0,true); //将图片初始化在块对象paraTitle.add(chunkImage); //将块添加到 段落对象document.add(paraTitle); //将段落 加入到 文档//定义表格对象PdfPTable table = new PdfPTable(4);table.setTotalWidth(400);table.setWidths(new float[] {100,100,100,100});table.setLockedWidth(true);PdfPCell cell; //定义 单元格对象cell = new PdfPCell(new Phrase("标题", cf.getTitleFont())); //初始化,内容与字体cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //设置水平方向cell.setHorizontalAlignment(Element.ALIGN_CENTER); //设置垂直方向cell.setFixedHeight(45); //设置行高cell.setBorder(0); //表示边框宽为 0 ,表示去掉边框cell.setColspan(4); //表示合并行单元格cell.setRowspan(2); //表示合并 列方向的单元格table.addCell(cell); //将单元格加入到表格中/*有的时候,只加了一个单元格对象,生成pdf会报错*/cell = new PdfPCell(new Phrase("内容", cf.getTitleFont())); //初始化,内容与字体cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //设置水平方向cell.setHorizontalAlignment(Element.ALIGN_CENTER); //设置垂直方向cell.setFixedHeight(45); //设置行高cell.setBorder(0); //表示边框宽为 0 ,表示去掉边框cell.setColspan(4); //表示合并行单元格cell.setRowspan(2); //表示合并 列方向的单元格table.addCell(cell); //将单元格加入到表格中pdfDoc.add(table); pdfDoc.close(); //关闭文档对象return buffer;
}
拓展一:将pdf 文件 以压缩包的形式返回
实现方式用 ZipOutputStream
这个类
话不多说,上代码
public void returnZipPackage(){String nameZip = "压缩包.zip";String namez;String userAgent = this.getRequest().getHeader("user-agent").toLowerCase();if(userAgent.contains("mise")||userAgent.contains("like gecko")) {namez = URLEncoder.encode(nameZip,"UTF-8");}else {namez = new String(nameZip.getBytes("UTF-8"),"ISO-8859-1");}this.getResponse().setHeader("Content-Disposition", "attachment;filename="+namez);ZipOutputStream zo = new ZipOutputStream(this.getResponse().getOutputStream());for(int i=0;i<100;i++){zo.putNextEntry(new ZipEntry("demo"+i+".pdf"));int len=0;byte[] buf = new byte[1024];ByteArrayOutputStream buffer = generatePDF(); ByteArrayInputStream inputStream= new ByteArrayInputStream(buffer.toByteArray());while((len=inputStream.read(buf,0,1024))!=-1) {zo.write(buf,0,len);}zo.closeEntry();inputStream.close();}zo.close();}