我正在使用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 回答
感谢Bruno的评论,我将文档下载到横向 . 这是代码:
关键变化是使用PdfCopy而不是之前使用的PdfWriter和PdfContentByte .