这里写自定义目录标题
itext
注意不要在方法内部转化byte,方法未走完时,byteoutputstream是没有数据的,得到byteoutputstream转化为byte就很方便
/**
* @Param source 源文件
* @Param target 转换后文件
* @Description 将PDF转为A4格式
* @Date: 2021/4/25
**/
private static ByteArrayOutputStream convert(InputStream inputStream) {
try {
PdfReader pdfReader = new PdfReader(inputStream);
// FileOutputStream out = new FileOutputStream(target);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Document doc = new Document();
PdfWriter writer = PdfWriter.getInstance(doc, out);
doc.open();
PdfContentByte cb = writer.getDirectContent();
for (int i = 1; i <= pdfReader.getNumberOfPages(); i++) {
PdfImportedPage page = writer.getImportedPage(pdfReader, i);
float width = page.getWidth();
float height = page.getHeight();
if (height > width) {
// 横向
doc.setPageSize(PageSize.A4);
doc.newPage();
// 计算比例
float widthScale = getWidthScale(width);
float heightScale = getHeightScale(height);
cb.addTemplate(page, widthScale, 0, 0, heightScale, 0, 0);
}
else {
// 纵向
doc.setPageSize(new com.itextpdf.text.Rectangle(PageSize.A4.getHeight(), PageSize.A4.getWidth()));
doc.newPage();
float widthScale = getWidthScale(height);
float heightScale = getHeightScale(width);
cb.addTemplate(page, widthScale, 0, 0, heightScale, 0, 0);
}
}
doc.close();
writer.close();
return out;
}
catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
private static float getWidthScale(float width) {
float scale = PageSize.A4.getWidth() / width;
return scale;
}
private static float getHeightScale(float height) {
float scale = PageSize.A4.getHeight() / height;
return scale;
}