ItextSharp изменить требует времени - PullRequest
0 голосов
/ 06 июня 2018

У меня есть шаблон pdf, и я хочу добавить к этому шаблону «действие по выбору», это должно быть сделано для всех моих Получателей, которых они составляют 4000.

Это означает, что я долженв конечном итоге 4000 файлов PDF для каждого получателя.Но это занимает очень много времени, около 500 файлов / 12 минут.

Примечание: размер шаблона составляет 340 КБ

Я создал службу Windows, чтобы выполнить эту работу, и это кодкоторая выполняет работу:

private static byte[] GeneratePdfFromPdfFile(byte[] file, string landingPage, string code)
{
    try
    {
        using (var ms = new MemoryStream())
        {
            var reader = new PdfReader(file);
            var stamper = new PdfStamper(reader, ms);
            string _embeddedURL = "http://" + landingPage + "/Default.aspx?code=" + code + "&m=" + eventCode18;
            PdfAction act = new PdfAction(_embeddedURL);
            stamper.Writer.SetOpenAction(act);
            stamper.Close();
            reader.Close();
            return ms.ToArray();
        }
    }
    catch (Exception ex)
    {
        return null;
    }
}



public static byte[] GenerateAttachment(AttachmentExtenstion type, string Contents, string FileName, string code, string landingPage, bool zipped, byte[] File = null)
        {
            byte[] finalVal = null;
            try
            {
                switch (type)
                {
                    case AttachmentExtenstion.PDF:
                        finalVal = GeneratePdfFromPdfFile(File, landingPage, code);
                        break;
                    case AttachmentExtenstion.WordX:
                    case AttachmentExtenstion.Word:
                        finalVal = GenerateWordFromDocFile(File, code, landingPage);
                        break;
                    case AttachmentExtenstion.HTML:
                        finalVal = GenerateHtmlFile(Contents, code, landingPage);
                        break;
                }
                return zipped ? _getZippedFile(finalVal, FileName) : finalVal;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                GC.Collect();
            }
        }

метод GenerateAttachment вызывается для каждого получателя, потому что действие основано на идентификаторе получателя, и я использую этот подход для итерации по списку, чтобы ускорить процесс

 Parallel.ForEach(listRecipients.AsEnumerable(),
                 new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 2 },
                 (item) =>
                    {                      

         File.WriteAllBytes(AppDomain.CurrentDomain.BaseDirectory + @"Attachments\" + group.Code + @"\" + item.Scenario.CampaignCode + @"\" + item.CMPRCode + "." + extension,
                            GenerateAttachment(_type, value, item.AttachmentName, item.CMPRCode, item.Scenario.LandingDomain, item.Scenario.AttachmentZip.Value));

                    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...