PDFbox boxable font awesome-webfont

unknown

Bekanntes Mitglied
Hallo zusammen

Ich benötige in meinem PDF die Symbole von der Schrift art awesome-webfont.

Dementsprechend habe habe ich die TTF-Datei heruntergeladen und eine neue Schriftart erstellt:

Java:
PDFont font = PDTrueTypeFont. loadTTF(doc, new File("C:/fonts/fontawesome-webfont.ttf"));
//hier rufe ich ein Code von einem Symbyol auf, der in dieser Schriftart existiert
cell.setFont(font);
cell = row.createCell(width, "\uf037");

Ich bekomme allerdings die folgende Exception:
Code:
java.lang.IllegalArgumentException: No glyph for U+0037 in font FontAwesome
    at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.encode(PDTrueTypeFont.java:382)
    at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:286)
    at org.apache.pdfbox.pdmodel.font.PDFont.getStringWidth(PDFont.java:315)
    at be.quodlibet.boxable.text.PipelineLayer.push(PipelineLayer.java:65)
    at be.quodlibet.boxable.Paragraph.getLines(Paragraph.java:341)
    at be.quodlibet.boxable.Paragraph.getHeight(Paragraph.java:465)
    at be.quodlibet.boxable.Cell.getTextHeight(Cell.java:392)
    at be.quodlibet.boxable.Cell.getCellHeight(Cell.java:367)
    at be.quodlibet.boxable.Row.getHeight(Row.java:166)
    at pdf.GeneratePdf.generate(GeneratePdf.java:150)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:106)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:141)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

Weiss jemand, wo das Problem liegt?

Ich gebrauche die Libraries PDFBox und Boxable.
 

Tobse

Top Contributor
Für mich sieht das so aus, als ob FontAwesome den Unicode 0x0037 (die Ziffer 7) nicht definiert, die Definition dieses Zeichens für das PDF-Format aber zwingend notwendig ist. Ohne der TTF die fehlenden Zeichen hinzuzufügen, wirst du FontAwesome nicht verwenden können :/
 

Tobse

Top Contributor
Und wie ginge das? :) Ist das überhaupt machbar?
Das geht mit Sicherheit; kann aber ggf. Aufwendig sein.
Du musst even die TTF-Datei bearbeiten und ihr alle fehlenden Zeichen hinzufügen. Und das am besten automatisch beim Build damit du dein FA upgraden kannst ohne jedes mal manuell die TTF-Datei zu bearbeiten.
Fürs TTF Format gibts ggf Editoren und wenn du Glück hast auch ne Java-Library, mit welcher sich das automatisieren lässt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M PdfBox - mehrere Formularseiten Java Basics - Anfänger-Themen 2
L PDFBox UTF-8 Java Basics - Anfänger-Themen 3
U PDFBOX Text Java Basics - Anfänger-Themen 2
F Graphics PDFBox Java Basics - Anfänger-Themen 9
O PDFBox CreateBlankPDF Java Basics - Anfänger-Themen 2
S Suche Codebeispiel für PDFBOX Java Basics - Anfänger-Themen 3
I Erste Schritte Java not setting Font?? Java Basics - Anfänger-Themen 2
K Font mit gleichem Zeichenabstand Java Basics - Anfänger-Themen 2
A EAN13 Font auf graphics g erzeugt Monospaces Java Basics - Anfänger-Themen 14
L Standard Font ändern Java Basics - Anfänger-Themen 4
B Font Namen ermitteln Java Basics - Anfänger-Themen 7
Y performanceProblem mit Font in applet Java Basics - Anfänger-Themen 8
V Text Unterstreichen/Fett/Kursiv/Font ändern? Java Basics - Anfänger-Themen 8
hdi font.getBounds(String) Java Basics - Anfänger-Themen 21
D Truetype Font einlesen Java Basics - Anfänger-Themen 2
G iText mehrdeutiges Font Java Basics - Anfänger-Themen 2
N Font resizen funktioniert nicht? Java Basics - Anfänger-Themen 12
T Globale Variable (Font) Java Basics - Anfänger-Themen 21
G Font Color von JLabel verändern Java Basics - Anfänger-Themen 1
S button font Java Basics - Anfänger-Themen 4
F Font-Objekt mit z.B. Italic und Bold ? Java Basics - Anfänger-Themen 3
V JLabel Mehrzeilig und Font ändern Java Basics - Anfänger-Themen 4
C font color Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben