【发布时间】:2014-02-17 08:51:02
【问题描述】:
我想使用 iText 为现有 pdf 添加标题。
除了有时我的函数创建一个带有正确页眉和页脚但旋转现有 pdf 页面的 pdf 之外,我没有任何问题。
private static void print(Sldocuments item, String header, String footer) {
try {
String ftpFilename = item.getId()+"_"+item.getDocumentname();
String newName= String.valueOf(item.getId())+".pdf";
String path = (Global.SHARED_FOLDER_DEVELOPER);
String smbUser = "**;"+"**" + ":" + "**";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(smbUser);
SmbFile sFile = new SmbFile(path+ftpFilename, auth);
InputStream in = sFile.getInputStream();
PdfReader reader = new PdfReader(in);
// Create output PDF
Document document = new Document(PageSize.A4);
SmbFile sFileOut = new SmbFile(path+newName, auth);
SmbFileOutputStream sfos = new SmbFileOutputStream(sFileOut);
PdfWriter writer = PdfWriter.getInstance(document, sfos);
document.open();
PdfContentByte pdfContentByte = writer.getDirectContent();
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
PdfImportedPage page = writer.getImportedPage(reader, i);
document.newPage();
pdfContentByte.add(page);
// Write header
writeText(headerPositionX, headerPositionY, header);
// Write footer
writeText(footerPositionX, footerPositionY, footer);
// Write page number
String pageNumber = "pagina "+ i +" di " + reader.getNumberOfPages();
writeText(pageNumberPositionX, pageNumberPositionY, pageNumber);
}
document.close();
reader.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我尝试使用
解决我的问题AffineTransform af = new AffineTransform();
af.setToRotation(Math.toRadians(page.getRotation()));
pdfContentByte.addTemplate(page, af);
简单的头脑
pdfContentByte.add(page);
但是通过这种转换,我的新 pdf 中完全缺少导入的页面(可能是因为我使用错误的锚点旋转页面)。
我怎样才能实现我的目标?
【问题讨论】:
-
如果您有 PDF 并且只想在现有页面中添加一些内容,您最好使用
PdfStamper。查看 iText 示例TwoPasses.java;你基本上只需要做第二遍,搜索SECOND PASS, ADD THE HEADER。 -
我会试试的。这段代码是另一个人写的,我只是想解决这个问题。但现在我将尝试重新编写整个函数,就像链接示例中一样。谢谢!
-
完美,成功了!谢谢