【问题标题】:How to rotate Document pages to come out landscape?如何旋转文档页面以横向显示?
【发布时间】:2015-10-01 22:57:30
【问题描述】:

我正在使用 iText 库的 MPL/LGPL 版本(2009 年 7 月发布的库)通过网络应用程序下载 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 设置为横向,但纵向视图中的文本被截断。还有,

rot = pdfReader.getPageRotation(i); pageDict = pdfReader.getPageN(i); pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 90)); rot = pdfReader.getPageRotation(i);

这些建议的解决方案都不起作用。

【问题讨论】:

  • 您的代码完全错误。它与the official documentation 中给出的所有示例背道而驰。您正在使用PdfWriter,您应该使用PdfCopy,如我对以下问题的回答中所述:How to merge documents correctly?
  • 谢谢,使用 PdfCopy 帮助我解决了横向下载 pdf 的问题。但是,我尝试将您的代码用于您评论的答案并且在使用 PageStamp 时遇到问题。会抛出错误,说“PDF 没有页面”
  • 为什么不删除所有与PageStamp相关的代码?当我看你的代码时,你似乎不需要它。

标签: pdf grails groovy download itext


【解决方案1】:

感谢布鲁诺的评论,我得到了横向下载的文档。这是代码:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多