java - 使用iText从pdf文件中提取一页

标签 java google-app-engine pdf itext

我想使用 itext 库从 java servlet 的 pdf 文件返回一页(以减少文件大小下载)。 使用此代码

     try {
        PdfReader reader = new PdfReader(input);
        Document document = new Document(reader.getPageSizeWithRotation(page_number) );


        PdfSmartCopy copy1 = new PdfSmartCopy(document, response.getOutputStream());
        copy1.setFullCompression();
        document.open();

        copy1.addPage(copy1.getImportedPage(reader, page_i) );
        copy1.freeReader(reader);
        reader.close();

        document.close();

    } catch (DocumentException e) {
        e.printStackTrace();
    }

此代码返回页面,但文件大小很大,有时甚至等于原始文件大小,即使它只是一页。

最佳答案

我已经从您的存储库下载了一个文件:Abdomen.pdf

然后我使用以下代码“爆破”该 PDF:

public static void main(String[] args) throws DocumentException, IOException {
    PdfReader reader = new PdfReader("resources/Abdomen.pdf");
    int n = reader.getNumberOfPages();
    reader.close();
    String path;
    PdfStamper stamper;
    for (int i = 1; i <= n; i++) {
        reader = new PdfReader("resources/abdomen.pdf");
        reader.selectPages(String.valueOf(i));
        path = String.format("results/abdomen/p-%s.pdf", i);
        stamper = new PdfStamper(reader,new FileOutputStream(path));
        stamper.close();
        reader.close();
    }
}

“爆裂”意味着 split 成不同的页面。虽然原始文件 Abdomen.pdf 为 72,570 KB(约 70.8 MB),但单独的页面要小得多:

enter image description here

我无法重现您描述的问题。

关于java - 使用iText从pdf文件中提取一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28382299/

相关文章:

java - JS 日期输出到隐藏文本字段

java - 不存在警报/未找到模式对话框 - WebDriver 无法捕获 JS 错误

java - 如何从 JUnit 启动 Google App Engine Java 开发服务器?

ios - PDF阅读器,细白线

pdf - 将 pdf 文件转换为 SWF 的工具

java - org.omg.CORBA.Object objRef = orb.resolve_initial_references ("NameService"上出错);

java - 如何在 while 循环内声明自定义生成的字符串?

javascript - Google AppEngine 会支持 Javascript 吗?

python - 验证多个字段,因为它们是一个?

java - 有没有一种令人满意的方法在 Java 中打印复杂的 PDF 文件