[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Schriften suchen/ersetzen

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

Schriften suchen/ersetzen

Richard Hauck
Beiträge gesamt: 73

27. Apr 2010, 10:50
Beitrag # 1 von 15
Bewertung:
(18035 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Leute

ich stehe vor folgendem Problem und komme einfach nicht mehr weiter. Eigentlich brauche ich die Funktion von 'Schriftart suchen ...' als Skript.

Folgendes Szenario:
Wir bekommen von einem Lieferanten InDesign CS3 Files mit Inhalten und Layout (am Mac gemacht). Wir arbeiten dann mit diesen Dateien (InDesign CS4, Windows) weiter und schicken dann am Ende PDFs in den Druck. Daher habe ich jetzt ein Script geschrieben das uns einige Standards abarbeitet damit wir dann weiterarbeiten können. Leider haben wir einen speziellen Font dabei, den ich gerne über das gesamte Dokument ersetzen möchte.

So jetzt zum Problem. Wie ich aus diversen Beiträgen heraus gelesen habe kann ich nicht direkt auf die selbe Funktion 'Schriftart suchen ... -.> ersetzen' per Script zugreifen. Jetzt gehe ich eben den Text durch und wenn der falsche Font auftaucht ersetze ich ihn durch den richtigen. Funktioniert soweit echt gut. Leider habe ich aber immer wieder Rahmen (rectangle) bei denen irgendjemand immer wieder mit dem Textwerkzeug ankommt und ich einen IntersectionPoint mit dem falschen Font habe. Optisch hat das ganze keine Relevanz da ich ja kein Zeichen mit dem falschen Font mehr habe aber beim öffnen der Datei kommt dann die Warnung dass Fonts die nicht am System installiert sind verwendet werden.

Also die Frage: Kann ich vielleicht doch per Script generell einen verwendetet Font durch einen anderen ersetzen oder wie bekomme ich bei Rectangles einen IntersectionPoint zu fassen damit ich diese auch durchgehen kann und dort den Font tauschen (lieber wäre mir aber da ich lösche den IntersectionPoint). Ein Detail am Rande, ich habe bei den Rechtecken aber keine Raute als Textzeichen (Textende), wenn ich den Font suche blinkt aber der Cursor dort und hat als Font den falschen eingestellt.

Kann mir da jemand weiterhelfen - bin echt schon etwas Ratlos. Vielen Dank
Liebe Grüße
Richard
X

Schriften suchen/ersetzen

Uwe Laubender
Beiträge gesamt: 5316

27. Apr 2010, 11:01
Beitrag # 2 von 15
Beitrag ID: #440265
Bewertung:
(18029 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Richard!
Meinst Du den insertionPoints[0] einer Story?
Wie durchsuchst Du den Text? Klapperst Du alle textStyleRanges aller Stories ab?
Poste mal ein wenig relevanten Code und noch einen Screenshot eines der Textrahmen, in dem die Formatierung nicht gefunden wird (Verborgene Zeichen einblenden).


als Antwort auf: [#440263]

Schriften suchen/ersetzen

Richard Hauck
Beiträge gesamt: 73

27. Apr 2010, 11:17
Beitrag # 3 von 15
Beitrag ID: #440268
Bewertung:
(18013 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe

also hier einmal die Screenshots vom Schriften ersetzen Fenster und vom Dokument selbst.

Der Code zum ersetzen:
Code
function changeThisFont(thisDoc, oldName, newName){ 
allStories = thisDoc.stories;
x = 0;
while (x < allStories.length){
n = 0;
while (n < allStories[x].characters.length){
if(allStories[x].characters[n].appliedFont.name == oldName){
allStories[x].characters[n].appliedFont = app.fonts.item(newName);
}
n++;
}
x++;
}
}


lg Richard


als Antwort auf: [#440265]
Anhang:
Schriftart_suchen.png (15.4 KB)   Dokument.jpg (85.2 KB)

Schriften suchen/ersetzen

flobuc
Beiträge gesamt: 246

27. Apr 2010, 11:23
Beitrag # 4 von 15
Beitrag ID: #440269
Bewertung:
(18012 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Richard,

auf die Schnelle:
Probier doch das Suchen/Ersetzen der Schrift über den Suchen/Ersetzen-Funktion von InDesign (Stichwort findChangeTextOptions). Das müsste alle Stellen richtig finden und ersetzen.

Gruss

Flo


als Antwort auf: [#440263]

Schriften suchen/ersetzen

chris33
Beiträge gesamt: 189

27. Apr 2010, 11:40
Beitrag # 5 von 15
Beitrag ID: #440276
Bewertung:
(17986 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
unter vorbehalt da k.a. von ID:

eigentlich logisch, denn du hast ja keinen character dessen font du ersetzen könntest.
du könntest den Rahmen löschen
wenn characters.length == 0

oder die Storie des Rahmens löschen ?
dann aber nicht den zähler hochsetzen

oder wenn 0, einen character einsetzen, schrift zuweisen, character wieder löschen( ="" ). sicher die uneleganteste variante.

eine for schleife würde ich hier auch vorziehen, hat mit dem problem aber nichts zu tun.
Und, den Zähler mit var x=0 deklarieren damit sichergestellt ist das er nicht außerhalb der funktion sichtbar ist. Ist hier vielleicht auch egal, aber prinzipiell besser.


als Antwort auf: [#440268]
(Dieser Beitrag wurde von chris33 am 27. Apr 2010, 11:53 geändert)

Schriften suchen/ersetzen

Richard Hauck
Beiträge gesamt: 73

27. Apr 2010, 12:36
Beitrag # 6 von 15
Beitrag ID: #440289
Bewertung:
(17953 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ chris33 ] eigentlich logisch, denn du hast ja keinen character dessen font du ersetzen könntest.

Da liegt ja genau mein Hund begraben ;-(

Antwort auf [ chris33 ] du könntest den Rahmen löschen

Geht nicht - der Rahmen ist ja der färbige Hintergrund, eigentlich sollte da ja nie ein Zeichen rein - passiert aber immer wieder.

Antwort auf [ chris33 ] oder die Storie des Rahmens löschen ?

Da ist nichts im Rechteck drinnen - auch keine Stories, ich finde den InsertionPoint nur wenn ich mir ein Script schreibe das mir den Typ vom jeweiligen ausgewählten Element anzeigt, den Cursor bekomme ich nur hin wenn ich die Schrift suche, und daher bekomme ich ihn nicht zu fassen.


Antwort auf [ chris33 ] eine for schleife würde ich hier auch vorziehen, hat mit dem problem aber nichts zu tun.

Off Topik - warum ist eine for Schleife besser - habe nie wirklich den Unterschied verstanden.

@Flo: scheint ein Ansatz zu sein - nur wie tausche ich damit die Schrift aus? Habe auf die Schnelle nichts gefunden.

Danke, lg Richard


als Antwort auf: [#440276]

Schriften suchen/ersetzen

Martin Fischer
  
Beiträge gesamt: 12783

27. Apr 2010, 12:43
Beitrag # 7 von 15
Beitrag ID: #440291
Bewertung:
(17949 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Richard,

Du könntest auch mal einen Blick auf Hans Haeslers Skript Schriftentausch.js werfen.
Wo Du das findest, steht z.B. in http://www.hilfdirselbst.ch/..._P351293.html#351293.


als Antwort auf: [#440289]
(Dieser Beitrag wurde von Martin Fischer am 27. Apr 2010, 12:44 geändert)

Schriften suchen/ersetzen

flobuc
Beiträge gesamt: 246

27. Apr 2010, 13:06
Beitrag # 8 von 15
Beitrag ID: #440294
Bewertung:
(17925 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Richard,

hier ist ein Beispiel das "Times New Roman, Regular" durch "Palatino, Bold" ersetzt:

Code
//Clear the find/change preferences. 
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeLockedLayersForFind = false;
app.findChangeTextOptions.includeLockedStoriesForFind = false;
app.findChangeTextOptions.includeMasterPages = true;
app.findTextPreferences.appliedFont = "Times New Roman Regular";
app.changeTextPreferences.appliedFont = "Palatino LT Std Bold";
app.activeDocument.changeText();


Schriftart und Schnitt werden mit einem Tab getrennt.

Gruss

Flo


als Antwort auf: [#440289]
(Dieser Beitrag wurde von flobuc am 27. Apr 2010, 13:19 geändert)

Schriften suchen/ersetzen

chris33
Beiträge gesamt: 189

27. Apr 2010, 13:16
Beitrag # 9 von 15
Beitrag ID: #440297
Bewertung:
(17919 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ach so, ich dachte das wäre so was wie ein textrahmen.
Dann lösch doch einfach die leere Storie.
Ach ich fasel rum, wenn man keine Ahnung hat Mund halten, sorry.

Die while schleife braucht keinen zähler.
while (allStories){
würde also funktionieren. Da du aber ja den zähler brauchst um auf die arrayelemente zuzugreifen:
for(var i=0; i<allStories.length; i++){
hast du hier alles in einer Zeile, ist übersichtlicher.
manchmal ist ein zähler aber hinderlich, da kommt dann die whileschleife, z.B.
while(zeit< mittag){
Hunger()
}


als Antwort auf: [#440289]

Schriften suchen/ersetzen

Richard Hauck
Beiträge gesamt: 73

27. Apr 2010, 14:07
Beitrag # 10 von 15
Beitrag ID: #440307
Bewertung:
(17886 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Flo

danke für den Code - funktioniert soweit, nur leider nicht mit dieser verfluchten Schrift. Ich kann beliebige Schriften tauschen - auch in die endgültig richtige Schrift (tvindesign). Aber er ändert nichts wenn ich die alte Schrift suche (tvindesign (OTV)). Kann es sein dass da bei der Schriftdefinition was nicht stimmt?

lg Richard


als Antwort auf: [#440294]

Schriften suchen/ersetzen

Richard Hauck
Beiträge gesamt: 73

27. Apr 2010, 14:12
Beitrag # 11 von 15
Beitrag ID: #440308
Bewertung:
(17878 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin

Danke für den Tipp - dieses Script hatte ich schon gefunden und da auch das mit den Stories her. So wie ich das Script verstanden habe geht es eben nur so und nicht über eine globale Version. Mit dem Code mit 'app.findChangeTextOptions' scheint es zu gehen - aber eben nur nicht mit dieser einen Schrift.
lg Richard


als Antwort auf: [#440291]

Schriften suchen/ersetzen

flobuc
Beiträge gesamt: 246

27. Apr 2010, 15:09
Beitrag # 12 von 15
Beitrag ID: #440315
Bewertung:
(17839 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Richard,

ich kann dir schon erklären, warum das Skript deine Schrift nicht findet.
Du siehst im Schriftauswahlfenster die Schriftart "[tvindesign (OTF)]". Die eckigen Klammern bedeuten ja das die Schrift nicht verfügbar ist. Die Anmerkung "(OTF)" bedeutet aber du hast eine Schrift mit gleichem Namen aktiviert, jedoch von einem anderem Format (z.B. hast du eine "tvindesign" im Format TrueType offen). InDesign kennzeichnet dies dann mit einer Abkürzung in runden Klammern was das richtige Format wäre (z.B. Type 1 für Postscript, OTF OpenType und TT für TrueType). In deinem Fall will er eine OpenType haben. Soweit so gut.
Meiner Erfahrung nach kannst du in einem Skript mit einer fehlenden Schrift arbeiten. Ich kann jedoch nicht auf Schriften zugreifen, die durch gleichnamige Schriften in einem anderem Format ersetzt wurden. InDesign ordnet diese Schriften intern dann anders und ich komm per Skript da nicht ran.
Vielleicht kann hier jemand anderes weiterhelfen.


Workaround wäre: Deaktivier deine "tvindesign". Öffne das Dokument. Ersetzte "tvindesign" durch eine andere eindeutige Schrift, die nicht im Dokument vorkommt. Speichere das Dokument. Aktivier deine "tvindesign" und ersetze die eindeutige Schrift von vorher.

Gruss

Flo


als Antwort auf: [#440308]

Schriften suchen/ersetzen

Richard Hauck
Beiträge gesamt: 73

27. Apr 2010, 15:26
Beitrag # 13 von 15
Beitrag ID: #440318
Bewertung:
(17830 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Flo

also das löst mal einen großen Knoten ;-), das (OTF) nicht zum Namen des Fonts gehört war mir nicht bewusst. Dann kann ja keiner der Möglichkeiten funktionieren wo ich den Font als String schreibe. Jetzt verstehe ich auch warum das Script von Hans Haeslers als gesamtes funktioniert, wenn ich aber nur den relevanten Teil (ich brauche ja keine Zuordnung durch den User) herausnehme und die Arrays händisch baue nicht mehr geht.
(Obwohl ganz verstehe ich es nicht denn auch das Script schreibt mir 'tvindesign (OTF) | Regular' in die Textdatei)

Daher die neue Frage - kann ich auf den falschen Font irgendwie automatisch zugreifen!?!

lg Richard


als Antwort auf: [#440315]

Schriften suchen/ersetzen

flobuc
Beiträge gesamt: 246

27. Apr 2010, 15:35
Beitrag # 14 von 15
Beitrag ID: #440320
Bewertung:
(17823 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Richard,

hier liegt genau das Problem, wenn du dir den Font beim Debuggen im Datenbrowser anschaust, dann steht da bei "name" auch ganz brav: "tvindesign (OTF) Regular". Bloß du kannst auf den Font nicht zugreifen, da es einen Font "tvindesign (OTF)" nicht gibt, und der Font "tvindesign" im OTF-Format durch einen Font "tvindesign" in einem anderen Format überlagert wird.

Gruss

Flo


als Antwort auf: [#440318]

Schriften suchen/ersetzen

Richard Hauck
Beiträge gesamt: 73

30. Apr 2010, 11:18
Beitrag # 15 von 15
Beitrag ID: #440726
Bewertung:
(17717 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallihallo Leute

ich habe es jetzt auf die Reihe bekommen - Vielen Dank für all den guten Input.

hier einmal meine Abwandlung vom Skript von Hans Haeslers (Schriftentausch.js). Es wird eine Liste an Fonts die zu tauschen sind im Code definiert und nicht wie im Originalscript die Definitionen durch eine Eingabe gemacht.

Code
 
curDoc = app.documents[0];
fontsToChange = new Array(new Array("Arial Regular", "Verdana Regular"));
/* Die Fontliste mit den zu tauschenden Fonts ist ein Array
mit Arrays für jeden Font der getauscht werden soll.
Im inneren Array Pos 0: falscher Fontnamen und Schnitt
(Tab-getrennt), Pos 1: richtiger Fontname und Schnitt
(Tab-getrennt)
*/

function changeThisFont(curDoc, fontsToChange){

curDoc = app.documents[0];
docList = curDoc.fonts.everyItem().name;
nFonts = docList.length;
appList = new Array();

for (var i = 0; i < nFonts; i++){
var newFont = "";
for (var a = 0; a < fontsToChange.length; a++){
if (docList[i] == fontsToChange[a][0]){
newFont = fontsToChange[a][1];
}
}
appList.push(newFont);
}


//=================================================================
// Die Schriften der Texte und der Formate austauschen
//=================================================================

// die Schriften der Texte austauschen
var allStories = curDoc.stories;
var curFont;
var curNew;
var curOld;
var nStories = allStories.length;
var nTsr;
var tsr;
var tsrFonts;

for (var i=0; i<nStories; i++) {
tsr = curDoc.stories[i].textStyleRanges;
nTsr = tsr.length;
tsrFonts = tsr.everyItem().appliedFont;
for (var j=(nTsr)-1; j>-1; j--) {
try {
curFont = tsrFonts[j].name;
for (var k=0; k<nFonts; k++) {
curOld = docList[k];
if (curFont == curOld) {
if (curOld != "") {
curNew = appList[k];
if (curNew != "") {
tsr[j].appliedFont = curNew;
break;
}
}
}
}
}
catch (e) {
}
}
}

//===============================
// die Schriften der Absatzformate austauschen

var curStyle;
var paraStyles = curDoc.paragraphStyles;
var nParaStyles = paraStyles.length;

for (var i=1; i<nParaStyles; i++) {
try {
curStyle = paraStyles[i];
curFont = curStyle.appliedFont.name;
for (var j=0; j<nFonts; j++) {
curOld = docList[j];
if (curOld != "") {
if (curFont == curOld) {
curNew = appList[j];
if (curNew != "") {
curStyle.appliedFont = curNew;
break;
}
}
}
}
}
catch (e) {
}
}

//===============================
// die Schriften der Absatzformat-Gruppen austauschen

var curGroup;
var curParaStyles;
var nParaStyles;
curGroups = curDoc.paragraphStyleGroups;
var nParaStyleGroups = curGroups.length;

if (nParaStyleGroups > 0) {
for (var g=0; g<nParaStyleGroups; g++) {
curGroup = curGroups[g];
curParaStyles = curGroup.allParagraphStyles;
nParaStyles = curParaStyles.length;
for (var i=0; i<nParaStyles; i++) {
try {
curFont = curParaStyles[i].appliedFont.name;
for (var j=0; j<nFonts; j++) {
curOld = docList[j];
if (curOld != "") {
if (curFont == curOld) {
curNew = appList[j];
if (curNew != "") {
curParaStyles[i].appliedFont = curNew;
break;
}
}
}
}
}
catch (e) {
}
}
}
}

//===============================
// die Schriften der Zeichenformate austauschen

var charStyles = curDoc.characterStyles;
var curF;
var curS;
var nCharStyles = charStyles.length;

for (var i=1; i<nCharStyles; i++) {
try {
curStyle = charStyles[i];
curF = curStyle.appliedFont;
curS = curStyle.fontStyle;
curFont = curF + "\t" + curS;
for (var j=0; j<nFonts; j++) {
curOld = docList[j];
if (curOld != "") {
if (curFont == curOld) {
curNew = appList[j];
if (curNew != "") {
curStyle.appliedFont = curNew;
break;
}
}
}
}
}
catch (e) {
}
}

//===============================
// die Schriften der Zeichenformat-Gruppen austauschen

curGroups = curDoc.characterStyleGroups;
var nCharStyleGroups = curGroups.length;
if (nCharStyleGroups > 0) {
for (var g=0; g<nCharStyleGroups; g++) {
curGroup = curGroups[g];
curCharStyles = curGroup.allCharacterStyles;
nCharStyles = curCharStyles.length;
for (var i=0; i<nCharStyles; i++) {
try {
curStyle = curCharStyles[i];
curF = curStyle.appliedFont;
curS = curStyle.fontStyle;
curFont = curF + "\t" + curS;
for (var j=0; j<nFonts; j++) {
curOld = docList[j];
if (curOld != "") {
if (curFont == curOld) {
curNew = appList[j];
if (curNew != "") {
curStyle.appliedFont = curNew;
break;
}
}
}
}
}
catch (e) {
}
}
}
}

}


Vielleicht hilft es ja noch jemandem weiter.
lg Richard


als Antwort auf: [#440320]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
17.04.2024

Online
Mittwoch, 17. Apr. 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Günther Business Solutions

https://www.impressed.de/schulung.php?c=sDetail&sid=326

Und es geht doch: Automatisierung im Großformatdruck!