前言
网上搜了一堆如何把打印的纸张横向,发现颇为花费时间,特再次记录一下
解决办法
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();
}
版权声明:本文为weixin_43976226原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。