Telerik Forums
Telerik Document Processing Forum
1 answer
511 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
148 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
251 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
0 answers
213 views

Hello,

This post is not a question.  I simply wanted to share my partial solution for those who may need it.

Below is a manual method for creating a Block with justified text in the PDFProcessing API.  This makes use of the Block object's Measure method and the WordSpacing property to adjust each line until the indicated width is filled. 

PLEASE NOTE:

  • While I tried to account for it, I have not tested this code for compatibility with multiple paragraphs or blank lines. 
  • It is intended for small portions of text and will not likely scale well with a full document.

Best Regards,

Aidan D.

TAGS FOR GOOGLE: Justify, Alignment

using System; using System.Collections.Generic; using Telerik.Windows.Documents.Fixed.Model.Editing; using Telerik.Windows.Documents.Fixed.Model.Fonts; classTextJustify { public static void InsertJustifiedBlock(FixedContentEditor PageEditor, string Text, int TextBoxWidth) { Block justifiedBlock = CreateJustifiedBlock(Text, TextBoxWidth, PageEditor.TextProperties.Font, PageEditor.TextProperties.FontSize); PageEditor.DrawBlock(justifiedBlock); } public static Block CreateJustifiedBlock(string Text, int TextBoxWidth, FontBase Font, double FontSize) { Block justifiedBlock = new Block(); double currentSpacing = 0; double spacingStep = 1; string currentLine; if (Text.Length > 0) { { var withBlock = justifiedBlock.TextProperties; // Default word spacing. Must be initialized to 0 before use. This defaults to Nothing/Null// and will not function correctly if not initialized. withBlock.WordSpacing = 0; withBlock.Font = Font; withBlock.FontSize = FontSize; } // We need a seperate block to use as a measuring tool using the same text properties as the justified block. Block measuringBlock = new Block(justifiedBlock); // Make sure the WordSpacing property is initialized to zero. // Break the text string into lines, adding as many full words as we can to each line.// This does not support hyphenation. List<string> lines = breakIntoLines(Text, TextBoxWidth, ref measuringBlock); for (int i = 0; i <= lines.Count - 1; i++) { currentLine = lines[i]; // For all except the last line, space out the words to fill the allowed space.if (i < (lines.Count - 1)) { do { // Set the word spacing before inserting the text. measuringBlock.TextProperties.WordSpacing = currentSpacing; // We need to reinsert the text each time the spacing changes since the spacing is only applied on insert measuringBlock.Clear(); measuringBlock.InsertText(currentLine); measuringBlock.Measure(); if (measuringBlock.DesiredSize.Width > TextBoxWidth && spacingStep != 0.01) { // Step back by one then narrow in at finer increments currentSpacing -= spacingStep; spacingStep /= 10; currentSpacing += spacingStep; continue; } currentSpacing += spacingStep; } while (measuringBlock.DesiredSize.Width > TextBoxWidth && spacingStep == 0.01); // Reduce by one step to bring it back into allowed width currentSpacing -= spacingStep; } // Add the line of text with the appropriate spacing.using (justifiedBlock.SaveTextProperties()) { justifiedBlock.TextProperties.WordSpacing = currentSpacing; justifiedBlock.InsertText(currentLine); justifiedBlock.InsertLineBreak(); } // Reset for next line currentSpacing = 0; spacingStep = 1; } } return justifiedBlock; } private static List<string> breakIntoLines(string Text, int maxLineWidth, ref Block measuringBlock) { List<string> sResults = new List<string>(); string[] lines = Text.Split(newstring[] { "\n", "\r\n" }, StringSplitOptions.None); foreach (string line in lines) { string[] words = line.Split(newstring[] { " " }, StringSplitOptions.RemoveEmptyEntries); sResults.Add(""); // Initialize the line. This may remain empty if the line is blank.for (int i = 0; i <= words.Length - 1; i++) { if (sResults[sResults.Count - 1].Length == 0) sResults[sResults.Count - 1] = words[i]; else { string testLine = string.Concat(sResults[sResults.Count - 1], " ", words[i]); measuringBlock.InsertText(testLine); measuringBlock.Measure(); if (measuringBlock.DesiredSize.Width <= maxLineWidth) // Replace with new, longer line sResults[sResults.Count - 1] = testLine; else// Start new line sResults.Add(words[i]); // Remove text from measuring block to reset for next word measuringBlock.Clear(); } } } return sResults; } }


Aidan
Top achievements
Rank 1
 updated question on 05 Dec 2022
1 answer
130 views

Hi,
there seems to be a bug in the PdfFormatProvider Import code.

When using swedish culture, the read PDF data has incorrect position matrices, causing all elements to disappear.

Example ("en"):

{
    "Matrix": {
        "IsIdentity": false,
        "Determinant": 1.7777777777777777,
        "M11": 1.3333333333333333,
        "M12": 0,
        "M21": 0,
        "M22": 1.3333333333333333,
        "OffsetX": 0,
        "OffsetY": 0
    }
}

Example ("sv"):

{
    "Matrix": {
        "IsIdentity": false,
        "Determinant": 0,
        "M11": 1.3333333333333333,
        "M12": 0,
        "M21": 0,
        "M22": 0,
        "OffsetX": 0,
        "OffsetY": 0
    }
}

 

Once found, it's easy for me to work around this big.
But it looks like it should be easy to fix!

Thanks,
Anton

Martin
Telerik team
 answered on 02 Dec 2022
1 answer
125 views

Hello.
I faced several problems with the attribute "text-align: justify".
1) In the report I have a table that displays some note. This note is retrieved from the database as a string with html-markup (with all necessary tags and its different attributes). All properties of the attribute "Style" work as expected except "text-align: justify". As a result in HTML-viewer I have the note (s.attached overwritten1.png). The text somehow is overlapped/owerwritten. In PDF it looks good though (s.attached overwritten1_PDF.png). In the Sdandalone Report Designer (Preview mode) it works correctly. Unfortunately I can't reproduce the issue with demo example and CSV datasource, but when the report runs and retrieves justified note from the database the issue occurs each time.

2) Another problem is with justifying of the bold-text (s.attached bold.png): I tried to reproduce it in the example (s.attached zip-archive).
When the text has bold font-weight (using <strong>-tag) it is not justified even in Designer (Preview mode).  In PDF it is also absolutely incorrect: with left-alignment text doesn't match the table size at all, with justify-alignment  -  text is overlapped and overwritten

3) I have the report title: bold (s.attached bold.png), text-align: center
In both in HTML-viewer and PDF the title is cut. Without bold font-weight it is wrapped correctly. But I can't remove it. I need this formatting.

Looking forward to your help in these matters. 

Best regards,
Elena

Dimitar
Telerik team
 answered on 22 Nov 2022
1 answer
130 views

I am trying to import HTML but when I try to export the radflowdocument it is blank .  (i've exported to both HTML and PDF)

this is in blazor WASM.


Thanks
Phil

Maria
Telerik team
 answered on 18 Nov 2022
1 answer
215 views

I'm using Telerik.Documents.Spreadsheet (2022.3.1108) .Net C# 6.0.  I have my excel spreadsheet formated as I want (Excel.png).  The text in the cells are clearly visible.  Once the same spreadsheet is export using PdfFormatProvider.  The last half a character is trimmed (not visible). (Pdf.png).  While creating the excel file I do have "AutoFitWidth()" set for all the columns.

 

Export Code here


        public void CreatePdf(Workbook wb, string fileName)
        {
            var fixedProvider = new Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.PdfFormatProvider();
            RadFixedDocument fixedDocument = fixedProvider.ExportToFixedDocument(wb);
                        

            var pdfFormatProvider = new Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.PdfFormatProvider();
            pdfFormatProvider.ExportSettings.ShouldEmbedFonts = true;

             using (Stream output = File.OpenWrite($"c:\\temp\\{fileName}.pdf"))
            {
                pdfFormatProvider.Export(fixedDocument, output);
            }
        }

Nikolay Demirev
Telerik team
 answered on 10 Nov 2022
1 answer
203 views

When I convert a document from .docx to .PDF, the footer disappears.  There are a couple checkboxes in the docx that disappear as well.  Does this library support these things?  Is there something specific I have to do to make them work?

 

My code:


                RadFlowDocument document;

                Telerik.Documents.ImageUtils.ImagePropertiesResolver defaultImagePropertiesResolver = new Telerik.Documents.ImageUtils.ImagePropertiesResolver();
                Telerik.Windows.Documents.Extensibility.FixedExtensibilityManager.ImagePropertiesResolver = defaultImagePropertiesResolver;

                using (FileStream input = new FileStream("file.bin", FileMode.Create, System.IO.FileAccess.ReadWrite))
                {
                    input.Write(doc.Content, 0, doc.Content.Count());

                    DocxFormatProvider provider = new DocxFormatProvider();
                    document = provider.Import(input);

                    //insert the data
                    RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document);

                    foreach (var item in templateValues)
                    {
                        editor.ReplaceText(item.Key, item.Value);
                    }

                    //change the value in the footer
                    editor.ReplaceText("[Document Revised Date]", doc.lastModified.ToShortDateString());

                    PdfFormatProvider pdfProvider = new PdfFormatProvider();
                    var result = pdfProvider.Export(document);

                    return result;

Peshito
Telerik team
 answered on 10 Nov 2022
1 answer
164 views

Hello All,

I am using the RadSpreadStreamProcessing to export data to an Excel spreadsheet and I would like to know how to declare the column headers in the exported spreadsheet as Sortable/Filterable?  Is there an example that I can be pointed to?

Thanks for any help you can provide.

W

Tanya
Telerik team
 answered on 01 Nov 2022
Narrow your results
Selected tags
Tags
+? more
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?