2010-11-03 30 views

回答

1

不知道,如果它的工作原理,但这里是我的发现

您可以使用适当的 页面大小的空白PDF作为起点,然后 覆盖在右 位置的PDF段为使用DDX的水印。您 可能需要在添加每个水印 之后将PDF平整。

http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:62109

没有测试的代码,但也许这样的事情?

<cfpdf name="resizedPdf" action="addwatermark" source="blank.pdf" copyfrom="image.pdf"> 
<cfpdf name="resizedPdfWithFooter" action="addfooter" source="resizedPdf" text="xyz"> 

看到<cfpdf> DOC:http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7995.html

+0

我打开的PDF基本上是一个大图形。目前8.5x11,客户想在底部添加一个额外的3“来打印详细信息... – 2010-11-03 17:53:03

+0

它可能仍然工作,从8.5x14空白PDF开始? – Henry 2010-11-03 18:01:05

+0

好吧,不知道我是否让我的最终结果清晰。 1)我有一个8.5x11 PDF我从客户 2接收),我需要做出PDF 8.5x14 3)我需要添加一些页脚文本,我需要在底部3" 这么加,什么我已经完成了(根据您的建议)创建一个空白的8.5x14 PDF 然后,我阅读原始PDF并创建我的页脚文本。但对于DDX中的Watermark,我只能看到如何将文本叠加到现有的PDF上,而不是来自另一个PDF中的内容(如我的原始文件中的内容)。 所以我最终得到的是1个最终的PDF,但有2页,1页是8.5×11的页脚文本和第2页是空白的8.5x14 – 2010-11-03 18:42:12

2

警告:我不是很了解CF,但相当多的关于iText的。

亨利的答案会起作用,但它可能会更有效一些。

你想要一个PdfStamper。更改页面大小不是直接在更高级别上支持的,因此您必须使用低级别的pdf对象调用。就像这样:

final static float POINTS_PER_INCH = 72f; 
final static float INCHES_TO_ADD = 3f; 

PdfReader reader = new PdfReader(pdfPath); // throws 
PdfStamer stamper = new PdfStamper(reader, outputStream); // throws 

for (int curPageNum = 1; curPageNum <= reader.getNumberOfPages(); ++curPageNum) { 
    PdfDictionary pageDict = reader.getPageN(curPageNum); 
    // pdf rects are stored as [llx, lly, urx, ury]. 
    // X increases to the right, Y increases upward. 
    // Note that the origin doesn't have to be 0,0. 
    PdfArray mediaBox = pageDict.getAsArray(PdfName.MEDIABOX); 
    float curBottom = mediaBox.getAsNumber(1).floatValue(); 
    curBottom -= INCHES_TO_ADD * POINTS_PER_INCH; 
    mediaBox.set(1, new PdfNumber(curBottom)); 
} 

stamper.close(); // throws 

除了媒体中,您可能还需要修改裁剪框,使用相同的“得矩形,调整底”技​​术。请注意,您的PDF中可能存在多个其他页面框,可能需要或可能不需要修改...“艺术框”,“修剪框”,“流血框”。我可能已经忘记了一两个。

这几乎肯定会导致底部Y坐标[s]的负值。如果您的PDF是由软件的一小部分处理,这可能是一个问题。这将是他们软件中的一个错误,而不是这个过程。但是,如果你需要解决这样的问题,亨利的代码将做到这一点,产生0,0作为左下角的页面。虽然使用iText编写的软件可能不那么精明,但Adobe不会眨眼睛,iText本身也不会。

+0

感谢您的支持。始终善于学习使用CF中的iText的新方法。 – Leigh 2010-11-03 20:00:18

相关问题