java之pdf打印

news/2025/3/16 6:09:07/

前言

网上搜了一堆如何把打印的纸张横向,发现颇为花费时间,特再次记录一下

解决办法

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();}

http://www.ppmy.cn/news/789087.html

相关文章

python静默打印pdf

import win32api import win32printdef print_pdf(self, pdf_file_name):"""静默打印pdf:param pdf_file_name::return:"""GSPRINT_PATH gsprintGHOSTSCRIPT_PATH gswin32ccurrentprinter win32print.GetDefaultPrinter()win32api.ShellExecu…

pdf打印骑缝章

骑缝章是用于往来业务合同&#xff0c;以确保合同真实、有效的印章加盖方法&#xff0c;是一种防范风险的重要方式。在Java程序中&#xff0c;可以通过使用工具来辅助加盖这种骑缝章。 工具&#xff1a;Free Spire.PDF for Java &#xff08;免费版&#xff09; 工具获取及ja…

【算法集训之线性表篇】Day 05

文章目录 题目一思路代码实现效果题目二思路代码实现效果 题目一 将两个有序顺序表合并为一个有序顺序表&#xff0c;函数结果返回值为顺序表。 思路 我们可以利用二路归并排序算法中的Merge函数思路&#xff0c;设置两个指针i&#xff0c;j&#xff0c;分别记录在顺序表a和…

基于matlab使用PointNet深度学习进行点云分类(附源码)

一、前言 此示例演示如何训练 PointNet 网络以进行点云分类。 点云数据由各种传感器获取&#xff0c;例如激光雷达、雷达和深度摄像头。这些传感器捕获场景中物体的3D位置信息&#xff0c;这对于自动驾驶和增强现实中的许多应用非常有用。例如&#xff0c;区分车辆和行人对于…

maxwell生成动态磁力线/磁密云图一些报错警告解决办法

之前看到一个动态变化的磁密云图以及磁力线动图&#xff0c;如图1、2所示&#xff0c;觉得很好玩。 图1 动态磁密云图 图2 动态磁力线图 这个可以在Maxwell软件直接获取&#xff0c;步骤如下&#xff1a; 首先在电机瞬态仿真的时候设置Solve setup的时候注意save fileds一栏…

【超详细】磁力计数据读取--以IST8310为例

这里以iSentek公司产出的IST8310型号的磁力计为例&#xff0c;尺寸为 3.0 * 3.0 * 1.0mm&#xff0c;支持快速 I2C 通信&#xff0c;可达 400kHz&#xff0c;14 位磁场数据&#xff0c;测量范围可达1600uT(x,y-axis)和 2500uT(z-axis)&#xff0c; 最高 200Hz 输出频率 同时这里…

Python简单爬取电影磁力链接

Python简单爬取电影磁力链接 网页的链接&#xff1a;http://www.ygdy8.net/html/gndy/dyzz/list_23_2.html 打开你想要的电影&#xff1a;http://www.ygdy8.net/html/gndy/dyzz/20181124/57807.html 找到下载地址&#xff1a; 代码&#xff1a; import requests#网络请求模块…

[初学Python]利用某网站的功能写一个磁力链转种子工具

孔子曰&#xff1a;学而时习之~ 初学python&#xff0c;一边看语法&#xff0c;一边看参考例程&#xff0c;写了一个小程序&#xff0c;做个存档&#xff0c;否则很容易忘记。 这次的目标是利用某种子下载网站&#xff0c;编写一个磁力链下载种子文件的工具。 常见的种子文件…