首页 文章

如何旋转文档页面出来横向?

提问于
浏览
0

我正在使用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设置为横向,但文本在纵向视图中被截断 . 也,

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

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

1 回答

  • 1

    感谢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 .

相关问题