java实现html转pdf

1.需求:将一个html页面转成pdf格式。
2.方法:在实现之前先考虑一个问题,pdf是前端生成还是后端生成。这里采用pdfbox+itext(PDF文件名可自定义)技术在服务端生成。
优点:免费,不需要安转软件,速度快,对于开发者而言,开发中仅需导入相应jar,且易部署。
缺点:对于html标签比较严格。

3.实现:
3.1 需要的jar
itext-2.0.8.jar+pdfbox-2.0.19.jar

3.2 准备好html页面代码(注意:这里需要手动指定字体):

sHtml += "<!DOCTYPE html[<!ENTITY nbsp ' '>]>";
	sHtml += "<html>";
	sHtml += "<head>";
	sHtml += "</head>";
	sHtml += "<body style='font-family:SimSun !important;'>";
	sHtml += "<h1>这里是测试PDF代码部分</h1>";
	sHtml += "</body>";
	sHtml += "</html>";

3.3 服务端开始生成PDF文件:

public static void toPdf(String sHtml) {
		try {
			//创建PDf文件
			ITextRenderer renderer = new ITextRenderer();
			ITextFontResolver fontResolver = renderer.getFontResolver();
			 
			//C:/WINDOWS/Fonts/SimSun.ttc 系统自带的语言包,直接引用
			fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
			fontResolver.addFont("C:/WINDOWS/Fonts/Arial.ttf",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字
			 
			String sDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
    		String sTime = new SimpleDateFormat("HHmmssSSS").format(new Date());
			
			//指定文件存放路径
			URL sUrlPath = 当前类名.class.getResource("/");
			String sPath = sUrlPath.toURI().getPath();
			sPath1 = sPath.replace("WEB-INF/classes/", "");
			String sPathFolder = sPath+sDate+"\\";
			
			File filePath = new File(sPathFolder);
    		if(!filePath.exists()  && !filePath.isDirectory()){
    			filePath.mkdirs();
    		}
			
    		String sFileName = sDate+sTime+".pdf";
    		
			String sPathSave = sPathFolder+sFileName;
			OutputStream os = new FileOutputStream(sPathSave);
			 
			//使用有setDocumentFromString()方法的jar包
			renderer.setDocumentFromString(sHtml);
			renderer.layout();
			renderer.createPDF(os);
			os.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		} 
		
	}

3.4 前端页面发起请求,服务端将生成的PDF文件返回。

String sTitle = "测试PDF文件名";
File file = new File(sFileUrl);//这里的sFileUrl即上面PDF保存路径
	try {
	    OutputStream outputStream = response.getOutputStream();
	     //加载pdf附件到PDF流中
	     PDDocument document = PDDocument.load(new FileInputStream(file));
	    
	    response.reset();
	    response.setContentType("application/pdf;charset=UTF-8");
	    response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(sTitle, "UTF-8"));
	     
	     
	    response.setContentType("application/pdf;charset=UTF-8");
	    //从PDF流中获得PDF文档属性对象
	    PDDocumentInformation info = document.getDocumentInformation();
	    //设置PDF文档属性对象的文件名称(最重要的环节)
	    info.setTitle(sTitle);
	    document.setDocumentInformation(info);
	    
	    //修改完直接输出到响应体中
	    document.save(outputStream);
	    outputStream.close();
	    document.close();
	    out.clear();  
		out = pageContext.pushBody();
	    
	} catch (Exception e) {
	    
	}

完成!

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Apache PDFBox 库的 PDFTextStripper 类将 PDF 换为 HTML。具体操作步骤如下: 1. 安装 Apache PDFBox 库:可以在官网下载最新版本并安装,也可以通过依赖管理工具(如 Maven)安装。 2. 使用 PDFTextStripper 类读取 PDF 文档:通过代码创建一个 PDFTextStripper 对象,然后使用该对象的 getText 方法读取 PDF 文档内容。 3. 将读取的内容换为 HTML:使用任意 HTML 生成工具(如 Jsoup)将读取到的文本换为 HTML 格式。 例如,下面是一段使用 Apache PDFBox 将 PDF 换为 HTML 的示例代码: ``` import java.io.File; import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; public class PdfToHtml { public static void main(String[] args) throws IOException { PDDocument document = PDDocument.load(new File("example.pdf")); PDFTextStripper stripper = new PDFTextStripper(); String text = stripper.getText(document); document.close(); // 将读取到的文本换为 HTML // ... } } ``` 希望这个示例代码能帮助你了解如何使用 Apache PDFBox 将 PDF 换为 HTML。 ### 回答2: PDFBox是一个用于处理PDF文件的Java库。要将PDF换为HTML,可以使用PDFBox提供的功能来解析PDF文件并提取文本内容和图像,然后将其换为HTML格式。 以下是使用PDFBox将PDF换为HTML的基本步骤: 1. 首先,引入PDFBox库,以便在Java项目中使用PDFBox的功能。 2. 创建一个PDF文档对象,通过调用PDFBox提供的方法来加载PDF文件。例如: ```java PDDocument document = PDDocument.load(new File("input.pdf")); ``` 3. 创建一个PDF文本提取器对象,用于提取PDF中的文本内容。 ```java PDFTextStripper stripper = new PDFTextStripper(); ``` 4. 使用文本提取器提取PDF文件中的文本内容。 ```java String text = stripper.getText(document); ``` 5. 创建一个HTML写入器对象,用于将提取的文本内容写入HTML文件。 ```java BufferedWriter writer = new BufferedWriter(new FileWriter("output.html")); ``` 6. 将提取的文本内容写入HTML文件。 ```java writer.write(text); ``` 7. 关闭HTML写入器和PDF文档对象。 ```java writer.close(); document.close(); ``` 这些步骤简要介绍了如何使用PDFBox将PDF换为HTML。当然,PDF中可能包含复杂的图表、表格和其他元素,PDFBox可能无法完全保留原始的样式和布局。你可能需要进一步处理提取的内容,以便更好地适应HTML格式和需求。 ### 回答3: PDFBox是一个Java库,用于处理PDF文件。它提供了一些用于将PDF文件换为HTML的功能。 要使用PDFBox将PDF换为HTML,首先需要导入相关的PDFBox库文件。然后,可以通过以下步骤来完成换的过程: 1. 创建一个PDDocument对象,该对象表示要换的PDF文件。可以使用PDDocument类的load方法加载PDF文件。 2. 创建一个PDFTextStripper对象,该对象将从PDF文件中提取文本内容。 3. 使用PDFTextStripper的getText方法提取PDF文件中的文本。可以选择性地设置一些换选项,如设置起始页和结束页,以及设置是否忽略一些格式化信息等。 4. 将提取的文本内容保存到一个字符串中。 5. 创建一个HTML文件,并将提取的文本内容写入该文件中。可以使用HTML标签对文本进行一些格式化处理。 6. 最后,关闭PDDocument对象和HTML文件。 以下是一个简单示例代码,展示了如何使用PDFBox将PDF换为HTML: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class PDFToHTMLConverter { public static void convertPDFtoHTML(String pdfFilePath, String htmlFilePath) throws IOException { // 加载PDF文件 PDDocument document = PDDocument.load(new File(pdfFilePath)); // 创建PDFTextStripper对象 PDFTextStripper stripper = new PDFTextStripper(); // 提取文本内容 String text = stripper.getText(document); // 创建HTML文件并写入文本内容 FileWriter writer = new FileWriter(new File(htmlFilePath)); writer.write("<html><body>"); writer.write(text); writer.write("</body></html>"); // 关闭对象 writer.close(); document.close(); } public static void main(String[] args) { String pdfFilePath = "path/to/input.pdf"; String htmlFilePath = "path/to/output.html"; try { convertPDFtoHTML(pdfFilePath, htmlFilePath); System.out.println("成功将PDF文件换为HTML文件!"); } catch (IOException e) { System.out.println("换过程中出现错误:" + e.getMessage()); } } } ``` 请注意,这只是一个简单的示例代码,实际的换过程可能会更复杂,需要根据具体的需求进行定制。同样,PDF文件的复杂性也会影响换的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值