我正在使用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/