pdf - 如何旋转文档页面以横向显示?

标签 pdf grails groovy download itext

我正在使用iText库的MPL / LGPL版本(于2009年7月发行)通过Web应用程序下载pdf。我的问题是,在pdf上呈现的GSP具有横向布局。目前,我有以下代码:

public void mergeMultiplePdfFiles(List<String> fileNames, OutputStream os, String fileDirectory, boolean isLandscape = false) {
    FileInputStream is
    PdfReader pdfReader
    PdfWriter pdfWriter
    com.lowagie.text.Document document

    try {
        document = new com.lowagie.text.Document(isLandscape ? PageSize.LETTER.rotate() : PageSize.LETTER)

        pdfWriter = PdfWriter.getInstance(document, os)
        document.open()
        PdfImportedPage page
        PdfContentByte cb = pdfWriter.getDirectContent() // Holds the PDF

        fileNames.each { fileName ->
            def filePath = fileDirectory + fileName + ".pdf"
            is = new FileInputStream(filePath)
            pdfReader = new PdfReader(is)

            for(int i = 1; i <= pdfReader.getNumberOfPages(); i++) {
                document.newPage()
                page = pdfWriter.getImportedPage(pdfReader, i)
                //cb.addTemplate(page, 0.0, -1f, 1f, 0.0, 0.0, pdfReader.getPageSizeWithRotation(i).height);
                cb.addTemplate(page, 0, 0);
            }
            is.close()
            pdfReader.close();

            File file = new File(filePath)
            file.delete()
        }
    }
    catch (Exception e) {
        log.error("ERROR Generating a PDF.")
        //e.printStackTrace()
        throw e
    }
    finally {
        if (document.isOpen())
            document.close()

        try {
            if (os != null) os.close()
            if (is != null) is.close()
            if (pdfReader != null) pdfReader.close()
            if (pdfWriter != null) pdfWriter.close()

        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

这段代码创建了可正确呈现的pdf,但页面为纵向。因此,用户必须将pdf旋转到横向才能阅读文档。我想先将pdf旋转为横向,然后再下载文件。
我尝试了许多解决方案,例如:
document = new com.lowagie.text.Document(PageSize.LETTER.rotate())
或者,document.setPageSize(PageSize.LETTER.rotate())
这两种解决方案都会将pdf设置为横向,但在纵向 View 中会截断文本。也,


rot = pdfReader.getPageRotation(i); pageDict = pdfReader.getPageN(i); pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 90)); rot = pdfReader.getPageRotation(i);
这些建议的解决方案均无效。

最佳答案

感谢Bruno的评论,使我可以横向下载该文档。这是代码:

public void mergeMultiplePdfFiles(List<String> fileNames, OutputStream os, String fileDirectory, boolean isLandscape = false) {
    FileInputStream is
    PdfReader pdfReader
    com.lowagie.text.Document document

    try {
        document = new com.lowagie.text.Document()
        PdfCopy copy = new PdfCopy(document, os);
        document.open();
        PdfImportedPage page;
        Chunk chunk;

        fileNames.each { fileName ->
            def filePath = fileDirectory + fileName + ".pdf"
            is = new FileInputStream(filePath)
            pdfReader = new PdfReader(is)
            for(int i = 1; i <= pdfReader.getNumberOfPages(); i++) {

                page = copy.getImportedPage(pdfReader, i);
                copy.addPage(page);
            }
            copy.freeReader(pdfReader);
            is.close()
            pdfReader.close();

            File file = new File(filePath)
            file.delete()
        }
    }
    catch (Exception e) {
        log.error("ERROR Generating a PDF.")
        //e.printStackTrace()
        throw e
    }
    finally {
        if (document.isOpen())
            document.close()

        try {
            if (os != null) os.close()
            if (is != null) is.close()
            if (pdfReader != null) pdfReader.close()

        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

}

关键更改是使用PdfCopy代替以前使用的PdfWriter和PdfContentByte。

关于pdf - 如何旋转文档页面以横向显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31387420/

相关文章:

grails - 欧芹验证文件是否已上传?

unit-testing - 如何在Spock中测试涉及渲染 View 的方法(单元测试)?

java - 如何使用 java.nio.Files 创建软符号链接(symbolic link)

java - 使用 Java 将多个 pdf 压缩为单个 zip 文件

javascript - 如何延迟pdf扫描直到页面完全加载php中的pdfcrowd api?

pdf - fpdf pdf 文件大小

spring - 无法解决 Spring 安全性

mongodb - JSR223 (Groovy) 无法在 Jmeter(2.13) 中访问 MongoDB(3.0.3)

java - Groovy 中的闭包 - 用等效的 Java 实现

ios - 将 iPad 上的表单数据导出为可打印的 PDF