我正在努力将对 iTextSharp 库刚刚添加的嵌入文件对象的“/AF”引用包含到 PDF 目录中。下面的代码可以工作,但是字符串文字 PdfLiteral("[2 0 R]") 是难以忍受的,因为对嵌入文件的引用当然可能有除“2 0”之外的任何其他数字:
PdfReader reader = new PdfReader("C:\\ZUGFeRD\\zugferd_2p1_EN16931_Einfach_stripped.pdf");
FileStream outputstream = new FileStream("C:\\ZUGFeRD\\zugferd_2p1_EN16931_Einfach2.pdf", FileMode.Create);
PdfStamper stamp = new PdfStamper(reader, outputstream);
PdfWriter writer = stamp.Writer;
byte[] bytes = System.IO.File.ReadAllBytes("C:\\ZUGFeRD\\factur-x.xml");
// Sample spec: Desc(factur-x.xml) / EF <</ UF 4 0 R / F 4 0 R >>/ Type / Filespec / AFRelationship / Alternative / F(factur-x.xml) / UF(factur - x.xml)
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(writer, "", "factur-x.xml", bytes, false, "text/xml", null);
fs.Put(PdfName.AFRELATIONSHIP, new PdfName("Source"));
stamp.AddFileAttachment("factur-x.xml", fs);
stamp.Writer.ExtraCatalog.Put(PdfName.AF, new PdfLiteral("[2 0 R]"));
stamp.Close();
如何写得更好?
iTextSharp 已停产并由 iText 取代。仅供参考,以防有人仍在使用旧库。添加“/AF”引用的正确方法是这样的:
var arr = new PdfArray {fs.Reference};
pdfWriter.ExtraCatalog.Put(PdfName.AF, arr);