【发布时间】: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