Mail Merge - PDF Export - Watermark problem

2 posts, 0 answers
  1. Robert
    Robert avatar
    5 posts
    Member since:
    Dec 2013

    Posted 25 Feb 2015 Link to this post

    Hello all,
    I have the following problem when using the mail merge:
    If I do not have watermark in the document, MailMerge and Export to PDF performs correctly.
    Here is how I do the MailMerge (not full code):

    //loop throught documents
    do
    {
        RadDocument currentDocument = document.MailMergeCurrentRecord();
        if (currentDocument != null)
        {
            //freeze images
            foreach (var image in currentDocument.EnumerateChildrenOfType<ImageInline>())
                image.ImageSource.Freeze();
     
            //Floating images
            foreach (var image in currentDocument.EnumerateChildrenOfType<FloatingImageBlock>())
                image.ImageInline.ImageSource.Freeze();
     
            lock (baton)
                documentQueue.Enqueue(currentDocument);//add new document to a queue for further processing
            currentDocument = null;
        }
     
    } while (document.MailMergeDataSource.MoveToNext());


    and here is how I export to PDF (into a stream):
    public static async Task<Stream> ExportToPDF(RadDocument document)
    {
        PdfFormatProvider provider = new PdfFormatProvider();
        Stream output = new MemoryStream();
     
        await StartSTATask(() =>
        {
            provider.Export(document, output);
        });
        output.Position = 0;
        return output;
    }


    As I have mentioned, the problem occurs when I have a Watermark in my document. Even though Mail Merge performs correctly, the document crashes on the 
    provider.Export(document, output) saying that the current thread cannot access object as different thread owns it.

    Here is full error report:

    at System.Windows.Threading.DispatcherObject.VerifyAccess()
       at System.Windows.Media.Imaging.BitmapSource.get_PixelWidth()
       at System.Windows.Media.Imaging.WriteableBitmap.InitFromBitmapSource(BitmapSource source)
       at Telerik.Windows.Media.Imaging.RadBitmap..ctor(BitmapSource image)
       at Telerik.Windows.Documents.FormatProviders.Pdf.PdfDocumentExporter.SetImageAlpha(WatermarkImageSettings imageSettings, Byte alpha)
       at Telerik.Windows.Documents.FormatProviders.Pdf.PdfDocumentExporter.DrawWatermark(Header header, SectionLayoutBox sectionBox, PdfContentsWriter writer)
       at Telerik.Windows.Documents.FormatProviders.Pdf.PdfDocumentExporter.ExportHeadersAndFooters(SectionLayoutBox sectionBox, PdfContentsWriter writer)
       at Telerik.Windows.Documents.FormatProviders.Pdf.PdfDocumentExporter.ExportPage(SectionLayoutBox sectionBox, PdfContentsWriter writer)
       at Telerik.Windows.Documents.FormatProviders.Pdf.PdfDocumentExporter.<>c__DisplayClass1.<Export>b__0(PdfContentsWriter contentsWriter)
       at Telerik.Windows.Documents.FormatProviders.Pdf.RadPdf.PdfContents.WriteContents(PdfWriter writer)
       at Telerik.Windows.Documents.FormatProviders.Pdf.RadPdf.PdfStream.WriteToCore(PdfWriter writer)
       at Telerik.Windows.Documents.FormatProviders.Pdf.RadPdf.PdfObject.WriteTo(PdfWriter writer)
       at Telerik.Windows.Documents.FormatProviders.Pdf.RadPdf.PdfWriter.WritePdfObject(PdfObject obj)
       at Telerik.Windows.Documents.FormatProviders.Pdf.PdfDocumentExporter.Export()
       at Telerik.Windows.Documents.FormatProviders.Pdf.PdfFormatProvider.Export(RadDocument document, Stream output)
       at IP_DocumentProcessor.MailMerge.IP_MailMerge.<>c__DisplayClass14.<ExportToPDF>b__13() in d:\VB Projects + Silverlight\VS2012APP\IP_DocumentProcessor\IP_DocumentProcessor\MailMerge\IP_MailMerge.cs:line 476
       at IP_DocumentProcessor.MailMerge.IP_MailMerge.<>c__DisplayClass1a.<StartSTATask>b__19() in d:\VB Projects + Silverlight\VS2012APP\IP_DocumentProcessor\IP_DocumentProcessor\MailMerge\IP_MailMerge.cs:line 500
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at IP_DocumentProcessor.MailMerge.IP_MailMerge.<StartSTATask>d__1c.MoveNext() in d:\VB Projects + Silverlight\VS2012APP\IP_DocumentProcessor\IP_DocumentProcessor\MailMerge\IP_MailMerge.cs:line 510
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at IP_DocumentProcessor.MailMerge.IP_MailMerge.<ExportToPDF>d__16.MoveNext() in d:\VB Projects + Silverlight\VS2012APP\IP_DocumentProcessor\IP_DocumentProcessor\MailMerge\IP_MailMerge.cs:line 474
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at IP_DocumentProcessor.MailMerge.IP_MailMerge.<GenerateStreams>d__7.MoveNext() in d:\VB Projects + Silverlight\VS2012APP\IP_DocumentProcessor\IP_DocumentProcessor\MailMerge\IP_MailMerge.cs:line 282
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__1(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
       at System.Threading.ThreadPoolWorkQueue.Dispatch()


    Your help would be highly appreciated as I don't know how to handle this problem.
    Thank you.
    Robert
  2. Boby
    Admin
    Boby avatar
    595 posts

    Posted 27 Feb 2015 Link to this post

    Hi Robert,

    I've proposed a possible solution in the other thread you started:
    Mail Merge - PDF Export - Watermark problem

    Regards,
    Boby
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
  3. UI for WPF is Visual Studio 2017 Ready
Back to Top