我试图使用ColdFusion& amp ;;设置PDF的版权元数据。 iText的。 Adobe ColdFusion 9-11允许获得&设置标题,主题,关键字,创作者和作者字段,但似乎不允许访问"其他元数据"属性。 (这是我的第一个问题。)
我发现了一个潜在的iTextSharp / C#解决方案,并尝试将其转换为CFML,但我还没能确定如何成功访问System.IO.MemoryStream()w / ColdFusion。我得到了一个"找不到ColdFusion组件或接口MemoryStream。确保名称正确并且组件或接口存在。"错误和搜索互联网并没有提供任何结果。
https://stackoverflow.com/a/6942531/693068
注意:我使用iText,因为PDF文件是使用ABBYY FineReader创建的。我在过去遇到过很多问题,当使用isPDFFile()时,ColdFusion拒绝将非Acrobat生成的PDF识别为有效的PDF。
有什么想法吗?功能目前是否存在,而且没有记录在任何地方?感谢。
答案 0 :(得分:5)
(评论太长了......)
正如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();
答案 1 :(得分:1)
您可以使用DDX功能执行此操作。请参阅以下链接:
System.IO.MemoryStream
是一个C#类。您无法直接从CFML访问它。您可以尝试直接使用.net integration features来访问它或iTextSharp解决方案。