Kategorien
Tutorial

Adobe LiveCycle Designer – Zeilenumbrüche in berechneten Feldern

Für mehrzeilige berechnete Zeichenketten-Felder z.B. via Zuweisung von this.rawValue = "irgendwas" in onCalculate-Ereignissen:

JavaScript

Escape-Sequenz in Zeichenkettenliteral verwenden.

Beispiel: \n für Zeilenumbruch
z. B.: this.rawValue = "Straße, Nr\nPLZ, Ort"

FormCalc

UniCode-Escape-Sequenzen verwenden.
Allgemein: \uxxxx (x = hexadezimale Ziffer)
Beispiele:

  • \u000d (CR)
  • \u000a (LF)
  • \u263a (☺️)

(für LiveCycle Designer ES 8.2): Funktioniert nur für vier hexadezimale Ziffern. Führende Nullen können nicht weggelassen werden. Längere Unicodes – etwa für weitere Emojis – funktionieren nicht. Offensichtlich werden weitere Ziffern nicht ausgewertet.

Die Verwendung von Emojis über UniCode-Escaping funktionieren nur, wenn in den verwendeten Schriftarten auf dem System des Dokumenterzeugers entsprechende Glyphen für die UniCode-Pages bzw. die Emoji-Codes vorhanden sind; sonst erscheinen Fragezeichen oder durchkreuzte Rechtecke.

Kategorien
Tutorial

Java – XSL Transformation auf Dateien durchführen

Dieser Code bzw. Vorgängerversionen davon entstanden während meines Medieninformatik Studiums (2008-2014). Durch Aktualisierungen und Weiterentwicklung der Sprache Java, ist der angegebene Quelltext ggf. mit aktuellen Versionen nicht lauffähig und Bedarf kleiner Änderungen.

/**
 * Eine kleine Hilfsklasse um per Funktionsaufruf eine XML-Datei 
 * mittels einer XSL-Tranformationsdatei in ein Ausgabeformat umzuwandeln
 * 
 * @author André Kleinschmidt
 * @version 1.0
 */

package transform;

import java.io.File;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
public class XSLTransform {
  /** XSLTransformation
   * @param String inputFilename Dateiname der Quelldatei (XML)
   * @param String outputFilename Dateiname der Zieldatei
   * @param String xslFilename Dateiname der Transformationsdatei (XSL)
   */
  public static void transformFile(String inputFilename, String outputFilename, String xslFilename) {
    // Dateihandler erzeugen
    File inputFile = new File(inputFilename);
    File outputFile = new File(outputFilename);
    File xslFile = new File(xslFilename);
    // Input und Output-Ströme erzeugen
    StreamSource inputStream = new StreamSource(inputFile);
    StreamResult outputStream = new StreamResult(outputFile);
    StreamSource xslStream = new StreamSource(xslFile);
    // Fabrik-Instanz für XML-Transformator holen/erstellen
    TransformerFactory fabrik = TransformerFactory.newInstance();
    Transformer transformer;
    try {
      // XML-Transformater aus XSL-Dateistrom erzeugen
      transformer = fabrik.newTransformer(xslStream);
      try {
     transformer.transform(inputStream, outputStream);
      } catch (TransformerException e) {
     System.err.printf(
       "Ausnahme bei XSLTransformation: %s.\n",
       e.getMessage());
     }
    } catch (TransformerConfigurationException e) {
     System.err.printf(
       "Ausnahme bei Erstellen der XSLTransformer-Instanz: %s.\n",
       e.getMessage());
    }
  }
}
Kategorien
Tutorial

Microsoft Word – Serienbrieffelder

Allgemeines

Strg+F9 fügt ein neues Paar Formelklammern {} in Word-Dokumente ein.

Bedingte Ausgaben

Durch manuelle Bearbeitung von Feldfunktionen können Funktionen bzw. Formelklammern zur bedingten Ausgabe von Serienbriefdaten ver­schachtelt werden. Im Gegensatz zu LibreOffice fehlt ein Dialogsystem, mit dem verschachtelte Formeln über einen Assistenten eingegeben werden können.

Bsp. 1: geschlechtsspezifische Anrede über Serienbrieffeld (Spaltenname sex):

sehr geehrte{ IF  { MERGEFIELD "sex" } = "male" "r Herr" "Frau" },

Barcodes (ab Word 2013)

Bsp. 1: Barcode mit festem Text (hier eine ISBN als EAN13):

{ DISPLAYBARCODE "9783885796404" EAN13 }

Bsp. 2: QR-Code aus Serienbrieffeld (etwa eine URL):

{ DISPLAYBARCODE { MERGEFIELD "url" } QR }

Mögliche Argumente für Barcodetypen: UPCA , UPCE, JAN13, JAN8, EAN13, EAN8, CASE, ITF14, NW7, CODE39, CODE128, JPPOST, QR

Die Funktion Displaybarcode taucht nicht im Dialog der Feldbefehle auf und muss manuell durch Einblenden der Feldfunktionen als Text eingegeben werden.

Formatierte Datenausgabe

Mit Feldparameter \@ können Datumsfelder umformatiert werden:

Bsp 1.: langes englisches Datum (February 10. 2016):

{ MERGEFIELD "geburstag" \@ "MMM dd. yyyy" }

Für Zahlen analog durch Verwendung von Parameter \# und einer Formatzeichenkette. Diese Format­zeichenketten sind identisch mit denen, die in Excel bei der Zellformatierung verwendet werden.

Bsp 2.: Serienfeld mit Inhalt 120500 mit Tausendertrennzeichen und zwei Nachkommastellen (120.500,00):

{ MERGEFIELD "balance" \# "#.##0,00" }
Kategorien
Tutorial

Crystal Reports – ISO-Wochennummern

(Kalender-)Wochennummern nach ISO-8601 aus Date-Feldern zu ermitteln ist in Crystal Reports (mindestens bei Versionen 2008 und XI) in Funktion DatePart() fehlerhaft implementiert.

Die folgenden Script-Fragmente können zur Abhilfe im Formelworkshop unter benutzerdefinierten Funktionen hinzugefügt werden


Ermittlung der ISO-Wochennummer:

Function (optional DateVar d := CurrentDate)
NumberVar week := DatePart("ww", d, crMonday, crFirstFourDays);
// Letzte Tage eines Jahres können zur ersten KW des Folgejahres gehören:
if week = 53 and DatePart("ww", cDate(year(d) + 1, 1, 1), crMonday, crFirstFourDays) = 1 then week := 1

// CR errechnet fehlerhafte Werte für Januartage, die zur letzten Vorjahres-KW gehören:
else if week > 53 then
 week := DatePart("ww", cDate(year(d) - 1, 12, 31), crMonday, crFirstFourDays);
// Variable week als Funktionsergebnis zurückgeben
week;

Ermittlung des Jahres, zu dem die ISO Wochennummer gehört (etwa für einen Januartag, der zur 53. KW des Vorjahres zählt):

Function (optional DateVar d := CurrentDate)
NumberVar week := %Funktionsname_der_obigen_Nutzerfunktion%(d);
if week = 1 and month(d) = 12 then
 year(d) + 1
else if week > 10 and month(d) = 1 then
 year(d) - 1
else
 year(d);

Quelle: Aus einer Antwort auf der Q&A-Plattform StackOverflow unter Lizenz cc by-sa 3.0 von Nutzer lapplandscohan

Kategorien
Tutorial

Microsoft Office – Bing durch Google ersetzen

  1. Registry öffnen (z. B. mit Windows-Taste + R, regedit eingeben, Ok)
  2. Zweig suchen:
    • HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\General
  3. Schlüssel (Typ Zeichenfolge) neu erstellen oder bearbeiten (falls vorhanden):
    • SearchProviderName: Google
    • SearchProviderURI: https://www.google.de/#q=
Kategorien
Tutorial

LibreOffice – Makro zur Eingabe von Unicode-Zeichen

Hinweis: Dieses Makro eignet sich nicht zur Eingabe von Emojis als Unicode. Die entsprechend langen Codes führen in der derzeitigen Implementierung der Chr()-Funktion zu einem Überlauf. (Stand 02.12.2015, LibreOffice 4.4, Windows)


  1. LibreOffice Writer öffnen
  2. Menü → Extras → Makros → Makros verwalten → LibreOffice Basic…
  3. in Feld „Makros aus“ Element „Meine Makros“ auswählen
  4. Button „Neu“ klicken
  5. Im öffnenden Texteditor folgenden Code eingeben

Sub EnterUnicodeChar 
rem - Variablen definieren ----------------------------------------------- 
rem define variables 
dim document as object 
dim dispatcher as object 
dim unicode as string 
dim unicodeVal as long 

rem - Dokumentobjekt holen ---------------------------------------------- 
document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem -  Unicode aus Eingabedialog lesen ---------------------------------- 
rem 
unicode = INPUTBOX("Dezimal oder &H[+Hexadezimal]", "Unicode eingeben") 

rem - Unicode in Dokument einfügen -------------------------------------- 
dim args7(1) as new com.sun.star.beans.PropertyValue 
args7(0).Name = "Symbols" 
unicodeVal = clng(unicode) 
args7(0).Value = chr(unicodeVal) 
args7(1).Name = "FontName" 
args7(1).Value = "Georgia" 
dispatcher.executeDispatch(document, ".uno:InsertSymbol", "", 0, args7()) 
End Sub 
  1. Makro als Symbol zur Toolbar hinzufügen
    1. Rechtsklick auf gewünschter Toolbar öffnen
    2. Eintrag „Symbolleiste anpassen…“ wählen
    3. Button „Hinzufügen…“ neben Feld „Symbolleisteninhalt“ klicken
    4. In Feld „Bereich“ den Eintrag „LibreOffice Makros → Meine Makros → Standard →Module1“ 1 auswählen
    5. In Feld „Befehle“ den Eintrag EnterUnicodeChar 2 auswählen
    6. Button „Hinzufügen“ klicken
    7. Über Kombinationsfeld „Ändern“ ggf. Name und Symbol ändern

  1. Modulname kann ggf. umbenannt werden
  2. Befehlsname kann beliebig geändert werden, Makroquelltext muss entsprechend geändert werden