我的pdf为10页,其中我需要从pdffile中删除2页。 以上要求应使用iTEXT和JAVA。这些页面应从PDF中删除,而不创建任何新文件或pdf。
答案 0 :(得分:1)
假设您使用的是最新版本,则代码如下所示:
import java.io.IOException;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
public class RemovePage {
public static final String SRC = "original.pdf";
public static final String DEST = "changed.pdf";
public static void main(String[] args) throws IOException {
PdfReader reader = new PdfReader(SRC);
PdfWriter writer = new PdfWriter(DEST);
PdfDocument document = new PdfDocument(reader, writer);
document.removePage(2);
document.close();
}
}
这是一个5个步骤的过程:
PdfReader
对象。PdfWriter
对象,并将输出文件的路径作为参数。PdfDocument
对象。removePage()
方法删除页面;在该示例中,我们删除了第2页。(如果需要删除更多页面,请明智地重复此步骤)。重要说明1:如果此代码示例不起作用,则说明您使用的iText版本错误。您应该使用iText 7.1.2:https://developers.itextpdf.com/itext7/download-and-install-information/Java
重要提示2:在您的问题中,您还提到“页面应从PDF删除,而不创建任何新文件或pdf。” 我故意忽略了这一要求,因为我认为这是设计缺陷。我要避免有人看到我的示例并在不阅读我的警告的情况下开始使用它。
如果您坚持实施此设计缺陷,请阅读常见问题解答条目How to update a PDF without creating a new PDF? 基本上,您有两种选择:安全的一种(可以满足需求)和危险的(可以真正实现需求)。
这是安全的解决方法:
PdfReader
读取原始文件; PdfWriter
在磁盘或内存中创建一个临时文件,您仍然创建一个新文件,但没有人注意。这是大多数文档处理软件(例如Word)的工作方式。
这是危险的方法:
byte[]
,PdfReader
创建byte[]
,并且PdfWriter
的参数。轻柔的警告:危险的方法可能会导致您被解雇或使您的考试不及格,因为如果在此过程中引发异常,它将导致原始文件损坏,无法修复。
答案 1 :(得分:-1)
您也可以使用PdfStamper,
PdfReader pdfReader = new PdfReader("source pdf file path");
reader.selectPages("2-4,10-15");
PdfStamper pdfStamper = new PdfStamper(pdfReader,
new FileOutputStream("destination pdf file path"));
pdfStamper.close();