我正在测试iTextSharp来生成ZUGFeRD-文件。我的第一步是从现有的PDF/A-3文件中生成一个符合ZUGFeRD的文件。通过使用PDFACopy并创建必要的PDFFileSpecification,这是成功的。
下一步将是从现有的PDF或PDF/A-1文件生成PDF/A-3文件,这是困难的部分。
首先,当我试图将PDFACopy与常规PDF (而不是PDF/A)结合使用时,我得到了一个错误,即PDFACopy只能用于PDF/A-一致性文件。我的第一个问题是,如何用iTextSharp?从PDF中获取符合PDF/A-3的文件
为了缩小差距,我决定将PDF转换成PDF/A-1文件,并使用鬼怪脚本(cf )。如何使用幽灵脚本将PDF转换为PDF/A或PDF/X?)。这是成功的,我又试了一次。然后错误“不同的PDF/A版本。”被扔出去了。似乎我不能从现有的PDF/A-1复制到一个新的PDF/A-3。如何从现有的PDF(/A-1)中创建这个PDF/A-3?这有可能吗?
这是我的代码:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(XML);
byte[] xmlBytes = Encoding.Default.GetBytes(xmlDoc.OuterXml);
Document doc = new Document();
PdfReader src_reader = new PdfReader(pdfPath);
FileStream fs = new FileStream(DEST, FileMode.Create, FileAccess.ReadWrite);
PdfACopy aCopy = new PdfACopy(doc, fs, PdfAConformanceLevel.ZUGFeRD);
doc.AddLanguage("de-DE");
doc.AddTitle("title");
doc.SetPageSize(src_reader.GetPageSizeWithRotation(1));
aCopy.SetTagged();
aCopy.UserProperties = true;
aCopy.PdfVersion = PdfCopy.VERSION_1_7;
aCopy.ViewerPreferences = PdfCopy.DisplayDocTitle;
aCopy.CreateXmpMetadata();
aCopy.XmpWriter.SetProperty(PdfAXmpWriter.zugferdSchemaNS, PdfAXmpWriter.zugferdDocumentFileName, "ZUGFeRD-invoice.xml");
//Ab hier können keine Metadaten mehr geschrieben werden
doc.Open();
ICC_Profile icc = ICC_Profile.GetInstance(new FileStream(ICM, FileMode.Open));
aCopy.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
[...add the dictionary to doc..]
aCopy.AddDocument(src_reader);
doc.Close();还有一个问题: addDocument工作,但是当我使用copy.addPage(copy.getImportedPage(src_reader,i))时,会抛出一个错误“文档没有页面”。为什么?
发布于 2015-12-11 08:40:50
1.你能把普通的PDF转换成PDF/A文件吗?
答案是:视情况而定。
PDF/A是PDF的子集,涉及到一些义务(例如,所有字体都必须嵌入)和限制(例如不允许Javascript )。iText无法“自动”将常规PDF转换为PDF/A,原因如下。例如:如果字体不是嵌入式的,iText不知道使用哪种字体来替换未嵌入的字体,也不知道在哪里可以找到必要的字体程序。通常,这需要人与人之间的交互,因为用任意的其他字体替换一种字体通常会导致非常难看的PDF。
答案是:这取决于某些人使用iText将PDF转换为PDF/A,但这涉及到很多编程和人工决策。我看到你在使用GhostScript时是成功的。在这种情况下,GhostScript将在您的位置上做出一些决定。这可以导致可接受的结果。在某些情况下,结果将是不可接受的(例如,非常奇怪的PDF如果字体不匹配)。
2.你能把PDF/A-1文件转换成PDF/A-3文件吗?
PDF/A标准的编写方式使旧版本的PDF/A规范永不过时。更新的版本只添加更新的功能。例如: PDF/A-1是基于PDF1.4规范的。可选内容功能(OCG)是在PDF1.5中引入的。OCG的引入是PDF/A-2和PDF/A-1的区别之一。
这意味着每个符合PDF/A-1的文件都会自动符合PDF/A2。但是,PDF/A2文件可能包含PDF/A-1中不支持的功能。
3. PDF/A-2和PDF/A-3的区别是什么?
PDF/A-2和PDF/A-3是相同的,但有一个不同之处: PDF/A-3文件可以有非PDF/A文件的附件。例如: PDF/A-3文件可以有一个Word文件作为附件,一个XLS文件,一个纯文本文件,.您可以提到ZUGFeRD:在这种情况下,PDF/A-3文件至少有一个XML文件作为附件。
概述:
这是对一个广泛问题的广泛回答(你的问题有很多不同的方向,所以很难给你一个具体的答案)。为什么不使用已经内置的ZUGFeRD支持来创建发票呢?阅读ZUGFeRD,开发票的未来获取更多信息。
https://stackoverflow.com/questions/34218658
复制相似问题