Interactieve stempels
Stempels in Revu zijn meer dan alleen Annotaties. Het zijn mini PDF-bestanden die formuliervelden en JavaScript kunnen bevatten. Wanneer u een stempel op een document toepast, voert Revu alle berekeningsscripts in de stempel uit, waardoor dynamisch gedrag en interactie met de gebruiker mogelijk zijn.
Wanneer een stempel op een PDF wordt geplaatst:
-
Formuliervelden binnen de stempel worden actief
-
Berekeningsscripts worden uitgevoerd met event.source.forReal ingesteld op Ja
-
Alle in de stempel gedefinieerde dialoogvensters verschijnen
-
Formuliervelden worden gevuld met de verzamelde gegevens
-
Het resulterende PDF-bestand wordt Plat als een statische stempelannotatie op de doel-PDF
De eigenschap event.source.forReal is essentieel: deze is alleen true tijdens het plaatsen van de stempel, waardoor uw code onderscheid kan maken tussen de eerste toepassing en andere berekeningsgebeurtenissen.
Een interactieve postzegel bestaat uit twee JavaScript-componenten:
-
Script op documentniveau: Hiermee definieert u de configuratie en het gedrag van uw stempel. Gebruikers kunnen dit gedeelte aanpassen om de postzegel aan te passen aan hun behoeften. Het bevat velddefinities, standaardwaarden en dialoogconfiguraties.
-
Scripts voor berekeningsveld: een verborgen formulierveld met berekenings-JavaScript dat wordt uitgevoerd wanneer de stempel wordt toegepast. Hiermee worden het maken van dialogen, het verzamelen van gebruikersinvoer en het invullen van velden afgehandeld. Gebruikers hoeven dit zelden aan te passen.
Het scripts op documentniveau is gecentreerd rond een builderobject dat definieert welke informatie uw stempel verzamelt:
var builder = {
// Text fields that will appear in the dialog
textBoxes: [
{
field: "CheckedBy", // Must match text field name in stamp PDF
description: "Checked by:", // Label shown in dialog
default: function() { return Collab.user; } // Dynamic default
},
{
field: "Date",
description: "Date:",
default: function() {
var curDate = new Date();
return (curDate.getMonth() + 1) + "/" +
curDate.getDate() + "/" +
curDate.getFullYear();
}
},
{
field: "SubmittalNumber",
description: "Submittal #:",
default: function() { return ""; } // Static default
}
],
// Radio button group for status selection
radioGroup: "Status", // Must match radio group name in stamp PDF
radioButtons: [
{ value: "Approved", description: "Approved" },
{ value: "Revise", description: "Revise" },
{ value: "Rejected", description: "Rejected" }
],
radioErrorMsg: "Please select a status"
}
Standaardwaarden kunnen statisch of dynamisch zijn. Dynamische standaardinstellingen zijn bijzonder nuttig:
// Static default
{ field: "Department", description: "Department:", default: function() { return "Engineering"; } }
// Dynamic default using current user
{ field: "Reviewer", description: "Reviewer:", default: function() { return Collab.user; } }
// Dynamic default using current date/time
{ field: "Timestamp", description: "Time:", default: function() {
var now = new Date();
return now.toLocaleTimeString();
} }
Een belangrijk onderscheid bij het werken met stempels is het begrijpen van de reikwijdte:
-
this verwijst naar de stempel PDF zelf
-
event.source verwijst naar het veld dat de berekening activeert
-
event.source.source verwijst naar het doeldocument dat wordt gestempeld
Hierdoor kunnen stempels informatie vastleggen uit het document waarop ze worden aangebracht:
var builder = {
textBoxes: [
{
field: "TargetFileName",
description: "Document:",
default: function() {
// Get filename of document being stamped
var path = event.source.source.path;
return path.split("/").pop().split("\\").pop();
}
},
{
field: "PageInfo",
description: "Page:",
default: function() {
var doc = event.source.source;
var currentPage = doc.pageNum + 1;
var totalPages = doc.numPages;
return currentPage + " of " + totalPages;
}
}
]
};
U kunt vervolgkeuzemenu's opnemen voor vooraf gedefinieerde selecties:
var builder = {
// ... other properties ...
popupGroup: "Project", // Must match popup field in stamp PDF
listItems: [{
popupItems: {
"Project Alpha": -1, // -1 means not selected by default
"Project Beta": -1,
"Project Gamma": 1, // 1 means selected by default
"Project Delta": -1
}
}]
}
Gebruik duidelijke, consistente naamgeving voor uw velden:
-
Gebruik PascalCase: ReviewerName, ApprovalDate
-
Vermijd Ruimtes en speciale tekens
-
Namen tussen JavaScript- en PDF-formuliervelden exact op elkaar afstemmen
-
Gebruik beschrijvende namen die het doel aangeven
// DOCUMENT LEVEL SCRIPT - Customize this for your needs
var builder = {
// Text input fields
textBoxes: [
{
field: "ReviewedBy",
description: "Reviewed by:",
default: function() {
return Collab.user || "Unknown User";
}
},
{
field: "ReviewDate",
description: "Date:",
default: function() {
var curDate = new Date();
return (curDate.getMonth() + 1) + "/" +
curDate.getDate() + "/" +
curDate.getFullYear();
}
},
{
field: "SubmittalNumber",
description: "Submittal #:",
default: function() { return ""; }
},
{
field: "DrawingNumber",
description: "Drawing #:",
default: function() { return ""; }
}
],
// Radio button group for approval status
radioGroup: "ApprovalStatus",
radioButtons: [
{ value: "Approved", description: "Approved as Submitted" },
{ value: "ApprovedAsNoted", description: "Approved as Noted" },
{ value: "ReviseResubmit", description: "Revise and Resubmit" },
{ value: "Rejected", description: "Rejected" }
],
radioErrorMsg: "Please select an approval status",
// Dropdown for discipline
popupGroup: "Discipline",
listItems: [{
popupItems: {
"Architectural": -1,
"Structural": -1,
"Mechanical": -1,
"Electrical": -1,
"Plumbing": -1,
"Civil": -1
}
}]
};
Het Scripts voor de berekeningsvelden dat deze builder uitvoert, is normaal gesproken verborgen en verwerkt de weergave van het dialoogvenster en het vullen van de velden automatisch.
Velden worden niet ingevuld
Veldnamen in JavaScript komen niet exact overeen met veldnamen in PDF-formulieren. Controleer de spelling, hoofdlettergebruik en spaties.
Dialoog verschijnt niet
Syntaxisfout in het Scripts op documentniveau. Controleer de JavaScript-console op fouten.
Standaardwaarden werken niet
Fout in standaardwaardefunctie. Controleer de console en zorg ervoor dat alle eigenschappen waarnaar wordt verwezen, bestaan.
Keuzerondjes worden niet opgeslagen
De exportwaarden van de keuzerondjes komen niet overeen met de JavaScript-waarden. Controleer de eigenschappen 'Keuze' van elke Knop.
Gebruik de volgende technieken bij het ontwikkelen van stempels:
// Console logging to trace execution
default: function() {
console.println("Getting user name...");
var userName = Collab.user;
console.println("User name: " + userName);
return userName || "Unknown";
}
// Alert debugging for variable values
app.alert("Current value: " + myVariable);
// Verify fields exist
var field = this.getField("MyFieldName");
if (!field) {
console.println("Field not found: MyFieldName");
}
Samenvatting
Interactieve stempels bieden een krachtige manier om de gegevensverzameling in uw PDF-workflows te standaardiseren. Herinneren:
-
Veldnamen moeten exact overeenkomen tussen JavaScript en PDF
-
Gebruik event.source.source om toegang te krijgen tot het doeldocument
-
Het script op documentniveau is wat gebruikers aanpassen
-
Test grondig vóór implementatie
Hulpbronnen
Revu 21
Revu JavaScript
JavaScript
