我试图使用ColdFusion & iText设置PDF的版权元数据。Adobe 9-11允许获取和设置标题、主题、关键字、Creator和Author字段,但似乎不允许访问“附加元数据”属性。(这是我第一个这样的问题。)
我找到了一个潜在的iTextSharp/C#解决方案,并尝试将其转换为CFML,但我还无法确定如何成功地访问System.IO.MemoryStream() w/ColdFusion。我得到一个“未能找到ColdFusion组件或接口MemoryStream。请确保名称是正确的,并且组件或接口存在。”错误和搜索互联网并没有提供任何结果。
https://stackoverflow.com/a/6942531/693068
注意:我使用的是iText,因为FineReader文件是使用ABBYY FineReader创建的。我曾经遇到过许多问题,在使用ColdFusion ()时,isPDFFile拒绝将非Acrobat生成的PDF识别为有效的PDF。
有什么想法吗?该功能目前是否存在,只是在任何地方都没有记录?谢谢。
发布于 2014-12-04 23:24:55
(太长而不能发表评论.)
正如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();
发布于 2014-12-04 19:51:36
您可以使用DDX功能来完成这一任务。请参阅以下链接:
System.IO.MemoryStream
是一个C#类。您将无法直接从CFML访问它。您可以尝试使用.net集成特性直接访问它,或者直接使用iTextSharp解决方案。
https://stackoverflow.com/questions/27302621
复制相似问题