Java PDFBox Einstellung benutzerdefinierte schriftart für ein paar Felder im PDF-Formular
Ich bin mit Apache PDFBox Lesen ein interaktives PDF-Formular und füllen Sie die Felder anhand einiger Daten. Ich bin mit dem folgenden code (nach Anregungen von anderen SO Antworten), um die Standard-Darstellung " String und ändern Sie es (wie Sie unten sehen können, ich bin die änderung der Schriftgröße von 10 bis 12, wenn das Feld "Feld1".
- Wie kann ich Fett? Jegliche Dokumentation, die auf das, was um die /Helv 10 Tf 0 g angeordnet sind? Was ich brauche, um Fett aus dem Feld?
- Wenn ich verstehen richtig, es sind 14 grundlegende Schriften, die ich verwenden können, PDFBox out of the box (unbeabsichtigte Wortspiel). Ich würde gerne verwenden Sie eine oder mehrere Schriftarten, die Aussehen wie Signaturen (Kursiv). Out of the box Schriftarten, die das tun? Wenn nicht, wenn ich meine eigene Schrift, wie ich in der Methode geschrieben werden, die PDF-Datei?
Bitte beachten Sie, dass der folgende code funktioniert, indem Sie die bestimmten 'Wert' übergeben, in der die parameter der Methode in dem spezifischen Feld "name" des Parameters der Methode.
Danke !
public static void setField(String name, String value ) throws IOException {
PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField( name );
COSDictionary dict = ((PDField)field).getDictionary();
COSString defaultAppearance = (COSString) dict.getDictionaryObject(COSName.DA);
if (defaultAppearance != null)
{
dict.setString(COSName.DA, "/Helv 10 Tf 0 g");
if(name.equalsIgnoreCase("Field1"))
{
dict.setString(COSName.DA, "/Helv 12 Tf 0 g");
}
}
if(field instanceof PDTextbox)
{
field= new PDTextbox(acroForm, dict);
((PDField)field).setValue(value);
}
Als pro mkl Antwort, ist die Verwendung von zwei Schriftarten in der gleichen PDF, die ich verwendet die folgende Methode: ich konnte nicht die Standard-schriftart und eine benutzerdefinierte schriftart arbeiten zusammen, also ich habe zwei Schriften zu den Ressourcen und verwendet Sie.
public List<String> prepareFont(PDDocument _pdfDocument) throws IOException
{
PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDResources res = acroForm.getDefaultResources();
if (res == null)
res = new PDResources();
InputStream fontStream = getClass().getResourceAsStream("LiberationSans-Regular.ttf");
InputStream fontStream2 = getClass().getResourceAsStream("Font2.ttf");
PDTrueTypeFont font = PDTrueTypeFont.loadTTF(_pdfDocument, fontStream);
PDTrueTypeFont font2 = PDTrueTypeFont.loadTTF(_pdfDocument, fontStream2);
String fontName = res.addFont(font);
String fontName2 = res.addFont(font2);
acroForm.setDefaultResources(res);
List<String> fontList = new ArrayList<String>(); fontList.add(font1);fontList.add(font2);
return fontList;
}
InformationsquelleAutor user972391 | 2015-05-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Finden Sie einer lauffähigen Beispiel hier: FillFormCustomFont.java)
Mit poor-man ' s-Fett
In der PDF, die Sie in der Regel text Fett durch die Verwendung einer schriftart mit Fetten Glyphen, auch Ihre zweite Frage. Wenn Sie nicht so eine Fette Schrift in die Hände, Sie können stattdessen verwenden einige poor-man ' s-Fette Technik, z.B. nicht nur die Füllung der Buchstaben, sondern auch streicheln eine Linie entlang seiner Grenzen:
(
2 Tr .5 w
= rendering Modus 2, also Fläche und Kontur, und verwenden Sie eine Linie Breite von .5)Statt
erhalten Sie jetzt
Verwenden von benutzerdefinierten Schriftarten
Wenn Sie verwenden möchten, eine eigene schriftart, müssen Sie sich zunächst registrieren es in der AcroForm Standard-Ressourcen wie diese:
Diese Methode gibt den Namen der schriftart zu verwenden, in
Erhalten Sie jetzt
Ist der Unterschied nicht allzu groß, weil die Schriften sehr ähnlich sind. Verwenden Sie die schriftart Ihrer Wahl für mehr Effekt.
Mit /Helv, /HeBo, ...
Die OP fand eine Liste von schriftart-Namen /Helv, /HeBo, ..., wahrscheinlich in der PDFBox Problem PDFBOX-1234, die angezeigt werden, um nutzbar zu sein, ohne zu definieren, Sie in irgendeiner Ressource Wörterbuch.
Diese Namen sind nicht eine PDF-Funktion, d.h. die PDF-Spezifikation nicht über Sie wissen, im Gegenteil:
Damit, die Spezifikation nicht wissen, die Standard-schriftart-Namen.
Dennoch, Adobe Reader/Acrobat scheinen, um Sie zu unterstützen, wahrscheinlich, weil irgendwann in der Fernen Vergangenheit in irgendeiner form generieren tool angenommen Sie, dort zu sein, und Unterstützung für diejenigen Formen gehalten wurde, aus Kompatibilitätsgründen.
Verwendung dieser Funktion, daher vielleicht nicht die beste Wahl, aber Ihre Laufleistung variieren.
Mithilfe von benutzerdefinierten und standard-Schriftarten
In seinen Kommentaren nach der OP angedeutet, dass er wollte, zu verwenden, die benutzerdefinierte und die standard-Schriftarten in Formularen.
Dazu habe ich verallgemeinert die Methode
prepareFont
ein bisschen und umgestaltet werden, die TTF importieren in eine separate Methode:Mithilfe dieser Methoden können Sie mischen von benutzerdefinierten und standard-Schriftarten wie diese:
Was in
PDType1Font
hat Konstanten für alle 14 standard-Schriften. So, wie diese können Sie verwenden standard-Schriftarten (gemischt mit benutzerdefinierte Schriftarten, wenn gewünscht) in form von Feldern in einer Weise erzeugt, dass der richtige Font Einträge in der Standard-Ressourcen, D. H. ohne sich auf proprietäre Standard-schriftart Namen wie HeBo.PS
Ja, es ist, cf. die Spezifikation ISO 32000-1.
Wenn ich Debuggen mit eclipse, auf die PDTrueTypeFont Zeile in der prepareFont Methode, die Schrift Wert ist "FO". Ist das normal? Ich habe absichtlich gab einen falschen Namen und wirft es einen null-Zeiger (stellen Sie sicher, dass die schriftart ist auf dem richtigen Weg und ist für diese Methode)
Auch fand ich dieses:Cour -> Kurier CoBo -> Courier-Bold-CoOb -> Courier-Oblique CoBO -> Courier-BoldOblique Helv -> Helvetica HeBo -> Helvetica-Bold HeOb -> Helvetica-Oblique HeBO -> Helvetica-BoldOblique Symb -> Symbol TiRo -> Times-Roman TiBo -> Times-Bold TiIt -> Times-Italic TiBI -> Times-BoldItalic ZaDb -> ZapfDingbats. Ich verwendet, HeBo und es funktionierte fein bis Fett die Schrift (anstelle von /Helv ich verwendet /HeBo
"Schrift" - Teil zu werfen... - bitte teilen Sie Ihre Beispiel-PDF und das sehr code-und Eingänge, die Sie verwendet. Wie oben erwähnt, finden Sie den Beispiel-unit-test auf github, die funktioniert.
statt /Helv ich verwendet /HeBo - wie oben erwähnt, in der PDF, die Sie in der Regel text Fett durch die Verwendung einer schriftart mit Fetten Glyphen, HeBo = Helvetica-bold ist dieser Anhänger für Helvetica.
InformationsquelleAutor mkl