ZUGFeRD (acronym for Zentraler User Guide des Forums elektronische Rechnung Deutschland) is a specification for the electronic invoice format of the same name.
The feature depends on the following features:
Add support for extraction of AES-encrypted archives.
There is a related feature request for the creation of such archives: ZipLibrary: Add support for creation of AES-encrypted archives.
Handle import of documents with self-referring styles.
As a workaround, you can go through the RTF document structure of a single file and utilize Regex to resolve the self-referring styles like this:
string rtf = File.ReadAllText("inputFile.rtf");
rtf = FixSelfReferringStyles(rtf);
Telerik.Windows.Documents.Flow.FormatProviders.Rtf.RtfFormatProvider provider = new Telerik.Windows.Documents.Flow.FormatProviders.Rtf.RtfFormatProvider();
var document = provider.Import(rtf);
...
private static string FixSelfReferringStyles(string rtf)
{
string regexString = @"{\\s([0-9]+)[^}]*\\slink([0-9]+)";
var matches = Regex.Matches(rtf, regexString);
foreach (Match match in matches)
{
if (match.Groups[1].Value == match.Groups[2].Value)
{
var oldValue = match.Groups[0].Value;
var newValue = oldValue.Replace(@" \slink" + match.Groups[1].Value, string.Empty);
rtf = rtf.Replace(oldValue, newValue);
}
}
return rtf;
}
With the current implementation when passing the font file using the FontsRepository the entire font file is embedded.
In order to embed only a subset of characters used in the document, the font should be installed and the font shouldn't be registered in the FontsRepository.
Currently, similar conversions should be manually implemented by the users.
Sample method that could be used:
public static Color HexStringToColor(string hexColor)
{
// Remove the # at the front.
if (hexColor.StartsWith("#"))
{
hexColor = hexColor.Substring(1, hexColor.Length - 1);
}
byte a = 255;
byte r = 255;
byte g = 255;
byte b = 255;
int start = 0;
// Handle ARGB strings (8 characters long).
if (hexColor.Length == 8)
{
start = 2;
}
//Handle contracted RGB strings (3 characters long)
if (hexColor.Length == 3)
{
hexColor = string.Format("{0}{0}{1}{1}{2}{2}", hexColor[0], hexColor[1], hexColor[2]);
}
else if (hexColor.Length < 6)
{
hexColor = hexColor.PadLeft(6, '0');
}
// Convert RGB characters to bytes.
r = byte.Parse(hexColor.Substring(start, 2), NumberStyles.HexNumber);
g = byte.Parse(hexColor.Substring(start + 2, 2), NumberStyles.HexNumber);
b = byte.Parse(hexColor.Substring(start + 4, 2), NumberStyles.HexNumber);
return Color.FromArgb(a, r, g, b);
}