java-pdf-itext7、itextpdf 生成pdf 文件
1、如果是收據或者其他不是A4大小的票據,首先將票據用印表機掃描成圖片格式,用ps等工具裁剪成實際票據的大小備用。
2、設計一張實際票據大小的空白pdf模板,備用。
3、用Adobe 等pdf編輯工具開啟上面製作的空白模板,點選編輯,在更多->背景->新增->選檔案->瀏覽,選中步驟1製作的票據點選確定。
4、在選單欄中選擇準備表單,點選開始,儲存到相應的資料夾。
5、在需要填入值的地方新增文字域,設定域名稱,需要注意的一點
- 設定外觀->文字大小選項中,一定設定文字大小和
字型(實際操作中,如果填入值只涉及數字不需要,如果有漢字最好設定一下,後期賦值很可能頁面不顯示漢字)
6、新增完文字域,選擇工具,編輯->更多->背景->刪除,刪除背景,只留下文字域,儲存成模板。
至此,itextpdf模板製作完成。下來就是往裡面進行賦值,將生成的臨時檔案按檔案流返回給前端,進行列印即可。
程式碼如下:
//預繳款收據
@Override
public String queryByPdfPrint(PdfPrintVo pdfPrintVo, String templateName, String type) {
//伺服器地址
String upFiles = uploadpath;
String files = "files";
String temp = "pdfPrint";
//查詢模板的位置 File.separator 表示路徑中的\或者/
String templatePath = upFiles + File.separator + files + File.separator + temp + File.separator + templateName ;
if (templatePath.contains("\\")) {
templatePath = templatePath.replace("\\", "/");
}
ElderInfo elderInfo = elderInfoService.getOne(new QueryWrapper<ElderInfo>().eq("elder_number",pdfPrintVo.getElderNumber()).orderByAsc("create_time").last("limit 1"));
File file = new File(upFiles + File.separator + files + File.separator + elderInfo.getId());
if (!file.exists()) {
file.mkdirs();// 不存在則建立根目錄
}
String newPDFPath = file.getPath() + File.separator + templateName;
if (newPDFPath.contains("\\")) {
newPDFPath = newPDFPath.replace("\\", "/");
}
PdfReader reader;
FileOutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
out = new FileOutputStream(newPDFPath);//輸出流
reader = new PdfReader(templatePath);//讀取pdf模板
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
//方法二:使用iTextAsian.jar中的字型
BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont);
AcroFields form = stamper.getAcroFields();
java.util.Iterator<String> it = form.getFields().keySet().iterator();
if (type.equals(PdfPrintConstant.TYPE1)){
while (it.hasNext()) {
String name = it.next().toString();
String sex = it.next().toString();
(StringUtils.isBlank(String.valueOf(pdfPrintVo.getEName())) ? "":String.valueOf(pdfPrintVo.getEName())));
form.setField(sex, (StringUtils.isBlank(String.valueOf(pdfPrintVo.getSex())) ? "":String.valueOf(pdfPrintVo.getSex())));
}
}
stamper.setFormFlattening(true);//如果為false那麼生成的PDF檔案還能編輯,一定要設為true
stamper.close();
Document doc = new Document();
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
doc.add(new Paragraph("解決中文問題了!",font));
PdfImportedPage importPage = copy.getImportedPage(
new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
} catch (IOException e) {
System.out.println(1);
} catch (DocumentException e) {
System.out.println(2);
} catch (Exception e) {
e.printStackTrace();
}
return newPDFPath;
}
@AutoLog(value = "根據id和type,獲取PDF流")
@ApiOperation(value="根據id和type,獲取PDF流", notes="根據id和type,獲取PDF流")
@RequestMapping(value = "/preview", method = RequestMethod.GET)
public void getTicketPDF(@RequestParam(name="id",required=true) @ApiParam(value = "費用結算傳老人id,預繳傳id") String id
, @RequestParam(name="type",required=true) @ApiParam(value = "1 預繳 2費用結算") String type,HttpServletRequest request, HttpServletResponse response){
//獲取模板資料
String templateFile = null;
PdfPrintVo pdfPrintVo = new PdfPrintVo();
if (type.equals(PdfPrintConstant.TYPE1)){
//查詢預繳收款
pdfPrintVo = costPayAdvanceService.listQueryByType1(id);
}else {
pdfPrintVo = costRetreatSettleService.queryPdfInfo(id);
}
if (pdfPrintVo!=null){
if (type.equals(PdfPrintConstant.TYPE1)){
templateFile = costPayAdvanceService.queryByPdfPrint(pdfPrintVo, PdfPrintConstant.YJSJ,type);
}else if (type.equals(PdfPrintConstant.TYPE2)){
templateFile = costPayAdvanceService.queryByPdfPrint(pdfPrintVo, PdfPrintConstant.JSPJ,type);
}
File file = new File(templateFile);
if (file.exists()) {
byte[] data = null;
FileInputStream input=null;
try {
input= new FileInputStream(file);
data = new byte[input.available()];
input.read(data);
response.getOutputStream().write(data);
} catch (Exception e) {
System.out.println("pdf檔案處理異常:" + e);
}finally{
try {
if(input!=null){
input.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
相關文章
- spring boot itextPdf根據模板生成pdf檔案Spring Boot
- Java 生成 PDF 文件Java
- Laravel 生成 PDF 文件 - tcpdfLaravelTCP
- JSP生成WORD文件,EXCEL文件,PDF文件JSExcel
- java生成簡易pdf文件Java
- .NET 工具庫高效生成 PDF 文件
- 手把手教你使用 Java 線上生成 pdf 文件Java
- 用C#實現生成PDF文件(原碼)C#
- 用PHP編寫PDF文件生成器 (轉)PHP
- 使用【APIDOC】生成JavaWeb的API文件(HTML,MarkDown,PDF)APIJavaWebHTML
- 使用 Sphinx 撰寫技術文件並生成 PDF 總結
- itextpdf匯出
- 基於PHP與XML的PDF文件生成技術(摘要) (轉)PHPXML
- dact-admin:獲取資料生成、下載word/pdf文件
- itextpdf freemarker渲染
- C#生成PDFC#
- PDF文件搜尋工具:PDF Search Mac版Mac
- Cisdem PDF Creator(PDF 生成轉換器)
- Master PDF Editor for Mac PDF文件編輯軟體ASTMac
- PDF文件壓縮工具:Cisdem PDF Compressor for MacMac
- 介面文件生成
- pdf轉換成word文件
- Laravel API 文件生成器生成指定的 API 文件LaravelAPI
- C# 將PDF文件轉換為Markdown文件C#
- PDF文件轉換器PDF to Word Document Converter MacMac
- 用js生成PDF的方案JS
- java生成PDF檔案【Z】Java
- java生成word文件Java
- ABAP文件生成工具
- 介面文件生成工具
- 前端生成PPT文件前端
- 如何把多個pdf合併成一個pdf文件?
- C#中PDF文件操作類C#
- 提取pdf文件的目錄1.0
- 轉換不同文件到pdf
- Python 將Word/ Exce/ PDF/ PPT文件轉為OFD文件Python
- PDF Expert 2.5.16 中文版-實用的 PDF 文件工具
- 實踐指南-網頁生成PDF網頁