Telerik Forums
Telerik Document Processing Forum
1 answer
263 views

Hi ,
I cannot figure out how to add an invisible signature to an existing PDF.

My test code:


var pdfIn = "C:\\Prg\\Test\\TestTelerikPDF\\pdf\\demo.pdf";
var pdfSigned = $"{pdfIn}.sign.pdf";
var pfx = "C:\\Prg\\Test\\TestTelerikPDF\\pdf\\Cert.pfx";

using (var input = new FileStream(pdfIn, FileMode.Open, FileAccess.Read))
{
    var document = new PdfFormatProvider().Import(input);

    var certificate = new X509Certificate2(pfx, "passs");
    var signatureField = new SignatureField("Blabla");
    signatureField.Signature = new Signature(certificate);

    document.AcroForm.FormFields.Add(signatureField);

    var settings = new PdfExportSettings();
    settings.ComplianceLevel = PdfComplianceLevel.PdfA3B;

    var formatProvider = new PdfFormatProvider();
    formatProvider.ExportSettings = settings;

    using (var ms = new FileStream(pdfSigned, FileMode.Create))
        formatProvider.Export(document, ms);
}

This code create an output PDF but the signature is missing :-(

Can you help me please?

Best

Kamil 

Yoan
Telerik team
 answered on 17 Jan 2023
1 answer
336 views

Hi,

some of those are briefly mentioned in the docs, others have been subject in previous requests in this forum. Nevertheless, I could not succeed doing these things. It is really hard to describe what i want properly, but i try my best:

- I want the content to take more space of the A4 page, means i want to crop away some of the white space of the top, right, bottom and left to make more room for the content.

- I want a table to take up 100% of the page's height and then in one column have one text block to be positioned at the top and another text block at the bottom. Similar to using flexbox in css and have it "justify-content: space-between", see the "text block" elements in the attached jpeg

- I need page numbers on each page. This was requested a number of times, but it seems like it was still not implemented. Is this correct? What is the best way to do this in 2023? see the numbers at the bottom in the jpeg

- I want to add a repeating page header to each page. see the Repeating Heading element in the jpeg

I created a rough layout design, which is attached as jpeg. Imagine the layout to be a table with currently one row and two columns.

I also took the current c# code and attached it.

Yoan
Telerik team
 answered on 12 Jan 2023
3 answers
589 views

I want to import pdf document to a RadFlowWordDocument in the current Run from code.

Is it possible? I have imported pdf using RadEditor.

 

Maria
Telerik team
 answered on 05 Jan 2023
1 answer
343 views

Basically i am trivarsing whole word document template and updating the text of merge field run.
But after updating the text i want to delete the merge field. How to do that?

var currentDocument = document.EnumerateChildrenOfType<DocumentElementBase>().ToList();
                    int indexElement = 0;
                    foreach (var currentElement in currentDocument)
                    { 

if (currentElement.GetType() == typeof(Run))
                        {
                            currentRun = (Run)currentElement;

 if (currentRun.Text.StartsWith("«") && currentRun.Text.Length > 2)
                            {

string runText= currentRun.Text.Substring(1, currentRun.Text.Length - 2);
if(runText == "name")
currentRun.Text = "faraz";

}

Now after updating the text i want to delete the merge field and maintain the run text. How to do that?

Yoan
Telerik team
 answered on 29 Dec 2022
1 answer
213 views

I'm using RadFlowDocument editor to insert a document in a specific position after a text from run.

So flow is read a document runs and when a text is reach insert another RawFlowDocument in it.

But the problem is always adding it in the end.

I want to insert it at specific position. 

There are total 3 documents that needs to be added at specific position.
The run text shows i am at the right position but the generated document always shows new document in the end.

else if (currentRun.Text.EndsWith("Template»"))
                                {

                                    string ebrTemplateName = currentRun.Text.Substring(7, currentRun.Text.Length - 8);
                                    var currentT = ModifyTemplate(ebrTemplateName, jsonToken + "[" + i + "].");
                                    if (currentT != null)
                                    {


                                       // documents.Enqueue(new DocumentsStack { document = currentT, run = currentRun });
                                        currentRun.GetEditorBefore().InsertDocument(currentT);
                                         //editor.InsertDocument(currentT);
                                        
                                    }

                                }
Maria
Telerik team
 answered on 23 Dec 2022
4 answers
288 views

I'm using RadFlowDocument to edit a document (docx), this file is a combination of different docx file.

I have to add Table of content in this file. I saw this code but it is using RadDocument instead of RadFlowDocument class

RadDocument document = new RadDocument();
RadDocumentEditor editor = new RadDocumentEditor(new RadDocument());
editor.InsertField(new TableOfContentsField(), FieldDisplayMode.Result);

How can I add ToC using RadFlowDocument ?

Thanks

Muhammad
Top achievements
Rank 1
Iron
 answered on 22 Dec 2022
1 answer
1.0K+ views

I am trying to generate a PDF document but don't know how to control the Page size. As the printout is most likely A4, I would like to print it horizontally in order to fit my table in. The following is my code snippet. The first few rows of the table are the header.

        // ----------------------------------------------
        // Print Request Test Schedule Allocation
        // -----------------------------------------------
        private void cmdPrint_Click(object sender, EventArgs e)
        {
            FixedContentEditor editor;
            RadFixedDocument document;
            RadFixedPage page;

            document = new RadFixedDocument();
            page = document.Pages.AddPage();
            editor = new FixedContentEditor(page, new SimplePosition());           

            Table table = new Table();
            table.BorderCollapse = BorderCollapse.Separate;
            table.LayoutType = TableLayoutType.AutoFit;
            table.Margin = new System.Windows.Thickness(50);

            table = SetTableHeader(table);

            editor.DrawTable(table)

            TableRow tableRow;
            foreach (KeyValuePair<string, TDFCollection> tDFObject in T.FileList)
            {
                Block block = new Block();
                string name = tDFObject.Value.TDFName;
                string desc = tDFObject.Value.TDFDescription;
                string requester = tDFObject.Value.Requester;
                string duration = tDFObject.Value.Duration.ToString();

                tableRow = table.Rows.AddTableRow();
                tableRow.Cells.AddTableCell().PreferredWidth = 20;
                block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
                block.TextProperties.FontSize = 12;
                block.InsertText(name);
                tableRow.Cells.AddTableCell().PreferredWidth = 30;
                block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
                block.TextProperties.FontSize = 12;
                block.InsertText(desc);
                tableRow.Cells.AddTableCell().PreferredWidth = 35;
                block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
                block.TextProperties.FontSize = 12;
                block.InsertText(requester);
                tableRow.Cells.AddTableCell().PreferredWidth = 5;
                block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
                block.HorizontalAlignment = Telerik.Windows.Documents.Fixed.Model.Editing.Flow.HorizontalAlignment.Center;
                block.TextProperties.FontSize = 12;
                block.InsertText(duration);                
            }
            editor.DrawTable(table);

            int index = 0;
            string agendaFile = null;
            while (true)
            {
                index++;
                agendaFile = T.TEST_Scheduling + "Request Allocation" + " (" + index.ToString() + ").pdf";
                if (!File.Exists(agendaFile)) break;
            }

            PdfFormatProvider provider = new PdfFormatProvider();
            try
            {
                using (Stream output = File.OpenWrite(agendaFile))
                {
                    provider.Export(document, output);
                }
            }
            catch (Exception ex)
            {
                T.WriteLine("PDF Stream Write Exception : " + ex.Message);
                MessageBox.Show(ex.Message, "PDF Output Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            MessageBox.Show("Test Schedule Allocation Requests PDF is created", "Print Test Allocation Requests", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        // ---------------
        //  Set PDF Header
        // ---------------
        private Table SetTableHeader(Table table)
        {
            TableRow tableRow;
            tableRow = table.Rows.AddTableRow();
            tableRow.Cells.AddTableCell().PreferredWidth = 30;
            Block block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
            block.TextProperties.FontSize= 14;
            block.GraphicProperties.FillColor = new RgbColor(0, 0, 139);
            block.InsertText("TEST SCHEDULING REQUESTS");         

            tableRow = table.Rows.AddTableRow();
            block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
            block.TextProperties.FontSize = 12;
            block.InsertText(" ");

            tableRow = table.Rows.AddTableRow();
            tableRow.Cells.AddTableCell().PreferredWidth = 30;
            block.TextProperties.FontSize = 12;
            block = tableRow.Cells.AddTableCell().Blocks.AddBlock();           
            block.GraphicProperties.FillColor = new RgbColor(0, 0, 139);
            block.TextProperties.UnderlineColor = new RgbColor(0, 0, 139);
            block.InsertText("Test Definition");
            block.InsertLineBreak();

            tableRow.Cells.AddTableCell().PreferredWidth = 30;
            block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
            block.TextProperties.FontSize = 12;
            block.GraphicProperties.FillColor = new RgbColor(0, 0, 139);
            block.TextProperties.UnderlineColor = new RgbColor(0, 0, 139);
            block.InsertText("Description");

            tableRow.Cells.AddTableCell().PreferredWidth = 35;
            block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
            block.TextProperties.FontSize = 12;
            block.GraphicProperties.FillColor = new RgbColor(0, 0, 139);
            block.TextProperties.UnderlineColor = new RgbColor(0, 0, 139);
            block.InsertText("Requester");

            tableRow.Cells.AddTableCell().PreferredWidth = 5;
            block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
            block.TextProperties.FontSize = 12;
            block.GraphicProperties.FillColor = new RgbColor(0, 0, 139);
            block.TextProperties.UnderlineColor = new RgbColor(0, 0, 139);
            block.InsertText("Duration");

            block = tableRow.Cells.AddTableCell().Blocks.AddBlock();
            block.TextProperties.FontSize = 12;
            block.InsertText("    ");

            return table;
        }   
    }

                                      
Yoan
Telerik team
 answered on 14 Dec 2022
1 answer
591 views

Hi, i'm trying to use document processing to convert HTML template to PDF, but fonts are missing from resulting file, maybe even from the imported html.

How can I find out if the fonts are already missing after importing HTML?

What is the best way to convert HTML to PDF keeping images, fonts, etc. using document processing?

This is one of my attempts to get it to work.

static void Main(string[] args)
        {
            string templateFileName = @"html template.htm";
            string pdfPath = @"test html template to pdf.pdf";
            FileStream templateAsStream = new FileStream(templateFileName, FileMode.Open, FileAccess.Read);

            ///////////
            //telerik
            ///////////

            

            try
            {               
                // Register the font 
                byte[] fontDataR = File.ReadAllBytes("Raleway-VariableFont_wght.ttf");
                System.Windows.Media.FontFamily fontFamilyR = new System.Windows.Media.FontFamily("Releway");
                byte[] fontDataRL = File.ReadAllBytes("Raleway-Light.ttf");
                System.Windows.Media.FontFamily fontFamilyRL = new System.Windows.Media.FontFamily("Releway Light");

                //Telerik.Windows.Documents.Fixed.Model.Fonts.
                FontsRepository.RegisterFont(fontFamilyR, System.Windows.FontStyles.Normal, System.Windows.FontWeights.Normal, fontDataR);
                FontsRepository.RegisterFont(fontFamilyRL, System.Windows.FontStyles.Normal, System.Windows.FontWeights.Normal, fontDataRL);

                byte[] fontDataRb = File.ReadAllBytes("Raleway-Bold.ttf");
                System.Windows.Media.FontFamily fontFamilyRb = new System.Windows.Media.FontFamily("Releway");
                //Telerik.Windows.Documents.Fixed.Model.Fonts.
                FontsRepository.RegisterFont(fontFamilyR, System.Windows.FontStyles.Normal, System.Windows.FontWeights.Bold, fontDataRb);


                //import AFTER setting fonts
                //Telerik.Windows.Documents.Flow.FormatProviders.Html.
                HtmlFormatProvider htmlProvider = new HtmlFormatProvider();
                HtmlImportSettings importSettings = new HtmlImportSettings();
                HtmlExportSettings exportSettings = new HtmlExportSettings();
                var document = htmlProvider.Import(templateAsStream);                

                PdfFormatProvider pdfProvider = new PdfFormatProvider();

                //Telerik.Windows.Documents.Extensibility.FontsProviderBase fontsProvider = new FontsProvider();
                //Telerik.Windows.Documents.Extensibility.FixedExtensibilityManager.FontsProvider = fontsProvider;

                PdfExportSettings pdfExportSettings = new PdfExportSettings();
                pdfExportSettings.ShouldEmbedFonts = true;

                pdfProvider.ExportSettings = pdfExportSettings;


                FileStream stream = File.Create("fixed pdf.pdf");
                var radFixedDocument = (new Telerik.Windows.Documents.Flow.FormatProviders.Pdf.PdfFormatProvider()).ExportToFixedDocument(document);
                var fixedFormatProvider = new Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.PdfFormatProvider();
                fixedFormatProvider.Export(radFixedDocument, stream);
                stream.Close();

                //var resultBytes = pdfProvider.Export(document);
                //File.WriteAllBytes(pdfPath, resultBytes);

            }
            catch(Exception e)
            {
                throw e;
            }

I have also attached html file that is result of importing html and then export html

 

also I get this in pdf reader both if I use embed fonts option or not

 

https://www.telerik.com/forums/radflowdocument-to-pdf---arialnarrow-font-issues

Maria
Telerik team
 answered on 12 Dec 2022
1 answer
196 views
Hello,

I have two, semi-related questions.

Question 1: Is it possible append pages using PDFStreamWriter to an existing document without fully overwriting it and wiping out the Document level properties?

I need to create a PDF report that is a combination of code generated pages and an appendix of externally sourced PDFs (cut sheets, specification documents, etc.). Since I don't need to modify the appendix PDFs, I'd like to create the code portion using the RadFixedDocument and then attach the appendix PDFs using the more memory efficient PDFStreamWriter. Unfortunately, I need to retain bookmarks, interactive form fields and other document level data from the code generated portion, so I can't use the Page-by-Page Stream merge shown in your examples.

I would much prefer to use the PDFStreamWriter merge method since, again, I do not modify the appendix PDFs and, since the PDFs can be quite large, the memory footprint with RadFixedDocument is very high.

Question 2: Is there a way to direct which font is used for unrecognized Font types during import? Alternatively, is there a setting I can apply so Merged/Imported PDF content will not be modified?

Assuming I need to use RadFixedDocument to maintain the bookmarks, when I import some appendix PDFs any non-embedded fonts that aren't recognized are defaulted to Helvetica. This results in a bad presentation of the final merged export. This occurs even when I manually register the font in the FontsRepository before importing.

Attached are example images and a Zip containing the PDF and Font ttf.

I am using the Telerik.Windows.Documents.Fixed API for .NET Framework.

Thank you,
Aidan D.
Dimitar
Telerik team
 answered on 09 Dec 2022
1 answer
329 views

Hi 

I am working on code to read DOCX from user, then I will replace text in DOCX by our data. 

Anyway, I want to validate all font that is used by uploaded document. Can you provide me code snippet?

I have debugged Run, StyleRepository, Paragrah but no luck. it just display default Verdana.

Yoan
Telerik team
 answered on 06 Dec 2022
Narrow your results
Selected tags
Tags
+? more
Top users last month
Bohdan
Top achievements
Rank 3
Iron
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
Elliot
Top achievements
Rank 1
Iron
Iron
Iron
Sunil
Top achievements
Rank 1
Cynthia
Top achievements
Rank 1
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Bohdan
Top achievements
Rank 3
Iron
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
Elliot
Top achievements
Rank 1
Iron
Iron
Iron
Sunil
Top achievements
Rank 1
Cynthia
Top achievements
Rank 1
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?