Font in Formularfeld

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Investment
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Mo 20. Jun 2016, 16:10

Font in Formularfeld

Beitrag von Investment »

Hallo zusammen,

unzählige Versuche sind bisher fehlgeschlagen, den Font in einem Formularfeld erfolgreich zu ändern. Vielleicht fällt euch noch eine Idee ein, um für das Formularfeld den Font des geladenen Pakets libertine dort einzupflegen.
\documentclass[a4paper, DIV=16, 11pt, ngerman]{scrartcl}
\usepackage[bookmarks=false]{hyperref}
\usepackage[pdftex]{insdljs}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{libertine}

\begin{document}
	\renewcommand{\LayoutTextField}[2]
	{% label, field
		\begin{tikzpicture}
			\node[anchor=north west] (TextFieldNode) at (0cm,2ex) {#2};
			\draw[very thick] ([yshift=-0.6ex]TextFieldNode.north west) -- (TextFieldNode.south west) -- ([xshift=-0.6ex]TextFieldNode.south east);
			\node[anchor=north west] at (TextFieldNode.south west) {#1};
		\end{tikzpicture}
	}


	\newcommand\TextFieldbestimmt[3][]%#Name#Wert#Länge
	{
		\TextField[#1, width= #3,
		format =
		{
			var f = this.getField('TestFeld');
			f.textFont='LinLibertineT'; % um diesen Namen dreht es sich. Font libertine per \usepackage geladen soll hier genutzt werden. 
			f.borderColor=['Red'];
			f.strokeColor=['T'];
			f.fillColor=['T'];						
		}]{#2}
	}

	\newcommand\TextFieldBreiteBerechnen[1]
	{
		\dimexpr(#1-\fboxrule)
	}
	
	\begin{Form}
		\TextFieldbestimmt[name=TestFeld]{TextField Spezial}{5cm}\\
	\end{Form}

\end{document}
Eine Anregung, wie der Fontname ermittelt werden könnte, fand ich auf http://texwelt.de/wissen/fragen/369/wie ... ily-heraus und http://tex.stackexchange.com/questions/ ... text-field.

Wie kann der Name des Fonts ermittelt werden, der dort ggf auch bei anders lautenden Schriften(Myriad Pro) zur korrekten Wiedergabe führt?

VG, Investment

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Das ist m.E. gar nicht einfach.

f.textFont='XXX' funktioniert gut mit Systemschriften. Also z.B. Cambria oder Arial o.ä.

Du willst aber eine in der pdf-Datei einbettete Schrift nutzen. Dazu müsstest du sie zuerst einmal komplett einfügen (in deinem Beispiel ist nur eine Untermenge in der Datei, d.h. Buchstaben, die die vielleicht im Feld brauchst fehlen). Und dann noch den Adobe Reader überreden, die auch zu nutzen

Es gibt immer mal Fragen dazu, aber etwas Definitives habe ich noch nicht gesehen. Es ist noch nicht mal klar, ob man es mit dem Adobe Pro hinbekommt. Eine der Fragen ist z.B. hier:
http://tex.stackexchange.com/questions/ ... rtial-font

Investment
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Mo 20. Jun 2016, 16:10

Re: Font in Formularfeld

Beitrag von Investment »

Guten Morgen zusammen,

nach abermals unzähligen Versuchen, einen bestimmten Font in einem Textfeld nutzen zu können, bin ich vermutlich endlich auf die Lösung gestossen.

Folgende Abfolge von Schritten war/ist nötig, um das gewünschte Ergebnis zu erzielen.

  1. beliebiges PDF mit einem vorhandenen Textfield in einem PDF-Editor öffnen und im Textfield den Font auswählen, welcher euch zusagt
  2. PDF speichern und "pdffonts Datei.pdf" starten in einer Kommandozeile
  3. der gesuchte Font wird lediglich hier korrekt aufgelistet, auch wenn er noch nicht eingebunden oder setzt wurde [im Acrobat Reader wird er lediglich ersetzt und ist deswegen unter Ctrl-D / Schriften unauffindbar]
  4. In Latex im Textfield via Option (siehe Minimalbeispiel) den gerade herausgefundenen Fontsnamen einsetzen (ohne Leerzeichen)
    \TextField
    [
    	name = testTextfield,
    	format =
    	{
    		var f = this.getField('testTextfield');
    		f.textFont = 'Wonderbar2.0';
    		% ladet euch dazu testweise diesen Font von https://www.1001freefonts.com/d/27045/wonderbar-2.0.zip herunter
    	}
    ]{Labeltext}
    
    Wenn der Font hier korrekt eingetragen wird, so wird er automatisch vollständig im PDF eingebunden und dies sogar ohne eine vorherige Verwendung von \usepackage{fontname} :D [Anmerkung: natürlich muss der Font irgendwo bei euch installiert sein und es kann auch die wohl meist genutzte pdf-chain genutzt werden :D]
    Dies bedeutet im Umkehrschluss - die weitere Vorgehensweise dient lediglich zur vollständigen Implementierung der außerhalb dieses Textfeldes genutzten Fonts :arrow: "Feuer frei" ;)
  5. Erstellung einer .ps-Datei (z.B. via TeXStudio mittel txs:///ps-chain oder txs:///dvi-ps-pdf-chain [Optionen/TeXStudio konfigurieren/Erzeugen/Erstellen & Anzeigen] mittels F5 oder F6 im Editor)
    allerdings führt in TeXStudio
    ps2pdf -dEmbedAllFonts=true -dPDFSETTINGS=/printer -dCompatibilityLevel=1.4 %.ps
    
    unter [Optionen/TeXStudio konfigurieren/Befehle/Ps2Pdf] eingetragen zum Abbruch, weil angeblich das zuvor sauber erzeugte PS-File nicht gefunden werden kann. Deswegen muss der nächste Schritt derzeit noch manuell ausgeführt werden.
  6. Batch-Datei mit folgendem Code starten
    "Pfad1\gswin64c.exe" -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEmbedAllFonts=true -dSubsetFonts=false -sOutputFile="Pfad2\Datei.pdf" -f "Pfad3\Datei.ps" 
    
    wobei ihr bitte für Pfad1..3 die Pfade eintragt, wo die jeweiligen Dateien zu finden sind
  7. lediglich der Acrobat Reader hatte bisher den gewünschten und vollständig eingebetteten Font korrekt im Textfield dargestellt.
  8. freuen, dass es endlich möglich ist

Lasst mich gern wissen, ob ihr damit Erfolge erzielen konntet.

Und hier nun das Minimalbeispiel:

\documentclass{article}
\usepackage[pdfstartview=FitH]{hyperref}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{libertine}
\usepackage{tikz}
\usepackage{eforms}

% Ausrichtung des Textes im Textfield an die Basisline des außerhalb des Objektes befindlichen Textes
\def\LayoutTextField#1#2{% label, field
	#1 \tikz[baseline={([yshift=2.25pt]baseline.base)}]{\node[] (baseline)       {#2};}%
}

\begin{document}
	\selectfont
	\begin{Form}
		\TextField
		[
			name = lintest,
			value = Text in Linux Libertine G,
			format =
			{
				var f = this.getField('lintest');
				f.textFont = 'LinuxLibertineG';
			},
		]{Label in Libertine}
	\end{Form}
\end{document}

Antworten