Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vehicle-quality-review
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王飞
vehicle-quality-review
Commits
c13bb689
Commit
c13bb689
authored
Jan 17, 2024
by
王飞
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'wangfei' into 'dev'
Refactor See merge request
!47
parents
c322cb6c
0c9b4960
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
404 additions
and
0 deletions
+404
-0
pom.xml
quality-review/pom.xml
+12
-0
PDFUtils.java
quality-review/src/main/java/com/ruoyi/pdf/PDFUtils.java
+55
-0
CreateReport.java
...view/src/main/java/com/ruoyi/pdf/report/CreateReport.java
+100
-0
ReportTableRow.java
...ew/src/main/java/com/ruoyi/pdf/report/ReportTableRow.java
+30
-0
SystemReviewTaskController.java
...c/main/java/com/ruoyi/web/SystemReviewTaskController.java
+9
-0
SystemReviewTaskExportPDFResponse.java
.../ruoyi/web/request/SystemReviewTaskExportPDFResponse.java
+94
-0
template.pdf
quality-review/src/main/resources/template/template.pdf
+0
-0
PDFTest.java
ruoyi-admin/src/test/java/com/ruoyi/PDFTest.java
+104
-0
No files found.
quality-review/pom.xml
View file @
c13bb689
...
...
@@ -50,6 +50,18 @@
<artifactId>
spring-test
</artifactId>
</dependency>
<!-- 生成PDF -->
<dependency>
<groupId>
com.itextpdf
</groupId>
<artifactId>
itextpdf
</artifactId>
<version>
5.5.13
</version>
</dependency>
<dependency>
<groupId>
com.itextpdf
</groupId>
<artifactId>
itext-asian
</artifactId>
<version>
5.2.0
</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
quality-review/src/main/java/com/ruoyi/pdf/PDFUtils.java
0 → 100644
View file @
c13bb689
package
com
.
ruoyi
.
pdf
;
import
com.itextpdf.text.Element
;
import
com.itextpdf.text.Font
;
import
com.itextpdf.text.Phrase
;
import
com.itextpdf.text.Rectangle
;
import
com.itextpdf.text.pdf.*
;
import
com.ruoyi.pdf.report.ReportTableRow
;
import
java.util.List
;
public
class
PDFUtils
{
public
static
void
drawTable
(
List
<
ReportTableRow
>
rows
)
{
}
private
static
void
addTextToPdfCenter
(
AcroFields
form
,
PdfStamper
stamper
,
String
text
,
String
fieldName
,
BaseFont
baseFont
){
// 通过模板表单单元格名获取所在页和坐标,左下角为起点
int
pageNo
=
form
.
getFieldPositions
(
fieldName
).
get
(
0
).
page
;
Rectangle
signRect
=
form
.
getFieldPositions
(
fieldName
).
get
(
0
).
position
;
// 获取操作的页面
PdfContentByte
contentByte
=
stamper
.
getOverContent
(
pageNo
);
//创建表单
PdfPTable
table
=
new
PdfPTable
(
1
);
//获取当前模板表单宽度
float
totalWidth
=
signRect
.
getRight
()
-
signRect
.
getLeft
()
-
1
;
//设置新表单宽度
table
.
setTotalWidth
(
totalWidth
);
//设置中文格式
Font
font
=
new
Font
(
baseFont
);
// 设置字号
font
.
setSize
(
10.56
F
);
//设置单元格格式
PdfPCell
cell
=
new
PdfPCell
(
new
Phrase
(
text
,
font
));
//设置单元格高度
cell
.
setFixedHeight
(
signRect
.
getTop
()-
signRect
.
getBottom
()-
1
);
cell
.
setBorderWidth
(
0
);
//设置垂直居中
cell
.
setVerticalAlignment
(
Element
.
ALIGN_MIDDLE
);
//设置水平居中
// cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell
.
setHorizontalAlignment
(
Element
.
ALIGN_LEFT
);
// 设置文字在单元格中换行时的行间距 :最终行间距 :totalLeading= fixedLeading+fontSize(字体大小)* multipliedLeading;
cell
.
setLeading
(
0.0f
,
1.2f
);
//添加到表单中
table
.
addCell
(
cell
);
//写入pdf
table
.
writeSelectedRows
(
0
,
-
1
,
signRect
.
getLeft
(),
signRect
.
getTop
(),
contentByte
);
}
}
quality-review/src/main/java/com/ruoyi/pdf/report/CreateReport.java
0 → 100644
View file @
c13bb689
package
com
.
ruoyi
.
pdf
.
report
;
import
cn.hutool.core.io.resource.ClassPathResource
;
import
com.itextpdf.text.DocumentException
;
import
com.itextpdf.text.pdf.AcroFields
;
import
com.itextpdf.text.pdf.PdfReader
;
import
com.itextpdf.text.pdf.PdfStamper
;
import
org.springframework.stereotype.Component
;
import
java.io.ByteArrayOutputStream
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
@Component
public
class
CreateReport
{
public
void
create
()
throws
IOException
,
DocumentException
{
ClassPathResource
classPathResource
=
new
ClassPathResource
(
"template/template.pdf"
);
PdfReader
reader
=
new
PdfReader
(
classPathResource
.
getStream
());
ByteArrayOutputStream
bos
=
new
ByteArrayOutputStream
();
PdfStamper
stamper
=
new
PdfStamper
(
reader
,
bos
);
AcroFields
acroFields
=
stamper
.
getAcroFields
();
drawPage1
(
"轿车"
,
"SVW73025CK"
,
"天津吉利汽车制造有限公司"
,
acroFields
);
stamper
.
setFormFlattening
(
true
);
stamper
.
close
();
bos
.
writeTo
(
new
FileOutputStream
(
"./aaa.pdf"
));
}
/**
*
* @param productName 产品名称
* @param productModel 产品型号
* @param consignor 委托单位
*/
private
void
drawPage1
(
String
productName
,
String
productModel
,
String
consignor
,
AcroFields
acroFields
)
throws
DocumentException
,
IOException
{
acroFields
.
setField
(
"productName"
,
productName
);
acroFields
.
setField
(
"productModel"
,
productModel
);
acroFields
.
setField
(
"consignor"
,
consignor
);
}
private
void
drawPage2
()
{
}
private
void
drawPage3
()
{
}
private
void
drawPage4
()
{
}
private
void
drawPage5
()
{
}
private
void
drawPage6
()
{
}
private
void
drawPage7
()
{
}
private
void
drawPage8
()
{
}
private
void
drawPage9
()
{
}
private
void
drawPage10
()
{
}
private
void
drawPage11
()
{
}
private
void
drawPage12
()
{
}
private
void
drawPage13
()
{
}
private
void
drawPage14
()
{
}
}
quality-review/src/main/java/com/ruoyi/pdf/report/ReportTableRow.java
0 → 100644
View file @
c13bb689
package
com
.
ruoyi
.
pdf
.
report
;
import
lombok.Data
;
@Data
public
class
ReportTableRow
{
public
String
repTmpPlaceholder
;
private
String
standardKey
;
private
String
standardValue
;
private
String
checkResultKey
;
private
String
checkResultValue
;
private
String
isPassKey
;
private
String
isPassValue
;
public
String
getStandardKey
()
{
return
repTmpPlaceholder
+
"_standard"
;
}
public
String
getCheckResultKey
()
{
return
repTmpPlaceholder
+
"_checkResult"
;
}
public
String
getIsPassKey
()
{
return
repTmpPlaceholder
+
"_isPass"
;
}
}
quality-review/src/main/java/com/ruoyi/web/SystemReviewTaskController.java
View file @
c13bb689
...
...
@@ -96,4 +96,13 @@ public class SystemReviewTaskController extends BaseController {
startPage
(
request
);
return
getDataTable
(
systemReviewTaskService
.
findListByStatus
(
SystemReviewTask
.
STATUS_FINISH
));
}
@ApiOperation
(
"生成PDF报告"
)
@Trace
@Tags
({
@Tag
(
key
=
"param"
,
value
=
"arg[0]"
),
@Tag
(
key
=
"result"
,
value
=
"returnedObj"
)})
@RequestMapping
(
method
=
RequestMethod
.
POST
,
value
=
"/exportPDF"
)
public
R
<
SystemReviewTaskExportPDFResponse
>
exportPDF
()
{
return
null
;
}
}
quality-review/src/main/java/com/ruoyi/web/request/SystemReviewTaskExportPDFResponse.java
0 → 100644
View file @
c13bb689
package
com
.
ruoyi
.
web
.
request
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.util.List
;
@Data
@Accessors
(
chain
=
true
)
@ApiModel
public
class
SystemReviewTaskExportPDFResponse
{
@ApiModelProperty
(
"报告编号"
)
private
String
exportNo
;
@ApiModelProperty
(
"产品名称"
)
private
String
productName
;
@ApiModelProperty
(
"产品型号"
)
private
String
productModel
;
@ApiModelProperty
(
"委托单位"
)
private
String
entrustOrg
;
@ApiModelProperty
(
"委托单位电话"
)
private
String
entrustOrgPhone
;
@ApiModelProperty
(
"委托单位地址"
)
private
String
entrustOrgAddr
;
@ApiModelProperty
(
"委托单位邮编"
)
private
String
entrustOrgPostcode
;
@ApiModelProperty
(
"样品名称"
)
private
String
sampleName
;
@ApiModelProperty
(
"商标"
)
private
String
brand
;
@ApiModelProperty
(
"型号规格"
)
private
String
specification
;
@ApiModelProperty
(
"生产企业"
)
private
String
manufacturer
;
@ApiModelProperty
(
"送样者"
)
private
String
sampleSender
;
@ApiModelProperty
(
"送样日期"
)
private
String
sampleSendDate
;
@ApiModelProperty
(
"样品数量"
)
private
String
sampleCount
;
@ApiModelProperty
(
"任务编号"
)
private
String
taskNo
;
@ApiModelProperty
(
"汽车信息安全管理要求"
)
private
List
<
CheckTable
>
safetyManagerReq
;
@ApiModel
@Data
public
static
class
CheckTable
{
@ApiModelProperty
(
"表名称"
)
private
String
tableName
;
@ApiModelProperty
(
"任务编号"
)
private
Integer
order
;
@ApiModelProperty
(
"标准要去"
)
private
String
standard
;
@ApiModelProperty
(
"检验结果"
)
private
String
checkResult
;
@ApiModelProperty
(
"审核是否通过(0未通过、1通过)"
)
private
String
pass
;
public
String
getStandardKey
()
{
return
tableName
+
"_"
+
order
+
"_standard"
;
}
public
String
getCheckResultKey
()
{
return
tableName
+
"_"
+
order
+
"_checkResult"
;
}
public
String
getPassKey
()
{
return
tableName
+
"_"
+
order
+
"_pass"
;
}
}
}
quality-review/src/main/resources/template/template.pdf
0 → 100644
View file @
c13bb689
File added
ruoyi-admin/src/test/java/com/ruoyi/PDFTest.java
0 → 100644
View file @
c13bb689
package
com
.
ruoyi
;
import
cn.hutool.core.io.resource.ClassPathResource
;
import
com.itextpdf.text.*
;
import
com.itextpdf.text.pdf.*
;
import
com.ruoyi.pdf.report.CreateReport
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
java.io.ByteArrayOutputStream
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
@SpringBootTest
public
class
PDFTest
{
@Autowired
private
CreateReport
createReport
;
@Test
public
void
export
()
throws
IOException
,
DocumentException
{
//设置具体字体格式编码,不设置的话中文可能会不显示
BaseFont
baseFont
=
BaseFont
.
createFont
(
"STSongStd-Light"
,
"UniGB-UCS2-H"
,
BaseFont
.
NOT_EMBEDDED
);
ClassPathResource
classPathResource
=
new
ClassPathResource
(
"template/template.pdf"
);
ByteArrayOutputStream
bos
=
new
ByteArrayOutputStream
();
PdfReader
reader
=
new
PdfReader
(
classPathResource
.
getStream
());
bos
=
new
ByteArrayOutputStream
();
PdfStamper
stamper
=
new
PdfStamper
(
reader
,
bos
);
AcroFields
form
=
stamper
.
getAcroFields
();
Map
<
String
,
String
>
map
=
new
HashMap
();
map
.
put
(
"system_review_01_standard"
,
"车辆生产企业应建立车辆全生命周期的汽车信息安全管理体系。"
);
map
.
put
(
"system_review_01_result"
,
"车辆生产企业建立了车辆全生命周期的汽车信息安全管理体系。"
);
map
.
put
(
"system_review_01_pass"
,
"不符合"
);
this
.
fillPdfCellForm
(
map
,
form
,
stamper
,
baseFont
);
// true代表生成的PDF文件不可编辑
stamper
.
setFormFlattening
(
true
);
stamper
.
close
();
bos
.
writeTo
(
new
FileOutputStream
(
"./aaa.pdf"
));
}
private
void
fillPdfCellForm
(
Map
<
String
,
String
>
map
,
AcroFields
form
,
PdfStamper
stamper
,
BaseFont
baseFont
)
throws
IOException
,
DocumentException
{
for
(
Map
.
Entry
entry
:
map
.
entrySet
())
{
String
key
=
(
String
)
entry
.
getKey
();
String
value
=
(
String
)
entry
.
getValue
();
// form.setField(key, value);
form
.
setFieldProperty
(
key
,
"setfflags"
,
PdfFormField
.
FF_MULTILINE
,
null
);
addTextToPdfCenter
(
form
,
stamper
,
value
,
key
,
baseFont
);
}
}
private
static
void
addTextToPdfCenter
(
AcroFields
form
,
PdfStamper
stamper
,
String
text
,
String
fieldName
,
BaseFont
baseFont
){
// 通过模板表单单元格名获取所在页和坐标,左下角为起点
int
pageNo
=
form
.
getFieldPositions
(
fieldName
).
get
(
0
).
page
;
Rectangle
signRect
=
form
.
getFieldPositions
(
fieldName
).
get
(
0
).
position
;
// 获取操作的页面
PdfContentByte
contentByte
=
stamper
.
getOverContent
(
pageNo
);
//创建表单
PdfPTable
table
=
new
PdfPTable
(
1
);
//获取当前模板表单宽度
float
totalWidth
=
signRect
.
getRight
()
-
signRect
.
getLeft
()
-
1
;
//设置新表单宽度
table
.
setTotalWidth
(
totalWidth
);
//设置中文格式
Font
font
=
new
Font
(
baseFont
);
// 设置字号
font
.
setSize
(
10.56
F
);
//设置单元格格式
PdfPCell
cell
=
new
PdfPCell
(
new
Phrase
(
text
,
font
));
//设置单元格高度
cell
.
setFixedHeight
(
signRect
.
getTop
()-
signRect
.
getBottom
()-
1
);
cell
.
setBorderWidth
(
0
);
//设置垂直居中
cell
.
setVerticalAlignment
(
Element
.
ALIGN_MIDDLE
);
//设置水平居中
// cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell
.
setHorizontalAlignment
(
Element
.
ALIGN_LEFT
);
// 设置文字在单元格中换行时的行间距 :最终行间距 :totalLeading= fixedLeading+fontSize(字体大小)* multipliedLeading;
cell
.
setLeading
(
0.0f
,
1.2f
);
//添加到表单中
table
.
addCell
(
cell
);
//写入pdf
table
.
writeSelectedRows
(
0
,
-
1
,
signRect
.
getLeft
(),
signRect
.
getTop
(),
contentByte
);
}
@Test
public
void
createTest
()
throws
DocumentException
,
IOException
{
createReport
.
create
();;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment