国产化系统 netcore 操作PDF(解决合成PDF域消失问题)

本文介绍了在国产化系统中使用netcore和ItextSharp处理PDF时遇到的问题,即合成PDF后内容域消失。文章详细阐述了如何合成PDF、回填内容以及选择特定页面,并探讨了GetImportedPage方法导致PDF域内容破坏的原因。
摘要由CSDN通过智能技术生成

本文内容未经作者允许不能转发 复制 发表

本文使用ItextSharp 国产化系统下netcore操作PDF

主要解决取出PDF页后在合成 PDF域找不到得问题

我得功能是十个PDF 我需要合成一个PDF 并且取出指定几页PDF 合成一个新得PDF 内容域存在

1)合成PDF

2)回填内容

3)取出想要得页

合成PDF

/// <summary>
        /// 多个PDF合成
        /// </summary>
        /// <param name="Files"></param>
        /// <param name="OuntPdfFileName"></param>
        public static void RMergePDFFile(List<string> Files, string outMergeFile)
        {

            FileStream baos = new FileStream(outMergeFile, FileMode.Create, FileAccess.Write);
            PdfCopyFields copyFields = new PdfCopyFields(baos);
            // int documentnumber = 0;
            for (int i = 0; i < Files.Count; i++)
            {
                PdfReader reader = new PdfReader(Files[i]);
                copyFields.AddDocument(reader);
                reader.Close();

            }
            copyFields.Close();
            baos.Dispose();
        }

内容域回填

CONTENT 为域得key

使用Hashtable能获得PDF得所有域内容

    public static void SetPDFCONTENTValue(string strDestTempPath, string strSrcTempPath, string value)
        {    // 读取PDF模版文件

            FileStream fileStream = new FileStream(strDestTempPath, FileMode.Create);

            PdfReader pdfRead = new PdfReader(strSrcTempPath);
            PdfStamper stamp = new PdfStamper(pdfRead, fileStream);
            AcroFields form = stamp.AcroFields;
            Hashtable hash = form.Fields;

            BaseFont bfChinese =
            BaseFont.CreateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            form.SetFieldProperty("CONTENT", "textfont", bfChinese/* BaseFont.createFont() */, null);
            form.SetField("CONTENT", value);
            // stamp.FormFlattening = true;
            stamp.Close();
            pdfRead.Close();
            fileStream.Dispose();
        }

删除多余得页数

Selectpages(1,2,3,5,7)能取出 12357页合成新的PDF 域依然存在

   /// <summary>
        /// 删除多余数据
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="outfile"></param>
        /// <param name="pagenum"></param>
        public static void DeletePDFPage(string fileName, string outfile, string pagenum)
        {
            using (Stream resultPDFOutputStream = new FileStream(outfile, mode: FileMode.Create))
            {
                // Create a reader from the file bytes.
                var reader = new PdfReader(fileName);
                reader.SelectPages(pagenum);

                PdfStamper pdfStamper = new PdfStamper(reader, resultPDFOutputStream);
                pdfStamper.Close();
                reader.Close();
            }
        }

为什么先取出页在合并域得内容就消失了那?

只要使用GetImportedPage PDF页得内容就会被破坏 就这样子

  PdfImportedPage page = copy.GetImportedPage(reader, j);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小慧哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值