/AF 参考使用 iTextSharp 嵌入 PDF 的文件

问题描述 投票:0回答:1

我正在努力将对 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();

如何写得更好?

pdf itext
1个回答
0
投票

iTextSharp 已停产并由 iText 取代。仅供参考,以防有人仍在使用旧库。添加“/AF”引用的正确方法是这样的:

var arr = new PdfArray {fs.Reference};
pdfWriter.ExtraCatalog.Put(PdfName.AF, arr);
© www.soinside.com 2019 - 2024. All rights reserved.