2016-08-04 29 views
0

Ich habe derzeit ein Problem mit PdfSharp/MigraDoc und einem PDF-Viewer. Ich habe die EZFontResolver made by Thomas verwendet, um PDFs mit benutzerdefinierten Schriftarten generieren zu können. Leider kann der PDF-Viewer die Schriftart nicht rendern, und ich habe keine Ahnung warum. Ich habe einen Fehler described by Travis auf Thomas 'Blog gesehen, der darauf hinweist, dass, wenn EZFontResolver nicht mehrere fett/kursive Symbolerkennung hat (zB "fontname | b | b"), PdfDocumentRenderer.RenderDocument() fehlschlägt. Der Punkt ist, wenn ich so etwas wie dies versuchen:Schriftarten laden nicht im PDF-Viewer

Document document = DdlReader.DocumentFromString(ddl); 
_renderer = new DocumentRenderer(document); 
_renderer.PrepareDocument(); 

als die EZFontResolver für Schriften mit Namen wie gefragt wird „customfont | b | b“ (es geschieht nicht, wenn ich nur PdfDocument.Save verwenden (...)) statt "customfont".

Mein PDF-Viewer überschreibt DocumentViewer und zeigt Instanzen der FixedDocument-Klasse an. Das Lustige ist, dass in der gespeicherten PDF-Datei alle Schriftarten eingestellt sind, aber die Vorschau kann das nicht (und das ist mein großes Problem). All dies passiert, obwohl ich die richtige Schriftart mit dem Resolver zurückgebe.

EDIT:

Die DDL ist eine Zeichenkette, die etwa wie folgt aussieht:

"\\document 
[ 
    Info 
    { 
    Title = \"My file\" 
    Subject = \"My pdf file\" 
    Author = \"mikes\" 
    } 
] 
{ 
    \\styles 
    { 
    Heading1 : Normal 
    { 
     Font 
     { 
     Name = \"My custom font\" 
     Bold = true 
     } 
     ParagraphFormat 
     { 
     Alignment = Center 
     SpaceBefore = \"0.5cm\" 
     SpaceAfter = \"0.5cm\" 
     } 
    } 

    header : Normal 
    { 
     Font 
     { 
     Name = \"My custom font\" 
     Size = 6 
     } 
     ParagraphFormat 
     { 
     Alignment = Center 
     } 
    } 

Und wenn ich die Bug-Fix von Travis gelöscht wurde die Ausnahme in der _renderer.PrepareDocument geworfen() (nach der Behebung, der Stack-Trace zeigte, dass die Quelle von mehreren "| b" auch dort war).

Antwort

1

Simulierte fettgedruckte und simulierte Kursivschrift verwenden die reguläre Schriftart, es wird jedoch eine Transformation angewendet.

Daher funktioniert die Simulation nicht, wenn der PDF-Viewer diese Transformationen nicht unterstützt.

Der mit MigraDoc gelieferte DocumentViewer zeigt keine PDF-Dateien an, er zeigt MigraDoc-Dokumente an. Aus technischen Gründen können Schriften, die über die IFontResolver-Schnittstelle bereitgestellt werden, nicht verwendet werden. EZFontResolver ist eine Implementierung von IFontResolver.

In Bezug auf "customfont | b | b": Ich kann nicht sagen, ob dies ein Fehler oder das regelmäßige Verhalten ist. Bitte stellen Sie ein MCVE (vollständiges Beispiel) zur Verfügung, wenn Sie glauben, dass es sich um einen Fehler handelt.

+0

So ist es möglich, eine benutzerdefinierte Schriftart in der MigraDoc-Datei auf eine andere Weise zu setzen? Mit dem Fehler ist es wirklich schwer für mich, den ganzen Prozess zu zeigen, aber ich werde es versuchen. – mikes

+1

Die MDDDL-Datei beschreibt ein Dokument und jede Schriftart kann hier "verwendet" werden. Der Renderer, der PDF-Dateien erstellt, unterstützt die von EZFontResolver verwendete Schnittstelle und Sie können damit benutzerdefinierte Schriftarten hinzufügen. Der von DocumentViewer verwendete Renderer unterstützt EZFontResolver nicht. Sie können installierte Schriftarten oder XPrivateFontCollection für den GDI-Build verwenden. Die mit EZFontResolver gelieferten Schriften werden in die PDF-Datei eingebettet und können von jedem PDF-Viewer verwendet werden. –