[GastForen Programme Print/Bildbearbeitung Adobe InDesign

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12785

28. Jun 2006, 22:42
Bewertung:

gelesen: 7824

Beitrag als Lesezeichen
Hallo Jan,

da hast Du Dir ne Menge Mühe gegeben und dann bremst Dich die Sache mit den Fußnoten doch noch aus. Nach den Irritierungen der letzten Tage ist es mir fast eine Erleichterung, daß AppleScript offensichtlich auch Probleme mit dem Zugriff auf diverse Objekte in den Fußnoten hat, wenn auch deutlich weniger als JavaScript.

Hatte ich Dich nicht darauf hingewiesen, daß die Schleife über die Zeichen zur Zuweisung als Scherz aufzufassen sei? ;-)
Du kannst die Ausführungsgeschwindigkeit etwas steigern, wenn Du auf diese Schleife verzichtest. Tausche dafür folgende Zeilen
Code
repeat with i from myStartPos to myEndPos by 1 
set applied character style of character i of myStory to myCharacterStyleRef
end repeat

durch diese Zeile aus:
Code
set applied character style of characters myStartPos thru myEndPos of myStory to myCharacterStyleRef 


Das Fußnotenproblem konnte ich innerhalb Deines AppleScripts nicht lösen.
Ich habe - mit Ausnahme der Überprüfung des Absatzformats - keine Möglichkeit gefunden, festzustellen, ob die gefundenen Zeichen sich in einer Fußnote befinden.
Ferner habe ich keine Möglichkeit gefunden, den Text der Fußnote, in der die Tags gefunden worden sind, in einen temporären Textrahmen zu verschieben, um sie dort bearbeiten zu lassen, weil ich aus der Fußnote selbst das Fußnotenobjekt nicht zu fassen bekomme.

Allerdings habe ich mit dem Skript [b]notes2text.jsx von [b]Peter Kahrel einen Weg gefunden, das Problem mit etwas Mut zu umschiffen:
Das Skript wandelt im aktiven Dokument sämtliche Fußnoten in Text um (hängt sie ans Ende der Textflüsse).
Danach kannst Du "fußnotenempfindliche" Skripte, wie Dein obiges AS ablaufen lassen.
Anschließend lassen sich mit demselben Skript die Fußnoten in Textform wieder in richtige Fußnoten umwandeln.
Über einen Dialog kannst Du wählen, ob Du die Fußnoten in Text oder umgekehrt konvertieren willst.

Code
// notes2text.jsx 
//DESCRIPTION: Converts footnotes of every story to text or back text to footnotes

// An InDesign CS2 script from Peter Kahrel
// with some adjustments and additions (Dialog to select the operation,
// considering every story but only the selected one) by Martin Fischer

//some global constants
notecueStyle = 'Fußnotenzeichen' //cues, char. style
notenumStyle = 'Fußnotenzeichen' //note number (in foot- and in endnotes), char. style
noteStyle = 'FN' //for notes, paragraph style
notePar1Style = 'FN' //for first paragraph in note, par. style
sepText = '\u2002' //separator text in notes
noteStart = '\u2704' //codes for notes when
noteEnd = '\u2705' //placed at end of story
u = undefined
//---------------------------------------------------------------------

var myResult = myDialog();
var myStories = app.documents[0].stories;
for (oneStory = 0; oneStory < myStories.length; oneStory++)
{
if (myResult == "notes2Text")
notes2text( myStories[oneStory] )
else text2Footnotes(myStories[oneStory])
}

function notes2text( theStory )
{
app.findPreferences = app.changePreferences = null
var notes = theStory.search( '^F' )
if( notes.length > 0 )
{
app.activeDocument.footnoteOptions.separatorText = ''
app.activeDocument.footnoteOptions.markerPositioning =
FootnoteMarkerPositioning.normalMarker
for( var j = 0; j < theStory.footnotes.length; j++ )
{
theStory.insertionPoints[-1].contents = '\r' + noteStart
theStory.footnotes[j].texts[0].move(
LocationOptions.after, theStory.insertionPoints[-1] )
theStory.insertionPoints[-1].contents = noteEnd
}
//must refresh 'notes'
var notes = theStory.search( '^F' )
for( var j = theStory.footnotes.length-1; j > -1; j-- )
notes[j].insertionPoints[0].contents = '</cue>'
theStory.search( '^F', false, false, '' )
}
}

//-----------------------------------------------------------------------

function text2Footnotes(theStory)
{
app.findPreferences = app.changePreferences = null
var cues = theStory.search( '</cue>' )
if( cues.length > 0 )
{
doNoteStyles()
var nStart = theStory.search( noteStart, false, true )
//var story = cues[0].parentStory
theStory.paragraphs.itemByRange(
nStart[0].paragraphs[0],
theStory.paragraphs[-1] ).applyStyle
( pStyles.item( noteStyle ), false )
//apply notePar1Style to first paragraph of each note
for( var j = nStart.length-1; j > -1; j-- )
nStart[j].paragraphs[0].applyStyle
( pStyles.item( notePar1Style ), false )

with( app.activeDocument.footnoteOptions )
{
footnoteTextStyle = pStyles.item( notePar1Style )
separatorText = sepText
footnoteMarkerStyle = chStyles.item( notecueStyle )
markerPositioning = FootnoteMarkerPositioning.normalMarker
}
for( var j = cues.length-1; j > -1; j-- )
var fn = cues[j].insertionPoints[0].footnotes.add()
var nStart = theStory.search( noteStart, false, true )
var nEnd = theStory.search( noteEnd, false, true )
for( var j = cues.length-1; j > -1; j-- )
theStory.characters.itemByRange( nStart[j], nEnd[j] ).move
( LocationOptions.after, theStory.footnotes[j].insertionPoints[-1] )
theStory.search( '</cue>', false, true, '' )
//delete placeholdres
theStory.search( noteStart, u, u, '' )
theStory.search( noteEnd, u, u, '' )
//mop up stray hard returns
while( theStory.characters[-1].contents == '\r' )
theStory.characters[-1].remove()
}
}

//--------------------------------------------------------------------------

//create some styles for notes
function doNoteStyles()
{
chStyles = app.activeDocument.characterStyles
if( chStyles.item( notecueStyle ) == null )
chStyles.add( { name : notecueStyle, position : Position.superscript } )
if( chStyles.item( notenumStyle ) == null )
chStyles.add( { name : notenumStyle } )
pStyles = app.activeDocument.paragraphStyles
if( pStyles.item( noteStyle ) == null )
pStyles.add( {
name : noteStyle,
basedOn : pStyles.item('[Basic Paragraph]') } )
if( pStyles.item( notePar1Style ) == null )
{
var temp = pStyles.add( {
name : notePar1Style,
basedOn : pStyles.item( noteStyle ) } )
with( temp.nestedStyles.add() )
{
appliedCharacterStyle = chStyles.item( notenumStyle )
delimiter = NestedStyleDelimiters.anyWord
inclusive = true
}
}
}

//-----------------------------------------------------------------------

function myDialog(myDefaultPara01,myDefaultPara02)
{
var myDialog = app.dialogs.add({name:"Operation"});
var theChoice = ["notes2Text", "text2Footnotes"];
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Choice:"});
}
with(dialogColumns.add()){
var myChoiceDropdown = dropdowns.add({stringList:theChoice, selectedIndex:0});
}
}
}
var theResult = myDialog.show();
if(theResult == true){
var theOpera = theChoice[myChoiceDropdown.selectedIndex]
myDialog.destroy();
}
else{
myDialog.destroy();
exit();
}
return theOpera;
}

Wäre das jetzt nicht eine neue Herausforderung für Dich, auch dieses Skript nach AppleScript zu übersetzen? ;-)

Viel Spaß
Martin

(Dieser Beitrag wurde von Martin Fischer am 10. Mai 2007, 11:45 geändert)
Änderungsverlauf:
Beitrag geändert von Yves Apel (Veteran) am 30. Jun 2006, 08:54
Beitrag geändert von Yves Apel (Veteran) am 30. Jun 2006, 08:55
Beitrag geändert von Martin Fischer (Moderator) am 10. Mai 2007, 11:45

Aktuell

InDesign / Illustrator
MTT_300x300_11_2022

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
18.06.2024

Online
Dienstag, 18. Juni 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: 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? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

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

So optimieren Sie Ihren LFP-Workflow
Veranstaltungen
20.06.2024

Online
Donnerstag, 20. Juni 2024, 15.00 - 15.45 Uhr

Webinar

Etiketten-Workflows gehören zu den anspruchsvollsten in der grafischen Industrie. Ihre PDF-Dateien sind oft sehr komplex und erfordern eine spezielle Vorbereitung. pdfToolbox bietet viele Möglichkeiten, um diese Arbeit zu automatisieren. Nehmen Sie an unserem Webinar "pdfToolbox für den Etikettendruck" teil und lernen Sie einige der Funktionen kennen, die Ihren Etiketten-Workflow effizienter gestalten. Einige der Bereiche, die Sie kennenlernen werden, sind: Beschnitt erzeugen Beim Etikettendruck ist das Druckmotiv oft nicht rechteckig. Lernen Sie, wie Sie einen passenden Beschnitt für alle Arten von Formen hinzufügen können. Produktionsreife Dateien erstellen nutzen Sie bereits vorliegende Inhalte oder Seiteninformationen, um eine Weißform hinter dem Seiteninhalt hinzuzufügen, eine passgenaue Lackform für bestimmte Objekte zu erzeugen oder eine Stanzlinie mit korrektem Sonderfarbnamen zu erstellen. Ausschießen, Step & Repeat, N-Up Mit der Ausschieß-Engine von pdfToolbox lassen sich Seiten zu größeren Druckbögen zusammenfassen, wobei verschiedene Layouts und Komplexitäten unterstützt werden. Hochwertige Freigabe-Bögen Erstellen Sie automatisch Freigabe-Bögen mit Vorschaubildern Ihrer Produktionsdatei und Auftragsdaten aus dem MIS. Qualitätskontrolle pdfToolbox enthält Standard-Preflight-Profile, die die grundlegenden Anforderungen an PDF-Dateien in Etiketten-Workflows abdecken. Prüfen Sie ob Ihre Dokumente internationalen Standards wie ISO PDF/X oder GWG (Ghent Workgroup) Spezifikationen entspricht. Verpackungs- und etikettenspezifische Vorgaben, wie der ISO-Standard „Processing Steps“, werden ebenfalls unterstützt.

kostenlos

Ja

Organisator: callassoftware

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

pdfToolbox für den Ettikettendruck