簡體   English   中英

數字簽名未使用iTextSharp復制

[英]Digital signature is not copied with iTextSharp

我有這種方法,可以將許多頁面的pdf拆分為每頁許多文件。 我注意到,如果pdf包含數字簽名或形狀(例如矩形),iTextsharp不會將這些內容復制到拆分的文件中。 有什么理由嗎? 我在這里想念什么嗎?

 private static void MultipleSplitPdf(IResult result, List<string> fileNames, string directoryforsplit, out List<string> outFileNames)
    {

    if (fileNames.Count == 0)
    {
        result.SetError("no files!");
        outFileNames = null;
        return;
    }
    else
    {
        try
        {
            outFileNames = new List<string>();

            if (FileManager.DeleteDir(result, directoryforsplit) == false)
                return;
            DirectoryInfo dirInfo;
            if (FileManager.GetDirectory(result, directoryforsplit, out dirInfo) == false)
                return;

            int counter = 1;
            foreach (string fileName in fileNames)
            {
                // we create a reader for a certain document
                PdfReader reader = new PdfReader(fileName);
                // we retrieve the total number of pages
                int n = reader.NumberOfPages;
                //Console.WriteLine("There are " + n + " pages in the original file.");

                int pagenumber = n;

                //if (pagenumber == 1)
                //{
                //    FileInfo a = new FileInfo(fileName);
                //    a.CopyTo(directoryforsplit);
                //}

                //else
                    for (int i = 1; i <= pagenumber; i++)
                    {
                        iTextSharp.text.Document document1 = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(i));
                        string splittedFilePath = directoryforsplit + "\\Split" + counter.ToString() + ".pdf";
                        PdfWriter writer1 = PdfWriter.GetInstance(document1, new FileStream(splittedFilePath, FileMode.Create));
                        document1.Open();
                        PdfContentByte cb1 = writer1.DirectContent;
                        PdfImportedPage page;

                        int rotation;

                        document1.SetPageSize(reader.GetPageSizeWithRotation(i));
                        document1.NewPage();
                        page = writer1.GetImportedPage(reader, i);
                        rotation = reader.GetPageRotation(i);
                        if (rotation == 90 || rotation == 270)
                        {
                            cb1.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                        }
                        else
                        {
                            cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                        }
                        counter++;
                        document1.Close();
                    }
            }
            // step 1: creation of a document-object

            //iTextSharp.text.Document document2 = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(pagenumber));
            // step 2: we create a writer that listens to the document

            //PdfWriter writer2 = PdfWriter.GetInstance(document2, new FileStream(args[2], FileMode.Create));
            // step 3: we open the document

            //document2.Open();
            //PdfContentByte cb2 = writer2.DirectContent;


            // step 4: we add content
            //while (i < pagenumber - 1)
            //{

            //}
            //while (i < n)
            //{
            //    i++;
            //    document2.SetPageSize(reader.GetPageSizeWithRotation(i));
            //    document2.NewPage();
            //    page = writer2.GetImportedPage(reader, i);
            //    rotation = reader.GetPageRotation(i);
            //    if (rotation == 90 || rotation == 270)
            //    {
            //        cb2.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
            //    }
            //    else
            //    {
            //        cb2.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
            //    }
            //    Console.WriteLine("Processed page " + i);
            //}
            //// step 5: we close the document

            //document2.Close();
            FileInfo[] wordFiles = dirInfo.GetFiles();

            foreach (var item in wordFiles.OrderBy(i => i.LastWriteTime))
                outFileNames.Add(dirInfo.FullName + "\\" + item.Name);
        }
        catch (Exception e)
        {
            outFileNames = null;
            result.SetError(e.Message + "\n" + e.StackTrace);
            return;
        }
    }

}
  1. 你做錯了! 請閱讀iText in Action的第6章 ,您會發現應該使用PdfStamperPdfCopy ,而不是使用Document / PdfWriter的組合來拆分或合並文檔。 如記錄所示,您的代碼將刪除所有交互式功能! 請參閱如何正確合並文檔? 並閱讀文檔! 本書可免費獲得: StackOverflow上的最佳iText問題
  2. 您的PDF文檔已經過數字簽名 這意味着您不能從中提取頁面, 也不能在不破壞數字簽名的情況下將其與另一個文檔合並 閱讀如何使用Java在數字簽名的pdf中添加空白頁? 找出設計中的錯誤。 您正在嘗試做未完成的事情(通常不限於iText或iTextSharp)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM