Hi,
I am trying to convert a HTML body to a PDF using HtmlFormatProvider and PdfFormatProvider.
It works well when I try to create a pdf with "normal" characters, but when I use characters like "åäö" the characters is either missing or replaced with other character.
I have found a similiar issue but that was due to the fact that the person was using .net core I am using .net framework.
Am I missing something when I am converting it to a PDF or is there a limitation with special characters like "åäö".
private string CreateAndStorePdf(string htmlBody)
{
Telerik.Windows.Documents.Extensibility.JpegImageConverterBase jpegImageConverter = new Telerik.Documents.ImageUtils.JpegImageConverter();
Telerik.Windows.Documents.Extensibility.FixedExtensibilityManager.JpegImageConverter = jpegImageConverter;
var provider = new HtmlFormatProvider();
var document = provider.Import(htmlBody);
var exportProvider = new PdfFormatProvider();
var fixedExportProvider = new Telerik.Windows.Documents.Flow.FormatProviders.Pdf.PdfFormatProvider();
var fileName = "_original.pdf";
try
{
using (var outputStream = new MemoryStream())
{
exportProvider.Export(fixedExportProvider.ExportToFixedDocument(document), outputStream);
outputStream.Seek(0, SeekOrigin.Begin);
var pdfBytes = new BinaryReader(outputStream).ReadBytes((int)outputStream.Length);
return fileName;
}
}
catch (Exception ex)
{
Log.Error(ex, "The pdf could not be created.");
return null;
}
}
When using the RadFixedDocument.Pages.AddPage() method RadFixedPages are created without PageNumber set.
Such behavior is observed when exporting a RadFlowDocument to a RadFixedDocument using the ExportToFixedDocument as well.
When exporting merged documents when they are imported with ImportSettings set to ReadOnDemand an exception is thrown: KeyNotFoundException: 'The given key was not present in the dictionary.'
When a document containing a SignatureField is exported with the IsEncrypted property set to true, a not set UserPassword is required to open it, which makes it impossible to be opened. An InvalidOperationException is thrown with the message "Password is not correct." when importing with PdfProcessing; Adobe Acrobat also doesn't recognize the password.
Workaround: Exporting with AES256 encryption does not have this problem:
provider.ExportSettings = new PdfExportSettings
{
IsEncrypted = true,
EncryptionType = EncryptionType.AES256
};
This could be implemented by linking to RadFixedPages or Bookmarks.
Until this feature is developed this could be custom created with the help of Link annotations:
RadFixedPage toc = new RadFixedPage();
document1.Pages.Insert(0, toc);
FixedContentEditor editor = new FixedContentEditor(toc);
foreach (RadFixedPage page in document1.Pages)
{
int pageNumber = document1.Pages.IndexOf(page);
if (pageNumber > 0)
{
int factor = 20;
int offsetX = 70;
int offsetY = 20 + factor * pageNumber;
editor.Position.Translate(offsetX, offsetY);
Block block = new Block();
block.GraphicProperties.FillColor = new RgbColor(255, 5, 99, 193);
block.InsertText($"Page {pageNumber}");
Size blockSize = block.Measure();
editor.DrawBlock(block);
Location location = new Location
{
Left = 0,
Top = 0,
Zoom = 0,
Page = page
};
GoToAction goToAction = new GoToAction();
goToAction.Destination = location;
Link uriLink = toc.Annotations.AddLink(goToAction);
uriLink.Rect = new Rect(offsetX, offsetY, blockSize.Width, blockSize.Height);
}
}
According to the PDF Specification: A redaction annotation (PDF 1.7) identifies content that is intended to be removed from the document.
There are two possible options to workaround this functionality:
foreach (RadFixedPage page in document.Pages)
{
foreach (ContentElementBase elementBase in page.Content)
{
if (elementBase is TextFragment textFragment)
{
if (IsValidEmail(textFragment.Text))
{
textFragment.Text = string.Empty;
}
}
}
}
foreach (RadFixedPage page in document.Pages)
{
foreach (ContentElementBase elementBase in page.Content)
{
if (elementBase is TextFragment textFragment)
{
if (IsIntersecting(rectangleGeometry, textFragment))
{
textFragment.Text = string.Empty;
}
}
}
}
Hello Support,
I am generating pdf using PdfFormatProvider. In this i am passing html data which should be converted into pdf. For that I have written below code.
HtmlFormatProvider htmlFormatProvider = new HtmlFormatProvider(); RadFlowDocument htmlDocument = htmlFormatProvider.Import(htmlContentValue); var anotherpara = sectionBody.Blocks.AddParagraph(); editor.MoveToParagraphStart(anotherpara); editor.InsertDocument(htmlDocument, options);
This works fine and also get pdf with expected value. But I would like to set spacing between two lines which I could not set or its not working. For that I have added below code.
I have also attached screenshot for it. like how its showing on pdf
editor.ParagraphFormatting.AutomaticSpacingAfter.LocalValue = false; editor.ParagraphFormatting.AutomaticSpacingBefore.LocalValue = false; editor.ParagraphFormatting.SpacingAfter.LocalValue = 0; editor.ParagraphFormatting.SpacingBefore.LocalValue = 0;
So could you please let me know fix for it.
With the current implementation, the Trigger Events are skippet on import.
From the PDF Specification: An annotation, page object, or interactive form field may include an entry named AA that specifies an additional-actions dictionary that extends the set of events that can trigger the execution of an action.
Attempting to open a Pdf document containing an unsupported action type results in a NotSupportedActionException being thrown (see PdfProcessing: Add support for actions of type Launch).
Can the behavior be changed to ignore unsupported actions and allow the document to be opened?