使用iText处理PDF

  • iText was written by Bruno Lowagie.
  • 2007年,《SOA World》(SOA世界)杂志将iText作为企业应该使用的10种开源解决方案之一。詹姆斯·高斯林称赞iText库,并在Huckster的新版本使用。纽约时报还利用iText来创建其公共领域文章的PDF版本。
  • iText被嵌入在许多产品和服务中,包括Eclipse BIRT、Jasper Reports、Red Hat JBoss Seam、Windward Reports、pdftk等等。
  • 2008年末,iText的专有许可证可用;2009年初,iText软件公司成立,成为iText产品的全球许可方。

HTML转PDF

加密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.xiongjiaxuan;

import com.itextpdf.kernel.pdf.EncryptionConstants;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.WriterProperties;

import java.io.FileOutputStream;
import java.io.IOException;

/**
* Created by xiongjiaxuan on 2022/1/12 18:25
*/
public class Password {

public static final String SRC = "./src/main/resources/总表.pdf";
public static final String DEST = "./target/output/password.pdf";

private static final byte[] USERPASS = "user".getBytes(); // 可读
private static final byte[] OWNERPASS = "owner".getBytes(); // 可读写

public static void main(String[] args) throws IOException
{
PdfReader pdfReader = new PdfReader(SRC);
WriterProperties writerProperties = new WriterProperties();
writerProperties.setStandardEncryption(USERPASS, OWNERPASS, EncryptionConstants.ALLOW_PRINTING, EncryptionConstants.ENCRYPTION_AES_128);
PdfWriter pdfWriter = new PdfWriter(new FileOutputStream(DEST), writerProperties);
PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter);
pdfDocument.close();
}

}

依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.9</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>

参考

顺时针旋转90度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.xiongjiaxuan;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;

import java.io.File;

/**
* Created by xiongjiaxuan on 2022/1/12 17:29
*/
public class Rotate {

public static final String DEST = "./target/output/rotate90.pdf";
public static final String SRC = "./src/main/resources/总表.pdf";

public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();

PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(DEST));
PdfPage page = pdfDoc.getPage(1);
int rotate = page.getRotation();
if (rotate == 0) {
page.setRotation(90);
} else { // 存在角度
page.setRotation((rotate + 90) % 360);
}
pdfDoc.close();
}

}

依赖

1
2
3
4
5
6
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.9</version>
<type>pom</type>
</dependency>

参考

References

Bruno Lowagie - Stack Exchange