(太长的评论...)
正如Ryan提到的,它可能使用DDX。 cfpdf
文档列出Metadata
作为受支持的元素。所以你可能想先看看这个选项。
我发现了一个潜在的iTextSharp的/ C#解决方案
也就是说,没有必要使用一个外部的C#库。 CF已经与旧版本的iText(用java编写)捆绑在一起。所以请改用java类。 iTextSharp是原始Java库的一个端口,所以类和方法名称通常是相同的。
source = "c:/path/to/input.pdf";
target = "c:/path/to/output.pdf";
reader = createObject("java", "com.lowagie.text.pdf.PdfReader").init(source);
output = createObject("java", "java.io.FileOutputStream").init(target);
stamper = createObject("java", "com.lowagie.text.pdf.PdfStamper").init(reader, output);
copyrightName = "YOUR NAME HERE";
copyrightUrl = "http://www.example.com/";
baos = createObject("java", "java.io.ByteArrayOutputStream").init();
xmp = createObject("java", "com.lowagie.text.xml.xmp.XmpWriter").init(baos);
xmp.addRdfDescription("xmlns:dc=""http://purl.org/dc/elements/1.1/""", "<dc:rights><rdf:Alt><rdf:li xml:lang=""x-default"">"& copyrightName &"</rdf:li></rdf:Alt></dc:rights>");
xmp.addRdfDescription("xmlns:xmpRights=""http://ns.adobe.com/xap/1.0/rights/"""
, "<xmpRights:Marked>True</xmpRights:Marked><xmpRights:WebStatement>"& copyrightUrl &"</xmpRights:WebStatement>");
xmp.close();
stamper.setXmpMetadata(baos.toByteArray());
stamper.close();
这个工程! (使用iText比使用DDX方法容易得多。)我试图确定MemoryStream()是什么,它如何与脚本相关以及是否有CF/Java替代方法。它看起来甚至没有必要。我还使用“itextpdf”而不是“lowagie”。如果使用“itextpdf”,更新这些附加元数据字段似乎不起作用。谢谢! – 2014-12-05 00:20:58
iText在几年前经历了一次[重大许可改变](https://en.wikipedia.org/wiki/IText#History)。 ColdFusion与其中一个较旧的版本捆绑在一起,由“com.lowagie。*”包表示。新版本,即5.x使用“com.itextpdf。*”。由于CF不使用较新版本,所以它不起作用。 – Leigh 2014-12-05 02:28:24
*看起来甚至没有必要*不,它是必需的。它被用于在将xmp元数据添加到pdf之前存储它。在上面的例子中,我使用了'ByteArrayOutputStream'而不是'MemoryStream'。 – Leigh 2014-12-05 17:26:47