Connect failed: Connection timed out

[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Skript um Schriften aus Dokument auszulesen?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Skript um Schriften aus Dokument auszulesen?

t-kittel
Beiträge gesamt: 254

8. Nov 2011, 09:08
Beitrag # 16 von 19
Beitrag ID: #483880
Bewertung:
(7859 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo HDSler!

Nachdem ich in den vergangenen Tagen nun endlich ein wenig Zeit fand, mich mit den Basics von JavaScript zu befassen, habe ich mit Hilfe von eins/zwei weiteren Skript-Schnipseln einen Entwurf erstellt, welcher meinen Anforderungen genügt; aber sicher nicht perfekt ist. Die Aufgabenstellung hatte sich allerdings während der Erstellung nochmals geändert, so dass nun nicht nur TrueTypes, sondern alle Nicht-OpenType-Schriftschnitte einmalig mit ihren (vmtl. zu 99% eindeutigen) PostScriptnamen, ihrem Schrifttyp, ihrer Versionsnummer und der Angabe zum ID-Quelldokument in einer externen Textdatei auf dem Schreibtisch des Benutzers protokolliert werden. Auslöser der Aktion ist jeweils der "Sichern" oder "Sichern unter"-Befehl. Dass bei Letzterem der bisherige Dokumentname (anstelle des neuen) protokolliert wird, obwohl ich den EventListener mit "afterSaveAs" definiert habe, ist mir nicht wirklich klar - damit kann ich aber leben.
Auf die Auflistung aller Dokumentnamen (in denen ein Schriftschnitt vorkommt) habe ich der Einfachheit halber nun doch verzichtet. Leider funktioniert das Skript nicht in CS4 (Fehler in Zeile 51), sondern nur in CS 5 und 5.5. Ebenfalls noch etwas unschön die Skriptfehlermeldung, falls man versucht ein Dokument mit fehlenden Schriften versucht zu speichern.
Bei korrekter Arbeitsweise kommt dies aber ja nicht vor :o)

Dank nochmals an Martin und Werner, die mir mit ihren Antworten wichtige Details vermittelt haben!
Nachfolgend das Skript, falls jemand eine ähnliche Aufgabenstellung hat:
Code
//DESCRIPTION:Protokolliert alle im geöffneten Indesign-Dokument verwendeten nicht-OpenType-Schriftschnitte in einer Textdatei auf dem Schreibtisch, mit dem vollem Schriftschnitt-Namen, Postscriptnamen, Typ, Version und Namen des ID-Dokuments 
// Es ergänzt neue Schriftschnitte nur dann, wenn deren PostScript-Name noch nicht in der Liste vorhanden ist.
// Der Name der Desktop-Textdatei lautet "Fonts_", plus dem in der CS-Suite eingetragenen Benutzernamen, plus "__NICHT LOESCHEN.txt"
// Ist diese Textdatei noch nicht verhanden, wird sie erzeugt.
// LogMyNonOpenTypeFonts_IDCS5_V01.jsx
// Version 1.0
// 04.11.2011
// Lauffähig in Indesign CS 5

#targetengine "session"

var myEventListener1 = app.addEventListener("afterSave", ListNonOpenTypeFonts, false);
var myEventListener2 = app.addEventListener("afterSaveAs", ListNonOpenTypeFonts, false);

myLogfile = null;
myFontsLogged = [];
csUsername = app.userName; //Aktuell in der CS Suite eingetragener Benutzername
myLogfile = "~/Desktop/Fonts_" + csUsername + "__NICHT_LOESCHEN.txt"; // Definiert den Dateinamen und Speicherort der Textdatei

function ListNonOpenTypeFonts()
{
if (app.documents.length > 0) {//Prüft, ob mindestens 1 Dokument geöffnet ist
//Liest alle bereits protokollierten Schriftschnitte in ein Array namens 'myFontsLogged' ein
var myFile = File(myLogfile);

if (myFile.open("r")) {
do{
var _zeile = myFile.readln();
myFontsLogged.push(_zeile)
} while (myFile.eof == false);
myFile.close();

}
else {
}
getNonOpenTypeFonts(app.activeDocument)
}
}


function getNonOpenTypeFonts(d)
{
var myDoc = app.activeDocument.name.replace(/\.indd$/i,'').toString(); //myDoc = aktueller Dokumentnamen ohne ".indd"
var myFontsToLog = new Array;
var myDocFonts = d.fonts.everyItem().getElements();
for (var i = 0; i < myDocFonts.length; i++)
{
var myDocFontPSName = "" ;
var myDocFontVersion = "";
var myDocFontType = "";
if (myDocFonts[i].fontType != FontTypes.OPENTYPE_CFF && myDocFonts[i].fontType != FontTypes.OPENTYPE_CID && myDocFonts[i].fontType != FontTypes.OPENTYPE_TT) { // Filter auf NICHT-OpenType-Fonts
myDocFontPSName = app.activeDocument.fonts[i].postscriptName + "@";

//Versuche den Schrifttyp auszulesen
try {
var myDocFontType = String(app.activeDocument.fonts[i].fontType);
}
catch(_fehler) { //Kein Schriftschnitt definiert
}

//Versuche den Schrift-Version auszulesen
try {
var myDocFontVersion = app.activeDocument.fonts[i].version;
}
catch(_fehler) { //Keine Schriftversion definiert
var myDocFontVersion = "";
}

if (String(myFontsLogged).indexOf (myDocFontPSName) == -1) { //Ergänze myDocFontPSName in Textdatei nur, wenn noch nicht enthalten
myFontsToLog.push(myDocFontPSName + '\t'+ myDocFonts[i].name.replace('\t',' ') + '\t'+ myDocFontType + '\t'+ myDocFontVersion + '\t'+ myDoc);
}
else {
}
}
}

if (myFontsToLog.length > 0)
{
var myNonOpenTypeFonts = myFontsLogged.concat(myFontsToLog);
myNonOpenTypeFonts.sort(); //Sortiere alle Zeilen alphabetisch (Zeilenanfang = PostScript-Name des Schriftschnittes)
var _f = write_file(File(myLogfile), myNonOpenTypeFonts.join('\r'));
}
else {
//alert('Es wurde kein neu-aufzunehmender NonOpenType-Font gefunden.')
}
myFontsToLog = [];
myFontsLogged = [];
myNonOpenTypeFonts = [];
}


//Öffnet eine Textdatei (read/write)
function write_file ( _file, _data )
{
if (! Folder(_file.path).exists)
Folder(_file.path).create();
_file.open( 'w' );
_file.encoding = 'UTF-8';
_file.writeln ( _data );
_file.close();
return (_file);
}


MfG Thomas


als Antwort auf: [#482495]
X

Skript um Schriften aus Dokument auszulesen?

MarkusD
Beiträge gesamt: 34

29. Sep 2021, 20:42
Beitrag # 17 von 19
Beitrag ID: #581266
Bewertung:
(5816 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend,

ich muss den alten Post noch einmal ausgraben.

Neben den Schriftart und -schnitt versuche ich gerade auch den Schrifttyp in einer Liste aufzulisten, nach der Art
Arial Bold Truetype
Ich scheitere allerdings daran, nach dem Namen den Typ zu listen.
Mit
Code
var doc_fonts = app.activeDocument.fonts.everyItem().name 


bekome ich den Namen und mit
Code
app.activeDocument.fonts.everyItem().fontType 



den Typ. Aber wie kann ich die beiden Informationen nacheinander abfragen, dass sie in der Liste nebeneinander stehen?
Danke für eure Hilfe!


als Antwort auf: [#483880]

Skript um Schriften aus Dokument auszulesen?

drerol74
Beiträge gesamt: 507

1. Okt 2021, 10:22
Beitrag # 18 von 19
Beitrag ID: #581280
Bewertung:
(5743 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Markus,

hast du mittlerweile schon eine Lösung gefunden? Wenn nicht:

Mit

Code
app.activeDocument.fonts.everyItem().name 
app.activeDocument.fonts.everyItem().fontType


bekommst du 2 unabhängige Arrays mit String-Werten. Um diese Werte aber zu kombinieren, versuch mal folgendes:

Code
 
var font_type_obj = {
ATC: "ATC",
BITMAP: "Bitmap",
CID: "CID",
OCF: "OCF",
OPENTYPE_CFF: "OpenType CFF",
OPENTYPE_CID: "OpenType CID",
OPENTYPE_TT: "OpenType TT",
TRUETYPE: "TrueType",
TYPE_1: "Type 1",
UNKNOWN: "Font type is unknown",
};

var doc_font_array = app.activeDocument.fonts.everyItem().getElements();

var font_string_array = [];

for(var i=0; i<doc_font_array.length; i++) {
var font_name;
var font_type_name;
var font_type_desc;
try {
font_name = doc_font_array[i].name;
font_type_name = doc_font_array[i].fontType.toString();
font_type_desc = font_type_obj[font_type_name];
} catch(err) {
font_type_desc = err.message;
}
var font_string = font_name + "\t" + font_type_desc;

font_string_array.push(font_string);
}


Das Objekt font_type_obj dient nur dazu, eine frei definierbare Beschreibung auszugeben.

Warum try...catch? Manchmal kommt es beim Abfragen von Font-Eigenschaften zu Fehlern.

Schöne Grüße
Roland


als Antwort auf: [#581266]

Skript um Schriften aus Dokument auszulesen?

MarkusD
Beiträge gesamt: 34

5. Okt 2021, 14:48
Beitrag # 19 von 19
Beitrag ID: #581351
Bewertung:
(5633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Roland,

entschuldige bitte, dass ich mich erst jetzt melde. Hatte ein langes freies Wochenende.
Ich bin noch nicht weitergekommen, deshalb danke für die Erklärung jetzt habe ich endlich begriffen, dass sich 2 Abfragen nicht einfach mit + oder ähnlichem kombinieren lassen.

Deinen Scriptentwurf habe ich getestet und noch die eine Sortierung eingefügt, jetzt klappt das:
Code
//Listet Schriften mit Typ auf  

var font_type_obj = {
ATC: "ATC",
BITMAP: "Bitmap",
CID: "CID",
OCF: "OCF",
OPENTYPE_CFF: "OpenType CFF",
OPENTYPE_CID: "OpenType CID",
OPENTYPE_TT: "OpenType TT",
TRUETYPE: "TrueType",
TYPE_1: "Type 1",
UNKNOWN: "Font type is unknown",
};

var doc_font_array = app.activeDocument.fonts.everyItem().getElements();

var font_string_array = [];

for(var i=0; i<doc_font_array.length; i++) {
var font_name;
var font_type_name;
var font_type_desc;
try {
font_name = doc_font_array[i].name;
font_type_name = doc_font_array[i].fontType.toString();
font_type_desc = font_type_obj[font_type_name];
} catch(err) {
font_type_desc = err.message;
}
var font_string = font_name + "\t" + font_type_desc;

font_string_array.push(font_string);
}
font_string_array.sort();
var _f = write_file(File('~/Desktop/fonts_of_' + app.activeDocument.name.replace(/\.indd$/i,'') + '.txt'), font_string_array.join('\r'));
_f.execute();

function write_file ( _file, _data )
{
if (! Folder(_file.path).exists)
Folder(_file.path).create();
_file.open( 'w' );
_file.encoding = 'UTF-8';
_file.writeln ( _data );
_file.close();
return (_file);
}


Vielen Dank für deine Hilfe!


als Antwort auf: [#581280]
X