2017-05-05 5 views
0

Gibt es eine Liste von CSS-Stilen, die pdfHTML unterstützt? Ihre Website sagt "Es unterstützt die Teile der HTML 5 und CSS 3 Spezifikation, die in einem PDF-Kontext gelten", was sinnvoll ist (z. B. kein Grund, CSS-Animationen zu unterstützen).pdfHTML nicht CSS-Stile beachten

Allerdings habe ich ein Problem mit dem, was ich denke, ist ein einfaches Styling, das für PDFs gelten würde.

Ein Problem ist der folgende Stil wird nicht auf Bilder angewandt:

img { max-width: 100%; } 

Ich habe ein paar Bilder, wo ihre Breiten sind physisch größer als die Seite, so dass die Bilder abgeschnitten zu werden. Ich bin nicht in der Lage, die Quell-HTML zu ändern, noch kann ich die Bilddateien verkleinern. Was ist die beste Vorgehensweise, um Bilder zum Verhalten zu bringen?

Ein anderes Problem hat mit Tabellenstilen zu tun. Diese werden nicht angewendet:

Wie die Bilder Problem, diese Stil in einem Browser gut aussehen. Was ist die empfohlene Methode zum Formatieren von Tabellen?

Dank

+0

'n-ter child' wird in der nächsten Version unterstützt von 'pdfHTML'. Es wird bereits in der aktuellen Version des Entwicklungs-Snapshots unterstützt. –

+0

@AlexeySubach: Cool. Irgendwelche Gedanken zur Bildbreite? Das ist der Killer gerade jetzt. Wenn ich die Bilder auf die Seite setzen kann, denke ich, dass wir in der Lage sein sollten, mit itext voranzukommen. – Chuck

Antwort

1

max-width CSS-Eigenschaft wird noch in pdfHTML nicht unterstützt. Sie können versuchen, dieses Problem zu umgehen, indem Sie Ihren eigenen benutzerdefinierten CSS-Applikator für Bilder verwenden und die Breite auf das zurücksetzen, was Sie möchten, wenn einige Bedingungen erfüllt sind.

zuerst den CSS-Applikator für Bilder erstellen:

final ICssApplier customImageCssApplier = new BlockCssApplier() { 
    @Override 
    public void apply(ProcessorContext context, IStylesContainer stylesContainer, ITagWorker tagWorker) { 
     super.apply(context, stylesContainer, tagWorker); 
     if (tagWorker.getElementResult() instanceof Image) { 
      Image img = (Image) tagWorker.getElementResult(); 
      if (img.getImageWidth() > 500) { 
       img.setWidth(UnitValue.createPercentValue(100)); 
      } 
     } 
    } 
}; 

Dann stellen Sie sicher, dass diese Applier im Werk abgerufen werden.

ICssApplierFactory cssApplierFactory = new DefaultCssApplierFactory() { 
    @Override 
    public ICssApplier getCustomCssApplier(IElementNode tag) { 
     if (TagConstants.IMG.equals(tag.name())) { 
      return customImageCssApplier; 
     } 
     return super.getCustomCssApplier(tag); 
    } 
}; 

Schließlich schaffen ConverterProperties und sicherstellen, dass es zu HtmlConverter.convertToPdf passieren: Um dies zu tun, werden Sie getCustomCssApplier außer Kraft zu setzen haben

ConverterProperties properties = new ConverterProperties().setCssApplierFactory(cssApplierFactory); 
+0

Dies ist ein dreckiger Workaround, der in kniffligen Fällen möglicherweise nicht funktioniert. Sie können mit der Größe des physischen Bilds experimentieren, das Ihre Logik auslöst (in meinem Beispiel "500") und mit der Größe des von Ihnen festgelegten Bildes es (Sie möchten vielleicht beide mit Prozent und Punkt Wert versuchen). Bitte stellen Sie sicher, dass Sie Ihre Probleme dem Verkaufsteam mitteilen, wenn Sie diese nicht lösen können. –

+0

Ich schreibe das in C#. Ist die oberste Zeile in Ihren beiden Blöcken ähnlich der öffentlichen Klasse CustomImageCssApplier: BlockCssApplier ... und dann wäre die Methode: öffentliche Überschreibung void Apply (blahblah)? – Chuck

+0

Ich denke, das funktioniert für uns, danke. Ich werde meine Anfrage stellen, dass Bildformatierung von CSS hinzugefügt werden, wenn möglich. Bis dann freue ich mich auf die Tabellenformatierung, die ein süßes i-Tüpfelchen auf dem Kuchen sein wird. – Chuck

Verwandte Themen