PageRange AccessMode
hi
i have a ADF BC View object that i want use PageRange Access Mode Feature in it.
but after set access mode to pageRange in run time ADF Show error message ORA-01446: cannot select ROWID from view with DISTINCT, GROUP BY, etc.
Even if the table doesn't have a primary key defined in the database, you can still mark any attributes in the vo that would uniquely identify a record as the primary key. Range paging mode won't work if you use rowid as the primary key
Similar Messages
-
Number of copies with setCollated does not work if PageRange is not set
I have a report which results are printed on 2 pages. If i set PrintReportOptions like below:
PrintReportOptions printOptions = new PrintReportOptions();
printOptions.setPrinterName( targetPrinter );
printOptions.setNumberOfCopies( 2 );
printOptions.setCollated( true );
printCntrl.printReport( printOptions );
I get ONLY one copy, other pages are not printed. So instead of getting 2 x 2 pages with order 1,2 1,2 i am getting only 1,2 so it seems that number of copies is not interpreted.
When i add a setup of a page range - everything works as excepted.
PrintReportOptions printOptions = new PrintReportOptions();
printOptions.setPrinterName( targetPrinter );
printOptions.setNumberOfCopies( 2 );
printOptions.setCollated( true );
PrintReportOptions.PageRange printPageRange = new PrintReportOptions.PageRange( 1, 2 );
printOptions.addPrinterPageRange( printPageRange );
printCntrl.printReport( printOptions );
But how can i find on how many pages report will be printed? - it's impossible. I thought that maybe i can set 100 as the upper limit of range but this doesn't work. The page range must be less or equal to the number of pages on which report will be printed.
When I am not using method setCollated or use it with false report is printed on desired number of pages and with expected amount of copies. ( in order 1,1 2,2 ) . Here is the code:
PrintReportOptions printOptions = new PrintReportOptions();
printOptions.setPrinterName( targetPrinter );
printOptions.setNumberOfCopies( 2 );
printOptions.setCollated( false );
printCntrl.printReport( printOptions );
I suspect that this is a bug of CR Java runtime. If so, when we may expect that it will be fixed?Hello.
I tested with the latest version of the Crystal Report runtime libraries (version 12.2.211) and it works for me as expected.
What I would suggest is that you test your application using the latest version 12.2.211 and see if this resolves the problem. Since it works for me on this latest version, I would expect that it would work for you as well. The latest version can be found at the following link under the section "Runtime Libraries":
http://www.businessobjects.com/campaigns/forms/downloads/crystal/eclipse/datasave.asp
A direct link to the zip file that contains the runtime components can be obtained from the following link:
http://downloads.businessobjects.com/akdlm/crystalreportsforeclipse/2_0/crjava-runtime_12.2.211.zip
If you are still experiencing problems after using the 12.2.211 runtime components, then maybe it is the case that your printer driver is causing an issue. The printer that I printed on is "HP Universal Printing PCL 5 (v5.1)".
I hope that updating the Crystal Reports runtime version to the latest resolves your problem.
Best of luck.
Regards.
- Robert -
Strange behavior with pageRange property (specifying ranges)
Hello everyone,
I'm trying to export two PDFs from one INDD in script. I want the first to include the first two pages and the second to include pages 3 through the last. When specifying a page range like this:
app.pdfExportPreferences.pageRange = '3-' + _doc.pages.length;
IDS always exports the full document as a PDF (doesn't skip pages 1 and 2).
I tried this too (with spaces):
app.pdfExportPreferences.pageRange = '3 - ' + _doc.pages.length;
But it had the same result. I've run this script in the debugger and check the value of pageRange. It's correct (_doc.pages.length returns a valid last page number).
If I do this:
app.pdfExportPreferences.pageRange = '1';
That works just fine.
Is there a trick to exporting a range of pages that I'm not seeing? I've verified it on two machines (my local and the server).
Thanks,
Ericdo your document starts from page number different than "1" ?? ;)
use page.name rather page.documentoffset
app.pdfExportPreferences.pageRange = _doc.pages[3].name + '-' + _doc.pages[-1].name
(I'm not JS man so check brackets type, etc.)
robin
www.adobescripts.com -
PDFExportPreference.pageRange CS4
I have a scripted export to a PDF, and I need to make sure it exports all pages. Currently, if the last export was a page range, it uses that range.
I have a PDFExportPreference variable (pdfPref), and when I try to set the pdfPref.pageRange, I get an error "Object does not support the property or method 'pageRange'." I have also tried app.PDFExportPreference.pageRange and get the same error.Hi,
app.pdfExportPreferences.pageRange = PageRange.ALL_PAGES
'pdf' is not uppercase ;-)
Hans -
Export each page in a pagerange
Dear all,
How do I export each page in a pagerange using js - eg. I enter a pagerange "2-4,5" and InDesign exports 4 files with one page pr. file?
From the examples included with InDesign I know how to export all the pages in a document as 1 page pr. export, or export a pagerange to one file (4 pages in one PDF file). But I can't seem to figure out how to couple a defined pagerange with looping through the document pages..
Kind regards,
Rasmus Olsenvar myDocument = app.activeDocument;
var myDocumentName = myDocument.name;
var myFolder = Folder.selectDialog ("Choose a Folder");
var unranged_array = unrange ("1-3,4")
function unrange (s)
return s.replace (/(\d+)-(\d+)/g, expand)
function expand ()
var expanded = [];
var start = Number (arguments[1]);
var stop = Number (arguments[2]);
for (var i = start; i <= stop; i++)
expanded.push (i);
return expanded
//alert(unranged_array);
mySplit = unranged_array.split(',');
for(var myCounter = 0; myCounter < mySplit.length; myCounter++) {
myPageName = myDocument.pages.item(myCounter).name;
//alert(myPageName)
with(app.pdfExportPreferences) {
pageRange = myPageName;
viewPDF = false;
myFilePath = myFolder + "/" + myDocumentName + "_" + myPageName + ".pdf";
myFile = new File(myFilePath);
myDocument.exportFile(ExportFormat.pdfType, myFile, false);
And I even learned how to use the pre tag. Wow, this makes me wet :-)
Thank you gentlemen, you are the best.
Rasmus -
[JS] CS3 pageRange conversions & validation
Hi there
Is there an easy way to convert page range string to absolute page numbers (especially when it contains characters or Roman numerals).
We use a custom rubber stamp on the back of our draft pages during the proofing process. I'd like to create a temporary page at the end of document, then capture the page range entered by user and interleave it with the "stamp page" When combined with double sided printing this might save us considerable amount of time.
Now, I can only do this with digits as page numbers. (and possibly ASCII characters). But I'm totally clueless when it come to Roman numerals.
My second question is about validating page range before I feed it to the printPreference. I didn't want to reinvent the wheel so I'm using the try...catch workaround so far. I just don't feel it's fair to the user to tell him "wrong page range you numpty" even when it's not case of him being a numpty.
Please can anyone give me some hint to point me to the right direction?
Thanks
wellerI am not sure to get the idea but regarding to Roman numerals, you may write a analysis function that will consist in attributing value to letters.
so "V" = 5;
X = 10;
I = 1;
then check for values and apply values
var mypgnb = 0;
if string.charAt[0] == "V" mypgnb += 5;
if string.charAt[0] == "X" mypgnb += 10;
if string.charAt[0] == "I" mypgnb += 1;
etc. A loop seems imperative through the length of the roman letters length.
The main point is to check for letters placement so IV has a diiferent sum than VI
But you can place conditions like
if string.charAt[x] == "I" && string.charAt[x+1] == "V" mypgnb -= 1;
Tricky and painfull but may finally get a integer value.
Hope it helps.
Loic -
Help using tagged text in document in exported filename
Hello, I am using the following script to export my Indesign documents as single page PDFs, and naming in a specific way:
var pdfPreset = "<PDF_preset>";
var exportPath = "<filepath>";
var jobNumber = "XXXXXX_"
for (aPage=0; aPage < app.activeDocument.pages.length; aPage++)
app.pdfExportPreferences.pageRange = app.activeDocument.pages[aPage].name;
app.activeDocument.exportFile (ExportFormat.PDF_TYPE, File(exportPath+"/"+jobNumber+pad(app.activeDocument.pages[aPage].name)+".pdf"), false, pdfPreset);
function pad (n) {
return ("00000"+n).slice(-3);
This will output the filenames as XXXXXX_002-003, etc, where XXXXXX is the customers ID number.
Instead of typing in each customers ID number in the script, I want to tag a text box within the document that contains only the customer's job number, then use the contents of that text box as the jobNumber variable.
How can I do that?There are many ways of "tagging" information in an InDesign document. For what you're doing, I'd suggest a unique paragraph style used only for this purpose, then you can search for text in it and use the contents.
Dave -
So I have a Foreach Loop Container that Enumerates a read Excel spreadsheet and this Foreach Loop get its User::SheetName. Can I change my flow accordingly based on the value of the User Variable User:SheetName that is dynamically valued by the Foreach Loop
Container? So if the User::SheetName is "Enrolled", I want to load that worksheet to a certain SQL Server Table using an Excel Source and OLE DB Destination and if the User::SheetName is "Engaged", I want to load its worksheet contents
to a different SQL Server Staging Table. What Task can I use to determine the value of User::SheetName or am I going to have to write a C# script to do this?
Any help and/or suggestions are GREATLY appreciated.
Thanks!Hi ITBobbyP,
According to your description, you want to read data from excel by using the Foreach Loop container with the appropriate enumerator. If that is the case, please refer to the following steps:
Inside the ADO NET enumerator, add a data flow task.
Inside the data flow task, add an Excel source.
Open the Excel source, and point to the Excel data source set up in the file enumerator.
Select one of the sheets that shows in the drop down.
Close the Excel source.
Select the Excel source.
In the properties window, copy the name of the sheet you selected. It's in the 'OpenRowset' property.
Set this as the initial string in your sheet name variable created to gather the sheet name from the ADO NET enumerator.
Select the Excel source.
In the properties window, change the 'AccessMode' to OpenRowset from Variable. This will change the property 'OpenRowset' to 'OpenRowsetVariable'.
Change the 'OpenRowsetVariable' to the variable created to hold the sheet name via the dropdown.
Open the Excel source. You should see your variable as the sheet name.
Click the 'Columns' tab to verify you can connect and mess with columns.
For detail information, please refer to the following document:
https://technet.microsoft.com/en-us/library/ms345182.aspx
If you have any more questions, please feel free to ask.
Thanks,
Wendy Fu
Wendy Fu
TechNet Community Support -
Problem with range page with SQL Server
Please help
JDev version JDEVADF_11.1.1.7.0_GENERIC_130226.1400.6493
I am using range paging for one of the VOs. The VO is based on single table. The VO is bounded to af:table. We need to support both Oracle and SQL server.
When database is Oracle , the range paging works fine.
But when database is SQLServer only first page is fetched properly, all the other pages are just copy of first page. The pagesize is default (25).
Did I miss anything ?
With accessMode=Scrollable the table show correct data for both Oracle and SQLServer.
This is my VO XML
<?xml version="1.0" encoding="windows-1252" ?>
<!DOCTYPE ViewObject SYSTEM "jbo_03_01.dtd">
<!---->
<ViewObject
xmlns="http://xmlns.oracle.com/bc4j"
Name="MessagesROVO"
Version="11.1.1.64.93"
InheritPersonalization="true"
OrderBy='"TIMESTAMP" desc'
BindingStyle="JDBC"
CustomQuery="true"
RowClass="model.bc4j.queries.admin.MessagesROVORowImpl"
ComponentClass="model.bc4j.queries.admin.MessagesROVOImpl"
FetchMode="FETCH_AS_NEEDED"
PageIterMode="Full"
UseGlueCode="false"
Passivate="All"
AccessMode="RANGE_PAGING">
<DesignTime>
<Attr Name="_codeGenFlag2" Value="Access|Coll|VarAccess"/>
<Attr Name="_isExpertMode" Value="true"/>
<Attr Name="_isCodegen" Value="true"/>
</DesignTime>
<Properties>
<SchemaBasedProperties>
<LABEL
ResId="model.bc4j.queries.admin.MessagesROVO_LABEL"/>
</SchemaBasedProperties>
</Properties>
<Variable
Name="BINDApplicationName"
Kind="viewcriteria"
Type="java.lang.String">
<AttrArray Name="ExtendedDataInts">
<Item Value="0"/>
</AttrArray>
</Variable>
<Variable
Name="BINDServerName"
Kind="viewcriteria"
Type="java.lang.String">
<AttrArray Name="ExtendedDataInts">
<Item Value="1"/>
</AttrArray>
</Variable>
<Variable
Name="BINDStartTimestamp"
Kind="viewcriteria"
Type="java.lang.Float">
<AttrArray Name="ExtendedDataInts">
<Item Value="3"/>
</AttrArray>
</Variable>
<Variable
Name="BINDEndTimestamp"
Kind="viewcriteria"
Type="java.lang.Float">
<AttrArray Name="ExtendedDataInts">
<Item Value="4"/>
</AttrArray>
</Variable>
<SQLQuery>
<![CDATA[SELECT
ERRORLOG.SGUID GUID,
ERRORLOG.LLOGTYPE LOGTYPE,
ERRORLOG.DTIMESTAMP TIMESTAMP,
ERRORLOG.SSERVERNAME SERVERNAME,
ERRORLOG.SAPPNAME APPNAME,
ERRORLOG.SXMLERROR XMLERROR
FROM
ERRORLOG ERRORLOG]]>
</SQLQuery>
<ViewAttribute
Name="Guid"
IsUpdateable="false"
IsPersistent="false"
IsNotNull="true"
PrecisionRule="true"
Precision="40"
Scale="0"
Type="java.lang.String"
ColumnType="NVARCHAR2"
AliasName="GUID"
Expression="GUID"
SQLType="VARCHAR">
<DesignTime>
<Attr Name="_DisplaySize" Value="40"/>
</DesignTime>
</ViewAttribute>
<ViewAttribute
Name="LogType"
IsUpdateable="false"
IsPersistent="false"
PrecisionRule="true"
Precision="6"
Scale="0"
Type="java.lang.Integer"
ColumnType="NUMBER"
AliasName="LOGTYPE"
Expression="LOGTYPE"
SQLType="INTEGER">
<DesignTime>
<Attr Name="_DisplaySize" Value="7"/>
</DesignTime>
</ViewAttribute>
<ViewAttribute
Name="Timestamp"
IsUpdateable="false"
IsPersistent="false"
PrecisionRule="true"
Precision="54"
Scale="0"
Type="java.lang.Float"
ColumnType="FLOAT"
AliasName="TIMESTAMP"
Expression="TIMESTAMP"
SQLType="FLOAT">
<DesignTime>
<Attr Name="_DisplaySize" Value="18"/>
</DesignTime>
<Dependencies>
<Item
Value="OccuredAt"/>
</Dependencies>
</ViewAttribute>
<ViewAttribute
Name="ServerName"
IsUpdateable="false"
IsPersistent="false"
PrecisionRule="true"
Precision="64"
Scale="0"
Type="java.lang.String"
ColumnType="NVARCHAR2"
AliasName="SERVERNAME"
Expression="SERVERNAME"
SQLType="VARCHAR">
<DesignTime>
<Attr Name="_DisplaySize" Value="64"/>
</DesignTime>
</ViewAttribute>
<ViewAttribute
Name="AppName"
IsUpdateable="false"
IsPersistent="false"
PrecisionRule="true"
Precision="10"
Scale="0"
Type="java.lang.String"
ColumnType="NVARCHAR2"
AliasName="APPNAME"
Expression="APPNAME"
SQLType="VARCHAR">
<DesignTime>
<Attr Name="_DisplaySize" Value="10"/>
</DesignTime>
</ViewAttribute>
<ViewAttribute
Name="XmlError"
IsUpdateable="false"
IsQueriable="false"
IsPersistent="false"
PrecisionRule="true"
Type="java.lang.String"
ColumnType="LONGVARCHAR"
AliasName="XMLERROR"
Expression="XMLERROR"
SQLType="VARCHAR"/>
<ViewAttribute
Name="OccuredAt"
IsUpdateable="false"
IsSelected="false"
IsPersistent="false"
PrecisionRule="true"
Type="java.sql.Date"
ColumnType="DATE"
AliasName="VIEW_ATTR"
SQLType="DATE"/>
<ViewAttribute
Name="Summary"
IsUpdateable="false"
IsSelected="false"
IsPersistent="false"
PrecisionRule="true"
Type="java.lang.String"
ColumnType="VARCHAR2"
AliasName="VIEW_ATTR"
SQLType="VARCHAR"/>
<ViewAttribute
Name="TechnicalError"
IsUpdateable="false"
IsSelected="false"
IsPersistent="false"
PrecisionRule="true"
Type="java.lang.String"
ColumnType="VARCHAR2"
AliasName="VIEW_ATTR"
SQLType="VARCHAR"/>
<ViewCriteria
Name="MessagesROVOCriteria"
ViewObjectName="model.bc4j.queries.admin.MessagesROVO"
Conjunction="AND">
<Properties>
<CustomProperties>
<Property
Name="displayOperators"
Value="InAdvancedMode"/>
<Property
Name="autoExecute"
Value="false"/>
<Property
Name="allowConjunctionOverride"
Value="true"/>
<Property
Name="showInList"
Value="false"/>
<Property
Name="mode"
Value="Basic"/>
</CustomProperties>
</Properties>
<ViewCriteriaRow
Name="vcrow6"
UpperColumns="1">
<ViewCriteriaItem
Name="Timestamp"
ViewAttribute="Timestamp"
Operator="BETWEEN"
Conjunction="AND"
Required="Optional">
<ViewCriteriaItemValue
Name="MessagesROVOCriteria_vcrow6_Timestamp_vcval0"
Value=":BINDStartTimestamp"
IsBindVarValue="true"/>
<ViewCriteriaItemValue
Name="MessagesROVOCriteria_vcrow6_Timestamp_vcval1"
Value=":BINDEndTimestamp"
IsBindVarValue="true"/>
</ViewCriteriaItem>
<ViewCriteriaItem
Name="ServerName"
ViewAttribute="ServerName"
Operator="="
Conjunction="AND"
Value=":BINDServerName"
IsBindVarValue="true"
Required="Optional"/>
<ViewCriteriaItem
Name="MessagesROVOCriteria_vcrow6_AppName"
ViewAttribute="AppName"
Operator="="
Conjunction="AND"
Value=":BINDApplicationName"
IsBindVarValue="true"
Required="Optional"/>
</ViewCriteriaRow>
</ViewCriteria>
<AttrArray Name="KeyAttributes">
<Item Value="Guid"/>
</AttrArray>
<ResourceBundle>
<XliffBundle
id="model.resource.ViewObjectsBundle_en"/>
</ResourceBundle>
</ViewObject>ADF does not support VO Range Paging with MS SQL Server. ADF supports VO Range Paging only with Oracle DB:
Oracle ADF Business Components with Multiple Databases
As far as the document above is not quite clear, I took a look inside the source code of the methods buildRangePagingQuery(...) of classes oracle.jbo.server.ViewObjectImpl, oracle.jbo.server.BaseSQLBuildeImpl, oracle.jbo.server.SQLServerSQLBuilderImpl and oracle.jbo.server.OracleSQLBuilderImpl (ADF 11.1.1.7) in order to confirm my statement.
In my opinion, it is possible to add Range Paging support for a SQLServer-backed VO by implementing a custom VO class and overriding the method ViewObjectImpl.buildRangePagingQuery(...). Your method implementation should take into account the specifics of MS SQL Server and its SQL syntax.
Dimitar
Message was edited by: DimitarDimitrov
P.S. The oracle.jbo.server.SQLServerSQLBuilderImpl class does not implement its own buildRangePagingQuery() method and uses the method implementation from its base class oracle.jbo.server.BaseSQLBuilderImpl, The base implementation just returns the original VO query intact. This is the reason you get the same rows as from the 1st page when you try to navigate through the pages. -
Print a report to a printer (server-side printing) Error
<p>Hi ran into some hiccups following a sample from crxi_r2_jrc_desktop_samples</p><p>JRCPrintReport</p><p>I am attempting to send a report for printing on a Thick Client Application.</p><p>This is the error.</p><p align="left">- All configurations cleared.</p><p align="left">- CRConfig.xml not found</p><u><font color="#000080">com.crystaldecisions.sdk.occa.report.lib.ReportSDKPrinterException</font></u><font color="#ff0000">: Printer name could not be set: Brother MFC-8840D Printer on Megatron---- Error code:-2147215357 Error code name:internal</font><font color="#ff0000"> <p align="left">at com.crystaldecisions.sdk.occa.report.lib.ReportSDKPrinterException.throwReportSDKPrinterException(Unknown Source)</p><p align="left">at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.printReport(Unknown Source)</p><p align="left">at com.crystaldecisions.reports.sdk.PrintOutputController.printReport(Unknown Source)</p><p>at JRCPrintReport.main(<u><font color="#000080">JRCPrintReport.java:78</font></u><font color="#ff0000">)</font></p><p>... </p><p>...</p></font><p><font color="#ff0000"> The printer name is verified to be correct.</font></p><p><font color="#ff0000">I tried to place ReportPrinter.jar at the first order but to no avail.</font></p><p><font color="#ff0000">Orbid</font></p>
Sean:
This is similar to mine which i followed from the sample.
Code:
<font color="#7f0055"><p align="left">public <strong><font color="#7f0055">class</font> JRCPrintReport
<font color="#7f0055">static</font> final String <font color="#0000c0">REPORT_NAME</font> = "JRCPrintReport.rpt";
<font color="#7f0055">public</font> static <font color="#7f0055">void</font> main(String[] args)
<font color="#7f0055">try</font>
//Open report.
ReportClientDocument reportClientDoc = <font color="#7f0055">new</font> ReportClientDocument();
reportClientDoc.open(<font color="#0000c0">REPORT_NAME</font>, 0);
//Create and set print options.
PrintReportOptions printOptions = <font color="#7f0055">new</font> PrintReportOptions();
printOptions.setPrinterName("
Megatron
1160-TID");
printOptions.setJobTitle("Sample Print Job from JRC.");
printOptions.setPrinterDuplex(PrinterDuplex.<font color="#0000c0">horizontal</font>);
printOptions.setPaperSource(PaperSource.<font color="#0000c0">auto</font>);
printOptions.setPaperSize(PaperSize.<font color="#0000c0">paperA4</font>);
printOptions.setNumberOfCopies(1);
printOptions.setCollated(<font color="#7f0055">false</font>);
PrintReportOptions.PageRange printPageRange =
<font color="#7f0055">new</font> PrintReportOptions.PageRange(1, 1);
printOptions.addPrinterPageRange(printPageRange);
//Print report.
reportClientDoc.getPrintOutputController()
.printReport(printOptions);
//Release report.
reportClientDoc.close();
System.<font color="#0000c0">out</font>.println("Successfully send report to the printer.");
<font color="#7f0055">catch</font> (ReportSDKException ex)
ex.printStackTrace();
Any views on this error?
Printer name could not be set:
Megatron1160-TID---- Error code:-2147215357 Error code name:internal
Anybody else having problems with sending a report to a printer?
Orbid -
Unable to open Document from Asset Business Package
Hi,
We have installed Asset Business Package in portal. Almost everything is working fine. But when we try to open a document (PDF ) attached to an asset by clicking the document link in the page, a new browser window opens with a text inside. The PDF does not appear.
The text is actually a URL. If we copy this and paste in any browser window, it opens the actual document.
e.g. when we click the document link, the browser opens with the following text written inside it -
http://<DMS Server>:<Port>/contentserver/contentserver.dll?get;pVersion=0046&contRep=ZKPRO&docId=DD259BBB070E4BF182370017085D4BF5&compId=2008_SAP_Multi-resource-planning.pdf;accessMode=r&authId=CN%3DDCWW,OU%3DDCWW,O%3DmySAP.comWorkplace,C%3DDE&expiration=20080519170225&secKey=MIIBLwYJKoZIhvcNAQcCoIIBIDCCARwCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHATGB%2FDCB%2BQIBATBOMEkxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNteVNBUC5jb20gV29ya3BsYWNlMQ0wCwYDVQQLEwREQ1dXMQ0wCwYDVQQDEwREQ1dXAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wODA1MTkxNTAyMjVaMCMGCSqGSIb3DQEJBDEWBBT3kV9haN8uzlLYKfDyN1KaVmD3MzAJBgcqhkjOOAQDBC8wLQIVAM0lkZG0ywkl%2FlTwWF0ubVul%2FXp3AhQBqnvX1EMBFZiK5U9TA%2FD5mWJdXQ%3D%3D
But if we copy this text and open it in another browser, the actual document opens up.
Can you please help me in this issue? How the document will open up automatically without showing the document URL.
Thanks and Regards,
SudipHi,
We have installed Asset Business Package in portal. Almost everything is working fine. But when we try to open a document (PDF ) attached to an asset by clicking the document link in the page, a new browser window opens with a text inside. The PDF does not appear.
The text is actually a URL. If we copy this and paste in any browser window, it opens the actual document.
e.g. when we click the document link, the browser opens with the following text written inside it -
http://<DMS Server>:<Port>/contentserver/contentserver.dll?get;pVersion=0046&contRep=ZKPRO&docId=DD259BBB070E4BF182370017085D4BF5&compId=2008_SAP_Multi-resource-planning.pdf;accessMode=r&authId=CN%3DDCWW,OU%3DDCWW,O%3DmySAP.comWorkplace,C%3DDE&expiration=20080519170225&secKey=MIIBLwYJKoZIhvcNAQcCoIIBIDCCARwCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHATGB%2FDCB%2BQIBATBOMEkxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNteVNBUC5jb20gV29ya3BsYWNlMQ0wCwYDVQQLEwREQ1dXMQ0wCwYDVQQDEwREQ1dXAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wODA1MTkxNTAyMjVaMCMGCSqGSIb3DQEJBDEWBBT3kV9haN8uzlLYKfDyN1KaVmD3MzAJBgcqhkjOOAQDBC8wLQIVAM0lkZG0ywkl%2FlTwWF0ubVul%2FXp3AhQBqnvX1EMBFZiK5U9TA%2FD5mWJdXQ%3D%3D
But if we copy this text and open it in another browser, the actual document opens up.
Can you please help me in this issue? How the document will open up automatically without showing the document URL.
Thanks and Regards,
Sudip -
Page Exporter Utility (PEU) 5 Script
I love this script, It really has potential to shave valuable time off of our production (exporting Hundreds of pages manually to single files is tedious and time consuming). The problem I'm having is I'm hesitant to us it because it dosn't show warnings when there is a missing link or font. There's also no warning when it overwrites a file. My question is dose anyone know how to unsuppress the warnings? I've looked over the script and don't see anything that is actively suppressing them.
Thanks
Dan
// PageExporterUtility5.0.js
// An InDesign CS JavaScript
// 08 NOV 2007
// Copyright (C) 2007 Scott Zanelli. Lonelytree Software. (www.lonelytreesw.com)
// Coming to you from Quincy, MA, USA
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
var peuINFO = new Array();
peuINFO["csVersion"] = parseInt(app.version);
// Save the old interaction level
if(peuINFO.csVersion == 3) { //CS1
peuINFO["oldInteractionPref"] = app.userInteractionLevel;
app.userInteractionLevel = UserInteractionLevels.interactWithAll;
else { //CS2+
peuINFO["oldInteractionPref"] = app.scriptPreferences.userInteractionLevel;
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
// See if a document is open. If not, exit
if((peuINFO["numDocsToExport"] = app.documents.length) == 0){
byeBye("Please open a document and try again.",true);
// Global Variable Initializations
var VERSION_NAME = "Page Exporter Utility 5.0"
var pseudoSingleton = 0;
var progCurrentPage = 0;// Used for progress bar
var progTotalPages = 0; // Used for progress bar
var commonBatchINFO = getNewTempENTRY(); // Used if "Set For All Batch Jobs" is selected
commonBatchINFO["infoLoaded"] = false;
peuInit(); // Initialize commonly needed info
// Store information needed for batch processing (valid for single also)
var printINFO = new Array();
// Get all needed info by looping for each document being exported
for(currentDoc = 0; currentDoc < peuINFO.numDocsToExport; currentDoc++) {
// Get name of document and set it as the base name
// minus the extention if it exists
var tempENTRY = getNewTempENTRY(); // "Struct" for current document info
tempENTRY.theDoc = app.documents[currentDoc]
tempENTRY.singlePage = (tempENTRY.theDoc.documentPreferences.pagesPerDocument==1)?true:false;
tempENTRY.getOut = true;
var baseName = (tempENTRY.theDoc.name.split(".ind"))[0];
// Display the dialog box and loop for correct info
if((!commonBatchINFO.infoLoaded && peuINFO.batchSameForAll) || (!peuINFO.batchSameForAll) ){// get all info
do{
tempENTRY.getOut = true; // For handling input errors
var mainDialog = createMainDialog(tempENTRY.theDoc.name, currentDoc+1, peuINFO.numDocsToExport);
// Exit if cancel button chosen
if(!mainDialog.show() ){
mainDialog.destroy();
byeBye("Exporting has canceled by user.",peuINFO.sayCancel);
if(formatTypeRB.selectedButton == 4 - peuINFO.adjustForNoPS){
changePrefs();
tempENTRY.getOut = false;
continue;
// Read info from dialog items and keep as defaults and place in tempENTRY
peuINFO.defaultDir = outputDirs.selectedIndex;
// The index of the selected directory is the same as the
// index in the array of directories.
tempENTRY.outDir = peuINFO.dirListArray[peuINFO.defaultDir];
// Type of renaming to do
tempENTRY.nameConvType = namingConvention.selectedButton
// The base name to add page info to
tempENTRY.baseName = removeColons(removeSpaces(newBaseName.editContents) );
// The start [and end] page numbers
var startEndPgs = startEndPgs.editContents;
// Wether to do spreads or not
peuINFO.doSpreadsON = (doSpreads.checkedState)?1:0;
tempENTRY.doSpreadsON = peuINFO.doSpreadsON;
// Wether to send entire file as one document
peuINFO.doOneFile = (oneFile.checkedState)?1:0;
tempENTRY.doOneFile = peuINFO.doOneFile;
// Export format type
tempENTRY.formatType = formatTypeRB.selectedButton + peuINFO.adjustForNoPS;
// Set persistence during warnings
peuINFO.editStartEndPgs = startEndPgs;
baseName = tempENTRY.baseName;
peuINFO.exportDefaultType = tempENTRY.formatType;
// Determine if page replacement token exists when the page token option is used
if(peuINFO.pageNamePlacement == 2){
var temp = tempENTRY.baseName.indexOf("<#>");
if(temp == -1){//Token isn't there
alert("There is no page item token (<#>) in the base name. Please add one or change the page naming placement preference.");
tempENlert.getOut = false;
pseudoSingleton--; // Allow prefs to be accessed again, but just once
continue;
else
pseudoSingleton++;
else // Try to remove any <#>s as a precaution
tempENTRY.baseName = tempENTRY.baseName.replace(/<#>/g,"");
// Layer Versioning & Batch options
if(currentDoc < 1){
peuINFO.layersON = (doLayers.checkedState)?1:0;
if(peuINFO.numDocsToExport > 1){
peuINFO.batchSameForAll = (commonBatch.checkedState)?1:0;
peuINFO.batchON = (doBatch.checkedState)?1:0;
if(!peuINFO.batchON)
peuINFO.numDocsToExport = 1;
//Check if spreads chosen with 'Add ".L"' option as this isn't supported.
if(peuINFO.doSpreadsON && tempENTRY.nameConvType == 1){
alert ("Spreads cannot be used with the 'Add \".L\"' option.\nThis combination is not supported. (1.1)");
tempENTRY.nameConvType = 0;
tempENTRY.getOut = false;
continue;
else if(peuINFO.doSpreadsON && tempENTRY.nameConvType == 4){
alert ("Spreads cannot be used with the 'Numeric Override' option.\nThis combination is not supported. (1.2)");
tempENTRY.nameConvType = 0;
tempENTRY.getOut = false;
continue;
// Check if "Send Entire File At Once" is selected with JPG or EPS
if(peuINFO.doOneFile && tempENTRY.formatType > 1 ){
alert ("The 'Send Entire File At Once' option can only be used with PostScript or PDF formats. (1.3)");
tempENTRY.getOut = false;
continue;
// Check if: batch printing and using the "Same for all jobs options" and a page range other than "All" was used
if(peuINFO.doBatch && peuINFO.batchSameForAll && startEndPgs != "All"){
alert ("The 'Set For All Batch Jobs' option can only be used with a Page Range of 'All'. Page Range has been reset to 'All'. (1.4)");
startEndPgs = "All";
// Create page info, skip if doing entire file as one
var tempPageCount = 0;
if(tempENTRY.doOneFile)
tempPageCount = 1;
else{
// Get names of all the pages. Needed when pages are named using sectioning
tempENTRY = recordPgNames(tempENTRY);
// Check Page Validity and get Page counts of entered section(s)
var temp = checkPages(tempENTRY, startEndPgs);
tempENTRY = temp[0];
tempPageCount = temp[1];
temp = null; // Free it up
} while(!tempENTRY.getOut);
// Remove dialog from memory
mainDialog.destroy();
// Determine if tag will fit correctly
tempENTRY.useTag = usePgInfoTag(tempENTRY.theDoc.viewPreferences.horizontalMeasurementUnits,tempENTRY.theDoc.documentPreferences.pageWidth);
// Get the format info for this document
switch(tempENTRY.formatType){
case 0://PS
tempENTRY.psINFO = getPSoptions(tempENTRY.theDoc.name.split(".ind")[0]);
break;
case 1://PDF
tempENTRY.pdfPRESET = getPDFoptions(tempENTRY);
break;
case 2: // EPS Formatting
tempENTRY.epsINFO = getEPSoptions(tempENTRY.theDoc.name.split(".ind")[0]);
peuINFO.origSpread = app.epsExportPreferences.epsSpreads;// Used to reset to original state when done
app.epsExportPreferences.epsSpreads = peuINFO.doSpreadsON;
break;
case 3: // JPEG Formatting
tempENTRY.jpegINFO = getJPEGoptions(tempENTRY.theDoc.name.split(".ind")[0]);
break;
// If Specific Directory was chosen for the output directory, get it now
if(peuINFO.defaultDir == 0){
tempENTRY.outDir = getDirectory("Please select the output directory:",peuINFO.startingDirectory);
if(tempENTRY.outDir != null)
tempENTRY.outDir += "/";
else
byeBye("Exporting has been canceled by user.", peuINFO.sayCancel);
// Set the common elements for all batch jobs if it was selected
if(!commonBatchINFO.infoLoaded && peuINFO.batchSameForAll){
commonBatchINFO.infoLoaded = true;
commonBatchINFO.pageNamePlacement = tempENTRY.pageNamePlacement;
commonBatchINFO.outDir = tempENTRY.outDir;
commonBatchINFO.nameConvType = tempENTRY.nameConvType
commonBatchINFO.doSpreadsON = tempENTRY.doSpreadsON;
commonBatchINFO.doOneFile = tempENTRY.doOneFile;
commonBatchINFO.formatType = tempENTRY.formatType;
commonBatchINFO.psINFO = tempENTRY.psINFO;
commonBatchINFO.pdfPRESET = tempENTRY.pdfPRESET
commonBatchINFO.epsINFO = tempENTRY.epsINFO
commonBatchINFO.jpegINFO = tempENTRY.jpegINFO;
} // End each/first of batch
else{ // Get the base name for other batch jobs
do{
tempENTRY.getOut = true;
var nameDialog = app.dialogs.add({name:(VERSION_NAME + ": Base Name for \"" + tempENTRY.theDoc.name + "\"" + ((peuINFO.numDocsToExport==1)?"":" (" + (currentDoc+1) + " of " + peuINFO.numDocsToExport + " documents)") ), canCancel:true} );
with (nameDialog){
with (dialogColumns.add() ){
with(dialogRows.add() ){
staticTexts.add({staticLabel:"Enter the Base Name for \"" + tempENTRY.theDoc.name + "\""} );
var newBaseName = textEditboxes.add({editContents:baseName, minWidth:135} );
with(dialogRows.add() )
staticTexts.add({staticLabel:"", minWidth:400} );
if(!nameDialog.show() ){
nameDialog.destroy();
byeBye("User canceled export.",peuINFO.sayCancel);
else{
tempENTRY.baseName = removeColons(removeSpaces(newBaseName.editContents) );
nameDialog.destroy();
// Determine if page replacement token exists when the page token option is used
if(peuINFO.pageNamePlacement == 2){
var temp = tempENTRY.baseName.indexOf("<#>");
if(temp == -1){//Token isn't there
alert("There is no page item token (<#>) in the base name. Please add one or click cancel in the next dialog box.");
tempENTRY.getOut = false;
else // Try to remove any <#>s as a precaution
tempENTRY.baseName = tempENTRY.baseName.replace(/<#>/g,"");
}while(!tempENTRY.getOut);
// Get names of all the pages. Needed when pages are named using sectioning
tempENTRY = recordPgNames(tempENTRY);
// Set pgStart and pgEnd, forcing "All" pages to output
tempENTRY = (checkPages(tempENTRY, "All"))[0];
// The page count is all pages due to common batching
tempPageCount = tempENTRY.theDoc.pages.length;
// This info is common, get it from commonBatchINFO:
tempENTRY.pageNamePlacement = commonBatchINFO.pageNamePlacement;
tempENTRY.outDir = commonBatchINFO.outDir;
tempENTRY.nameConvType = commonBatchINFO.nameConvType
tempENTRY.doSpreadsON = commonBatchINFO.doSpreadsON;
tempENTRY.doOneFile = commonBatchINFO.doOneFile;
tempENTRY.formatType = commonBatchINFO.formatType;
tempENTRY.psINFO = commonBatchINFO.psINFO;
tempENTRY.pdfPRESET = commonBatchINFO.pdfPRESET
tempENTRY.epsINFO = commonBatchINFO.epsINFO
tempENTRY.jpegINFO = commonBatchINFO.jpegINFO;
// Get any layering info
if(peuINFO.layersON){
tempENTRY.layerINFO = layerManager(tempENTRY.theDoc);
if (tempENTRY.layerINFO == null) // Only one layer, turn it off for this doc
tempENTRY.layersON = false;
else
tempENTRY.layersON = true;
// Sum up pages for the grand total for use in progress bar
var temp = 1;
if(peuINFO.doProgressBar && tempENTRY.layersON){
// Figure tally for progress bar to include versions
for(i=0;i < tempENTRY.layerINFO.verControls.length; i++)
if (tempENTRY.layerINFO.verControls[i] == 1)
temp++;
if(!peuINFO.baseLaersAsVersion)
temp--;
progTotalPages += (tempPageCount*temp);
// All info for this doc is finally gathered, add it to the main printINFO array
printINFO.push(tempENTRY);
// Only one chance to change prefs: trigger singleton
pseudoSingleton++;
}// end of main for loop
savePrefs(); // Record any changes
// Initiallize progress bar if available
if(peuINFO.doProgressBar)
app.createProgressBar("Exporting Pages...", 0, progTotalPages, true);
// Export by looping through all open documents if using batch option, otherwise just the front document is exported
for(currentDoc = 0; currentDoc < printINFO.length; currentDoc++){
var currentINFO = printINFO[currentDoc];
// Set message in progress bar if available
if(peuINFO.doProgressBar){
var progCancel = app.setProgress(currentINFO.theDoc.name);
if(progCancel)
byeBye("User canceled export.",peuINFO.sayCancel);
// Set format options here so it's done just once per document
setExportOption(currentINFO);
// "Do one file" or PS/PDF with one page:
if (currentINFO.doOneFile || currentINFO.singlePage){
// Remove page token if it was entered and this name positioning option is set
currentINFO.baseName = currentINFO.baseName.replace(/<#>/g,"");
if(currentINFO.layersON){
var theLayers = currentINFO.theDoc.layers;
var baseControls = currentINFO.layerINFO.baseControls;
var versionControls = currentINFO.layerINFO.verControls;
var lastVersion = -1;
// Loop for versioning
for(v = 0; v < versionControls.length; v++){
if(!versionControls[v])
continue;
if(lastVersion != -1)// Turn the last layer back off
theLayers[lastVersion].visible = false;
lastVersion = v;
theLayers[v].visible = true;
currentINFO.outfileName = addPartToName(currentINFO.baseName, theLayers[v].name, peuINFO.layerBeforeON)
// Export this version
exportPage(currentINFO, PageRange.allPages);
// Advance progress bar if available
if(peuINFO.doProgressBar)
advanceBar();
// If Base layer/s is/are to be output as a version, do it now
if(peuINFO.baseLaersAsVersion){
lastVersion = -1;
// Turn off all versioning layers
for(v = 0; v < currentINFO.layerINFO.baseControls.length; v++){
if(currentINFO.layerINFO.baseControls[v])// its a base layer, keep track of last base version layer number
lastVersion = v;
else
theLayers[v].visible = false;
if (!lastVersion == -1){// Only export if there was a base version
currentINFO.outfileName = addPartToName(currentINFO.baseName, theLayers[lastVersion].name, peuINFO.layerBeforeON);
// Export the base layer(s)
exportPage(currentINFO, PageRange.allPages);
// Advance progress bar if available
if(peuINFO.doProgressBar)
advanceBar();
else{ // No layer versioning, just export
currentINFO.outfileName = currentINFO.baseName;
// Export the base layer(s)
exportPage(currentINFO, PageRange.allPages);
// Advance progress bar if available
if(peuINFO.doProgressBar)
advanceBar();
if(!peuINFO.batchON)
byeBye("Done exporting as a single file.",true);
else{ // Do single pages/spreads
if (!currentINFO.hasNonContig)
// Pages are contiguous, can just export
outputPages(currentINFO.pgStart, currentINFO.pgEnd, currentINFO);
else{ // Export non-contiguous
// Loop through array of page sections
for (ii = 0; ii < currentINFO.nonContigPgs.length; ii++){
temp = currentINFO.nonContigPgs[ii];
// Here we handle the start/end pages for any non-contig that has "-"
if (temp.indexOf("-") != -1){
temp2 = temp.split("-");
outputPages(temp2[0],temp2[1], currentINFO);
else // The non-contiguous page is a single page
outputPages(temp, temp, currentINFO);
// Set the spread settings back to what it was originally
try{
switch (currentINFO.formatType){
case 0: // PostScript Formatting
theDoc.printPreferences.printSpreads = peuINFO.origSpread;
break;
case 1: // PDF Formatting
currentINFO.pdfPRESET.exportReaderSpreads = peuINFO.origSpread;
break;
case 2: // EPS Formatting
app.epsExportPreferences.epsSpreads = peuINFO.origSpread;
break;
case 3: // JPEG Formatting
app.jpegExportPreferences.exportingSpread = peuINFO.origSpread;
break;
catch(e){/*Just ignore it*/}
byeBye("The requested pages are done being exported.",true); // Last line of script execution
/* Operational Functions */
* Handle exporting
function outputPages(pgStart, pgEnd, currentINFO){
var pgRange;
var layerName = "";
var numVersions;
var currentPage;
var lastVersion = -1;
var numericallyLastPage;
if (currentINFO.layersON){
var theLayers = currentINFO.theDoc.layers;
var baseControls = currentINFO.layerINFO.baseControls;
var versionControls = currentINFO.layerINFO.verControls;
numVersions = versionControls.length;
// Compensate for base layers as a version
if(peuINFO.baseLaersAsVersion)
numVersions++;
else
numVersions = 1;
for (v = 0; v < numVersions; v++){
if(currentINFO.layersON){
if(v == (numVersions - 1) && peuINFO.baseLaersAsVersion){
var currentLayer = -1;
// Base layer(s) are to be output as a version
// Turn off all versioning layers
for(slbm = 0; slbm < baseControls.length; slbm++){
if(baseControls[slbm])// its a base layer, use its name for page name
currentLayer = slbm;
else
theLayers[slbm].visible = false;
// Check if there was no base layer at all
if (currentLayer == -1)
layerName = "**NO_BASE**"
else
layerName = theLayers[currentLayer].name;
else{
if(!versionControls[v])
continue;
if(lastVersion != -1)// Turn the last layer back off
theLayers[lastVersion].visible = false;
lastVersion = v;
theLayers[v].visible = true;
layerName = theLayers[v].name;
if (currentINFO.nameConvType == 4){
currentPage = pgStart;
numericallyLastPage = pgEnd;
else if (currentINFO.doSpreadsON){
currentPage = pgStart - 1;
numericallyLastPage = pgEnd;
else {
currentPage = getPageOffset(pgStart, currentINFO.pageNameArray , currentINFO.pageRangeArray);
numericallyLastPage = getPageOffset(pgEnd, currentINFO.pageNameArray, currentINFO.pageRangeArray);
if(layerName != "**NO_BASE**"){
do{
currentINFO.outfileName = getPageName(currentPage, layerName, currentINFO);
if (currentINFO.doSpreadsON){
pgRange = currentINFO.pageRangeArray[getPageOffset(currentINFO.theDoc.spreads[currentPage].pages[0].name, currentINFO.pageNameArray, currentINFO.pageRangeArray)];
else if (currentINFO.nameConvType == 4)
pgRange = currentINFO.pageRangeArray[currentPage-1];
else
pgRange = currentINFO.pageRangeArray[currentPage];
// Do the actual export:
exportPage(currentINFO, pgRange);
// Update progress bar if available
if(peuINFO.doProgressBar)
advanceBar();
currentPage++;
} while(currentPage <= numericallyLastPage);
* Export the page
function exportPage(currentINFO, pgRange){
var outFile = currentINFO.outDir + currentINFO.outfileName;
switch (currentINFO.formatType){
case 0: // PostScript Formatting
with(currentINFO.theDoc.printPreferences){
printFile = new File(outFile + ((currentINFO.psINFO.ext)?".ps":""));
pageRange = pgRange;
// Needed to get around blank pages using separations
try{
currentINFO.theDoc.print(false);
catch(e){/*Just skip it*/}
break;
case 1: // PDF Formatting
app.pdfExportPreferences.pageRange = pgRange;
currentINFO.theDoc.exportFile(ExportFormat.pdfType, (new File(outFile + ".pdf")), false, currentINFO.pdfPRESET);
break;
case 2: // EPS Formatting
app.epsExportPreferences.pageRange = pgRange;
currentINFO.theDoc.exportFile(ExportFormat.epsType, (new File(outFile + ".eps")), false);
break;
case 3: // JPEG Formatting
if(pgRange == PageRange.allPages){
app.jpegExportPreferences.jpegExportRange = ExportRangeOrAllPages.exportAll;
else{
app.jpegExportPreferences.jpegExportRange = ExportRangeOrAllPages.exportRange;
app.jpegExportPreferences.pageString = pgRange;
currentINFO.theDoc.exportFile(ExportFormat.jpg, (new File(outFile + ".jpg")), false);
break;
* Create a name for the page being exported
function getPageName(currentPage, layerName, currentINFO){
var pgRename = "";
if (currentINFO.doSpreadsON)
currentINFO["currentSpread"] = currentINFO.theDoc.spreads[currentPage].pages;
switch (currentINFO.nameConvType){
case 3: // Odd/Even pages/spreads = .LA.F/LA.B, LB.F/LB.B ...
pgRename = makeLotName(currentPage+1, peuINFO.subType);
break;
case 2: // Odd/Even pages/spreads = .F/.B
pgRename = ((currentPage+1)%2 == 0) ? "B" : "F";
break;
case 1: // Add ".L" to the page name
pgRename = "L" + currentINFO.pageNameArray[currentPage];
break;
case 0: case 4:// As is or Numeric Override
// Optionally add "P" and any zeros if options chosen and is numerically named
// otherwise, just the "seperatorChar" is added to page name
if (currentINFO.doSpreadsON){
// Loops through number of pages per spread
// and adds each page name to the final name (P08.P01)
for (j = 0; j < currentINFO.currentSpread.length; j++){
if(currentINFO.currentSpread[j].appliedSection.includeSectionPrefix)
var tempPage = currentINFO.pageRangeArray[getPageOffset(currentINFO.currentSpread[j].name, currentINFO.pageNameArray, currentINFO.pageRangeArray)];
else
var tempPage = currentINFO.pageNameArray[getPageOffset(currentINFO.currentSpread[j].name, currentINFO.pageNameArray, currentINFO.pageRangeArray)];
var tempPageNum = parseInt(tempPage,10);
/* If section name starts with a number, need to compare length of orig vs parsed
* to see if the page name is solely a number or a combo num + letter, etc.
if (! isNaN(tempPageNum) && ((""+tempPage).length == (""+tempPageNum).length )){
if (peuINFO.addZeroON)
tempPage = addLeadingZero(tempPageNum, currentINFO.theDoc.pages.length);
if (peuINFO.addPon)
tempPage = "P" + tempPage;
pgRename = (j==0) ? tempPage : pgRename + peuINFO.charList[peuINFO.seperatorChar] + tempPage;
else {
// Create a new name for an individual page
if (currentINFO.nameConvType == 4)
pgRename = currentPage;
else
pgRename = currentINFO.pageNameArray[currentPage];
if (! isNaN(parseInt(pgRename,10)) && (""+pgRename).length == (""+parseInt(pgRename,10)).length) {
if (peuINFO.addZeroON)
pgRename = addLeadingZero(pgRename, currentINFO.theDoc.pages.length);
if (peuINFO.addPon)
pgRename = "P" + pgRename;
break;
if(currentINFO.layersON)
pgRename = addPartToName(pgRename, layerName, peuINFO.layerBeforeON);
// Add page name to base name based on option selected
if(peuINFO.pageNamePlacement == 2)
pgRename = removeColons(currentINFO.baseName.replace(/<#>/g,pgRename) );
else
pgRename = addPartToName(currentINFO.baseName, pgRename,peuINFO.pageNamePlacement);
return pgRename;
* Add a name part before or after a given base string
function addPartToName(theBase, addThis, addBefore){
//Remove any colons
theBase = removeColons(theBase);
addThis = removeColons(addThis);
return (addBefore) ? (addThis + peuINFO.charList[peuINFO.seperatorChar] + theBase ):(theBase + peuINFO.charList[peuINFO.seperatorChar] + addThis);
* Find the offset page number for a page by its name
function getPageOffset(pgToFind, pageNameArray, pageRangeArray){
var offset;
for(offset = 0; offset<pageRangeArray.length;offset++){
if((""+ pgToFind).toLowerCase() == (("" + pageNameArray[offset]).toLowerCase() ) || (""+ pgToFind).toLowerCase() == (("" + pageRangeArray[offset]).toLowerCase() ) )
return offset;
return -1;
* Replace any colons with specialReplaceChar
function removeColons(tempName){
return tempName.replace(/:/g,peuINFO.charList[peuINFO.specialReplaceChar]);
* Remove spaces from front and end of name
function removeSpaces(theName){
// Trim any leading or trailing spaces in base name
var i,j;
for(i = theName.length-1;i>0 && theName.charAt(i) == " ";i--);// Ignore any spaces on end of name
for(j = 0; j<theName.length && theName.charAt(j) == " ";j++);// Ignore any spaces at front of name
theName = theName.substring(j,i+1);
return theName
* Add leading zero(s)
function addLeadingZero(tempPageNum, pageCount){
if(peuINFO.zeroPadding == 0){
// Normal padding
if((tempPageNum < 10 && pageCount < 100) || (tempPageNum > 9 && pageCount > 99 && tempPageNum < 100))
return addSingleZero(tempPageNum);
else if(tempPageNum < 10 && pageCount > 99)
return addDoubleZero(tempPageNum);
else
return ("" + tempPageNum);
}else if(peuINFO.zeroPadding == 1){
// Pad to 2 digits
if(tempPageNum < 10)
return addSingleZero(tempPageNum);
else
return ("" + tempPageNum);
}else{
// Pad to 3 digits
if(tempPageNum < 10)
return addDoubleZero(tempPageNum);
else if(tempPageNum < 100)
return addSingleZero(tempPageNum);
else
return ("" + tempPageNum);
* Add leading zero helper for single
function addSingleZero(pgNum){
return ("0" + pgNum);
* Add leading zero helper for double
function addDoubleZero(pgNum){
return ("00" + pgNum);
* Create lot name from page number
function makeLotName(thePage, subType){
var iii = thePage;
var curr = 0;
var alphaBet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var lotName = "L";
if(subType == 0){
while(iii>52){
curr = Math.floor((iii-1)/52)-1;
lotName += alphaBet[curr];
if(curr >= 0)
iii -= 52*(1+curr);
else
iii -= 52;
lotName += alphaBet[Math.floor((iii-1)/2)%26];
else
for(iii=thePage; iii>0; iii-=52)
lotName += alphaBet[Math.floor((iii-1)/2)%26];
return lotName += (thePage & 0x1)?".F":".B";
* Advance progress bar one unit
function advanceBar(){
var progCancel = app.setProgress(++progCurrentPage);
if(progCancel)
byeBye("User canceled export.",peuINFO.sayCancel);
* Create an Empty tempENTRY "struct"
function getNewTempENTRY(){
var newTempENTRY = new Array();
newTempENTRY["theDoc"] = null;
newTempENTRY["singlePage"] = null;
newTempENTRY["getOut"] = null;
newTempENTRY["outDir"] = null;
newTempENTRY["outfileName"] = "";
newTempENTRY["nameConvType"] = null;
newTempENTRY["baseName"] = null;
newTempENTRY["doSpreadsON"] = null;
newTempENTRY["doOneFile"] = null;
newTempENTRY["formatType"] = null;
newTempENTRY["layersON"] = null;
newTempENTRY["hasNonContig"] = false;
newTempENTRY["nonContigPgs"] = null;
newTempENTRY["pageNameArray"] = new Array();
newTempENTRY["pageRangeArray"] = new Array();
newTempENTRY["psINFO"] = null;
newTempENTRY["pdfPRESET"] = null;
newTempENTRY["epsINFO"] = null;
newTempENTRY["jpegINFO"] = null;
newTempENTRY["layerINFO"] = null;
newTempENTRY["useTag"] = null;
newTempENTRY["pgStart"] = null;
newTempENTRY["pgEnd"] = null;
return newTempENTRY;
* Record all the page/spread names
function recordPgNames(tempENTRY){
// Get names of all the pages. Needed when pages are named using sectioning
for (i = 0; i < tempENTRY.theDoc.documentPreferences.pagesPerDocument; i++){
var aPage = tempENTRY.theDoc.pages.item(i);
tempENTRY.pageNameArray[i] = aPage.name;
tempENTRY.pageRangeArray[i] = (aPage.appliedSection.includeSectionPrefix)? aPage.name : (aPage.appliedSection.name + aPage.name);
return tempENTRY;
* Set the export options
function setExportOption(currentINFO){
// Set any options here instead of with each page
switch (currentINFO.formatType){
case 0: // PostScript Formatting
setPSoptions(currentINFO);
break;
case 1: // PDF Formatting
// Nothing to do
break;
case 2: // EPS Formatting
setEPSoptions(currentINFO.epsINFO);
break;
case 3: // JPEG Formatting
setJPEGoptions(currentINFO.jpegINFO);
break;
* Get PostScript format options
function getPSoptions(docName){
var psOptions = new Array();
psOptions["ignore"] = true;
var tempGetOut, PSdlog, pgHeight, pgWidth;
var changeAddPSextention, tempBaseName;
var printPreset;
do{
tempGetOut = true;
PSdlog = app.dialogs.add({name:"PostScript Options for \"" + docName + "\"", canCancel:true} );
with (PSdlog)
with (dialogColumns.add() ){
with (dialogRows.add() )
staticTexts.add({staticLabel:"Print Presets:"} );
printPreset = dropdowns.add({stringList:peuINFO.psPrinterNames , minWidth:236, selectedIndex:peuINFO.defaultPrintPreset} );
with (dialogRows.add() )
staticTexts.add({staticLabel:"Override PS Page Size (" + peuINFO.measureLableArray[peuINFO.measurementUnits] + ")"} );
with (borderPanels.add() )
with (dialogColumns.add() )
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Width:", minWidth:45} );
pgWidth = textEditboxes.add({editContents:"0", minWidth:53} );
staticTexts.add({staticLabel:"Height:", minWidth:45} );
pgHeight = textEditboxes.add({editContents:"0", minWidth:54} );
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Add \".ps\" to end of file name"} );
changeAddPSextention = dropdowns.add({stringList:["No","Yes"], selectedIndex:peuINFO.addPSextention} )
if((PSdlog.show()) ){
// Get the page height + width
pgHeight = parseFloat(pgHeight.editContents);
pgWidth = parseFloat(pgWidth.editContents);
// Check entered H & W for error
if(isNaN(pgHeight) || isNaN(pgWidth) || pgHeight < 0 || pgWidth < 0 ){
alert ("Both page height and width must be numeric and greater than zero (3.1).");
pgHeight = "0";
pgWidth = "0";
tempGetOut = false;
continue;
if(pgHeight > 0 && pgWidth > 0) // User changed size, use the new size
psOptions.ignore = false;
psOptions["height"] = pgHeight + peuINFO.measureUnitArray[peuINFO.measurementUnits];
psOptions["width"] = pgWidth + peuINFO.measureUnitArray[peuINFO.measurementUnits];
psOptions["ext"] = changeAddPSextention.selectedIndex;
peuINFO.addPSextention = psOptions["ext"];
psOptions["preset"] = printPreset.selectedIndex
peuINFO.defaultPrintPreset = psOptions.preset;
savePrefs();
PSdlog.destroy();
else{
PSdlog.destroy();
byeBye("Exporting has been canceled by user.",peuINFO.sayCancel);
} while(!tempGetOut);
return psOptions;
* Set Postscript options
function setPSoptions(theINFO){
with(currentINFO.theDoc.printPreferences){
activePrinterPreset = peuINFO.csPSprinters[theINFO.psINFO.preset];
peuINFO.origSpread = printSpreads; // Used to reset to original state when done
printSpreads = theINFO.doSpreadsON;
if(colorOutput != ColorOutputModes.separations && colorOutput != ColorOutputModes.inripSeparations)
printBlankPages = true;
if (theINFO.useTag)
pageInformationMarks = true;
else
pageInformationMarks = false;
if(!theINFO.psINFO.ignore){
try{
paperSize = PaperSizes.custom;
paperHeight = theINFO.psINFO.height;
paperWidth = theINFO.psINFO.width;
catch(Exception){
alert ("The current PPD doesn't support custom page sizes. The page size from the Print Preset will be used (3.2).");
* Get PDF options
function getPDFoptions(theINFO){
var PDFdlog = app.dialogs.add({name:"PDF Options for \"" + theINFO.theDoc.name.split(".ind")[0] + "\"", canCancel:true} );
var temp = new Array();
for(i=0;i<app.pdfExportPresets.length;i++)
temp.push(app.pdfExportPresets[i].name);
// Test if default PDFpreset is greater # than actual list.
// This occurs if one was deleted and the last preset in the list was the default
if(peuINFO.defaultPDFpreset > temp.length-1)
peuINFO.defaultPDFpreset = 0;
with (PDFdlog)
with (dialogColumns.add() ){
with (dialogRows.add() )
staticTexts.add({staticLabel:"PDF Export Preset:"} );
pdfPresets = dropdowns.add({stringList: temp, minWidth:50, selectedIndex:peuINFO.defaultPDFpreset} );
if(PDFdlog.show() ){
temp = app.pdfExportPresets[pdfPresets.selectedIndex];
peuINFO.defaultPDFpreset = pdfPresets.selectedIndex;
peuINFO.origSpread = temp.exportReaderSpreads;
try{
temp.exportReaderSpreads = theINFO.doSpreadsON;
temp.pageInformationMarks = (theINFO.useTag && temp.cropMarks)?true:false;
}catch(e){/*ignore it*/}
PDFdlog.destroy();
return temp;
else{
PDFdlog.destroy();
byeBye("PDF exporting has been canceled by user.", peuINFO.sayCancel);
* Get JPEG options
function getJPEGoptions(docName){
var temp = new Array();
var JPEGdlog = app.dialogs.add({name:"JPEG Options for \"" + docName + "\"", canCancel:true} );
with (JPEGdlog)
with (dialogColumns.add() ){
with (dialogRows.add() )
staticTexts.add({staticLabel:"Quality:"} );
JPEGquality = dropdowns.add({stringList:(new Array("Low","Medium","High","Maximum")) , minWidth:50, selectedIndex:peuINFO.defaultJPEGquality} );
with (dialogRows.add() )
staticTexts.add({staticLabel:"Encoding Type:"} );
JPEGrender = dropdowns.add({stringList:["Baseline","Progressive"] , minWidth:50, selectedIndex:peuINFO.defaultJPEGrender } );
if(JPEGdlog.show() ){
peuINFO.defaultJPEGquality = JPEGquality.selectedIndex;
temp["qualityType"] = peuINFO.defaultJPEGquality;
peuINFO.defaultJPEGrender = JPEGrender.selectedIndex;
temp["renderType"] = peuINFO.defaultJPEGrender;
else{
JPEGdlog.destroy();
byeBye("JPEG exporting has been canceled by user.",peuINFO.sayCancel);
JPEGdlog.destroy();
return temp;
* Set JPEG options
function setJPEGoptions(theINFO){
with(app.jpegExportPreferences){
peuINFO.origSpread = exportingSpread; // Used to reset to original state when done
exportingSpread = currentINFO.doSpreadsON;
exportingSelection = false; // Export the entire page
if(peuINFO.csVersion > 3)
jpegExportRange = ExportRangeOrAllPages.exportRange;
switch (theINFO.qualityType){
case 0:
jpegQuality = JPEGOptionsQuality.low;
break;
case 1:
jpegQuality = JPEGOptionsQuality.medium;
break;
case 2:
jpegQuality = JPEGOptionsQuality.high;
break;
case 3:
jpegQuality = JPEGOptionsQuality.maximum;
break;
jpegRenderingStyle = (theINFO.renderType)? JPEGOptionsFormat.baselineEncoding : JPEGOptionsFormat.progressiveEncoding;
* Get EPS options
function getEPSoptions(docName){
var epsOptions = new Array();
var epsDialog = app.dialogs.add({name:"EPS Options for \"" + docName + "\"", canCancel:true} );
var oldBleed = peuINFO.bleed;
with (epsDialog){
// Left Column
with (dialogColumns.add() ){
with (dialogRows.add() )
with (borderPanels.add() )
with (dialogColumns.add() ){
with (dialogRows.add() )
staticTexts.add({staticLabel:"Flattener Presets:"} );
changeFlattenerPreset = dropdowns.add({stringList:peuINFO.flattenerNames , minWidth:180, selectedIndex:peuINFO.defaultFlattenerPreset} );
with (dialogRows.add() )
changeIgnoreOverride = checkboxControls.add({staticLabel:"Ignore Overrides", checkedState:peuINFO.ignoreON} );
with (dialogRows.add() )
staticTexts.add({staticLabel:"Preview Type:"} );
changePreviewPreset = dropdowns.add({stringList:peuINFO.previewTypes , minWidth:180, selectedIndex:peuINFO.defaultPreview} );
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Bleed:"} );
changeBleedVal = realEditboxes.add({editValue:peuINFO.bleed, minWidth:60} );
staticTexts.add({staticLabel:peuINFO.measureLableArray[peuINFO.measurementUnits]} );
with (dialogRows.add() )
staticTexts.add({staticLabel:"OPI Options:"} );
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Omit:"} );
changeOpiEPS = checkboxControls.add({staticLabel:"EPS", checkedState:peuINFO.epsON} );
changeOpiPDF = checkboxControls.add({staticLabel:"PDF", checkedState:peuINFO.pdfON} );
changeOpiBitmap = checkboxControls.add({staticLabel:"Bitmapped", checkedState:peuINFO.bitmapON} );
// Right column
with (dialogColumns.add() ){
with(borderPanels.add() ){
with(dialogColumns.add() ){
with (dialogRows.add() ){
staticTexts.add({staticLabel:"PostScript level:"} );
var changePSlevel = dropdowns.add({stringList:["2","3"] , minWidth:75, selectedIndex:peuINFO.psLevel} );
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Color mode:"} );
if(peuINFO.csVersion == 3)
var changeColorMode = dropdowns.add({stringList:["Unchanged","Grayscale", "RGB", "CMYK"] , minWidth:100, selectedIndex:peuINFO.colorType } );
else
var changeColorMode = dropdowns.add({stringList:["Unchanged","Grayscale", "RGB", "CMYK","PostScript Color Management"] , minWidth:100, selectedIndex:peuINFO.colorType } );
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Font embedding:"} );
var changeFontEmbedding = dropdowns.add({stringList:["None","Complete", "Subset"] , minWidth:100, selectedIndex:peuINFO.fontEmbed } );
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Type of data to send:"} );
var changeDataToSend = dropdowns.add({stringList:["All","Proxy"] , minWidth:50, selectedIndex:peuINFO.dataSent } );
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Data type:"} );
var changeDataType = dropdowns.add({stringList:["Binary","ASCII"] , minWidth:50, selectedIndex:peuINFO.dataType } );
with (dialogRows.add() ){
staticTexts.add({staticLabel:"Perform OPI replacement:"} );
var changeOPIreplace = dropdowns.add({stringList:["No","Yes"] , minWidth:50, selectedIndex:peuINFO.opiReplacement} );
do{
var getOut = true;
if((epsDialog.show()) ){
// Use these to update the prefs file
peuINFO.defaultFlattenerPreset = changeFlattenerPreset.selectedIndex;
peuINFO.ignoreON = (changeIgnoreOverride.checkedState)?1:0;
peuINFO.defaultPreview = changePreviewPreset.selectedIndex;
peuINFO.bleed = changeBleedVal.editContents;
peuINFO.epsON = (changeOpiEPS.checkedState)?1:0;
peuINFO.pdfON = (changeOpiPDF.checkedState)?1:0;
peuINFO.bitmapON = (changeOpiBitmap.checkedState)?1:0;
peuINFO.psLevel = changePSlevel.selectedIndex;
peuINFO.colorType = changeColorMode.selectedIndex;
peuINFO.fontEmbed = changeFontEmbedding.selectedIndex;
peuINFO.dataSent = changeDataToSend.selectedIndex;
peuINFO.dataType = changeDataType.selectedIndex;
peuINFO.opiReplacement = changeOPIreplace.selectedIndex;
// Check if bleed value is OK
peuINFO.bleed = parseFloat(peuINFO.bleed)
if (isNaN(peuINFO.bleed)){
alert("Bleed value must be a number (1.1).");
getOut = false;
peuINFO.bleed = oldBleed;
else if (peuINFO.bleed < 0){
alert("Bleed value must be greater or equal to zero (1.2).");
getOut = false;
peuINFO.bleed = oldBleed;
else {
// Check if bleed is too big
try {
app.epsExportPreferences.bleedBottom = "" + peuINFO.bleed + peuINFO.measureUnitArray[peuINFO.measurementUnits];
catch (Exception){
alert("The bleed value must be less than one of the following: 6 in | 152.4 mm | 432 pt | 33c9.384");
getOut = false;
peuINFO.bleed = oldBleed;
else{
epsDialog.destroy();
byeBye("EPS Export canceled by user.", peuINFO.sayCancel);
}while(!getOut);
// These are used for exporting
epsOptions["defaultFlattenerPreset"] = changeFlattenerPreset.selectedIndex;
epsOptions["ignoreON"] = peuINFO.ignoreON;
epsOptions["defaultPreview"] = changePreviewPreset.selectedIndex;
epsOptions["bleed"] = peuINFO.bleed;
epsOptions["epsON"] = peuINFO.epsON;
epsOptions["pdfON"] = peuINFO.pdfON;
epsOptions["bitmapON"] = peuINFO.bitmapON;
epsOptions["psLevel"] = changePSlevel.selectedIndex;
epsOptions["colorType"] = changeColorMode.selectedIndex;
epsOptions["fontEmbed"] = changeFontEmbedding.selectedIndex;
epsOptions["dataSent"] = changeDataToSend.selectedIndex;
epsOptions["dataType"] = changeDataType.selectedIndex;
epsOptions["opiReplacement"] = changeOPIreplace.selectedIndex;
epsDialog.destroy();
return epsOptions;
* Apply chosen settings to the EPS export prefs
function setEPSoptions(theINFO){
with(app.epsExportPreferences){
appliedFlattererPreset = peuINFO.flattenerNames[theINFO.defaultFlattenerPreset];
bleedBottom = "" + theINFO.bleed + peuINFO.measureUnitArray[peuINFO.measurementUnits];
bleedInside = bleedBottom;
bleedOutside = bleedBottom;
bleedTop = bleedBottom;
epsSpreads = currentINFO.doSpreadsON;
ignoreSpreadOverrides = theINFO.ignoreON;
switch (theINFO.dataType){
case 0:
dataFormat = DataFormat.binary;
break;
case 1:
dataFormat = DataFormat.ascii;
break;
switch (theINFO.colorType){
case 0:
epsColor = EPSColorSpace.unchangedColorSpace;
break;
case 1:
epsColor = EPSColorSpace.gray;
break;
case 2:
epsColor = EPSColorSpace.rgb;
break;
case 3:
epsColor = EPSColorSpace.cmyk;
break;
case 4:
epsColor = EPSColorSpace.postscriptColorManagement;
break;
switch (theINFO.fontEmbed){
case 0:
fontEmbedding = FontEmbedding.none;
break;
case 1:
fontEmbedding = FontEmbedding.complete;
break;
case 2:
fontEmbedding = FontEmbedding.subset;
break;
switch (theINFO.dataSent){
case 0:
imageData = EPSImageData.allImageData;
break;
case 1:
imageData = EPSImageData.proxyImageData;
break;
switch (theINFO.defaultPreview){
case 0:
preview = PreviewTypes.none;
break;
case 1:
preview = PreviewTypes.tiffPreview;
break;
case 2:
preview = PreviewTypes.pictPreview;
break;
switch (theINFO.psLevel){
case 0:
postScriptLevel = PostScriptLevels.level2;
break;
case 1:
postScriptLevel = PostScriptLevels.level3;
break;
// Setting these three to false prevents a conflict error when trying to set the opiImageReplacement value
omitBitmaps = false;
omitEPS = false;
omitPDF = false;
if (theINFO.opiReplacement){
opiImageReplacement = true;
else {
opiImageReplacement = false;
omitBitmaps = theINFO.bitmapON;
omitEPS = theINFO.epsON;
omitPDF = theINFO.pdfON;
* Build the main dialog box
function createMainDialog (docName, thisNum, endNum){
var theDialog = app.dialogs.add({name:(VERSION_NAME + ": Enter the options for \"" + docName + "\"" + ((endNum==1)?"":" (" + thisNum + " of " + endNum + " documents)") )
, canCancel:true} );
with (theDialog){
// Left Column
with (dialogColumns.add() ){
with (dialogRows.add() )
staticTexts.add({staticLabel:"Page Naming Options"} );
with(borderPanels.add() ){
with(dialogColumns.add() ){
// Radio butons for renaming convention
namingConvention = radiobuttonGroups.add();
with(namingConvention){
radiobuttonControls.add({staticLabel:"As Is", checkedState:(peuINFO.nameConvType == 0)} );
radiobuttonControls.add({staticLabel:"Add \".L\"", checkedState:(peuINFO.nameConvType == 1)} );
radiobuttonControls.add({staticLabel:"Odd/Even = \".F/.B\"", checkedState:(peuINFO.nameConvType == 2)} );
radiobuttonControls.add({staticLabel:"Odd/Even = \"LA.F/LA.B\"" , checkedState:(peuINFO.nameConvType == 3)});
radiobuttonControls.add({staticLabel:"Numeric Override" , checkedState:(peuINFO.nameConvType == 4)});
with (dialogRows.add() )
staticTexts.add({staticLabel:""} );
with(dialogRows.add() ){
staticTexts.add({staticLabel:"Base Name"} );
newBaseName = textEditboxes.add({editContents:baseName, minWidth:100} );
// Middle Column
with (dialogColumns.add() ){
with (dialogRows.add() )
RichardM0701, are you the same person as scottbentley?
I fear your response doesn't make a lot of sense. The easiest way is to put your files into a book, which will not harm them. The easiest script is often no script at all.
I don't understand your comment about separate text boxes, files contain text boxes and definitionally multiple files means multiple separate text boxes.
I do not know what you are referring to with respect to the toc update, perhaps you could reference a particular command or script, or provide a screenshot.
It sounds like now you are interested in updating multiple tables of contents in a single fell swoop -- this would appear to have nothing to do with the original question. If that's the case, please start a new thread. -
How to print directly to Printer from Crystal Report Viewer ?
Hi All,
We are integrating our Java Web Application with Crystal report XI, currently using JRC and export to PDF for user to preview and print to local printer.
Now there is new requirement :
Some clients is using thin client terminal (no harddisk, only has OS +Browser in ROM), so I cannot install Acrobat Reader for them to preview&print the report.
So I am looking at Crystal Report Viewer, the question is : Can I print from Crystal Report Viewer directly to local printer without first converting it to PDF (because I can't have acrobat reader installed) ??
Thank you very much,
Krist
IndonesiaHi,
It can't be achieved through XI.
JRCXI R2 SDK offers the ability to print the report server side
using the PrintOutputController using printReport(PrintReportOptions printReportOptions) method.
Here is the code(for XIR2):
import="com.crystaldecisions.reports.sdk.*"
import="com.crystaldecisions.sdk.occa.report.lib.*"
import="com.crystaldecisions.sdk.occa.report.document.*"
try {
final String REPORT_NAME = "Inventory.rpt";
ReportClientDocument reportClientDoc = new ReportClientDocument();
reportClientDoc.open(REPORT_NAME, 0);
//Create and set print options.
PrintReportOptions printOptions = new PrintReportOptions();
//Note: Printer with the 'printer name' below must already be configured.
printOptions.setPrinterName("
10.10.45.220
BOBJ 2C");
printOptions.setJobTitle("Sample Print Job from JRC.");
printOptions.setPrinterDuplex(PrinterDuplex.horizontal);
printOptions.setPaperSource(PaperSource.auto);
printOptions.setPaperSize(PaperSize.paperLetter);
printOptions.setNumberOfCopies(1);
printOptions.setCollated(false);
PrintReportOptions.PageRange printPageRange = new PrintReportOptions.PageRange(1,1);
printOptions.addPrinterPageRange(printPageRange);
//NOTE: If parameters or database login credentials are required, they need to be set before.
//calling the printReport() method of the PrintOutputController.
reportClientDoc.getPrintOutputController().printReport(printOptions);
reportClientDoc.close();
out.println("Successfully sent report to the printer.");
catch(ReportSDKException ex) {
out.println(ex);
Please revert in case you have any query.
Thanks,
Neeraj -
Post Author: tsparg
CA Forum: JAVA
Hi allI downloaded this code from the business objects website, and then played around with it. Have got it to print, but could somebody tell me how i would export using similiar code?Am i on the right track, or do i need to do an about face? import com.businessobjects.crystalreports.printer.bean.ReportPrinter;import com.crystaldecisions.reports.sdk.ReportClientDocument;import com.crystaldecisions.sdk.occa.report.document.PaperSize;import com.crystaldecisions.sdk.occa.report.document.PaperSource;import com.crystaldecisions.sdk.occa.report.document.PrintReportOptions;import com.crystaldecisions.sdk.occa.report.lib.ReportSDKExceptionBase;import com.microsoft.sqlserver.jdbc.SQLServerConnection;import com.microsoft.sqlserver.jdbc.SQLServerResultSet;import java.sql.DriverManager;import java.sql.SQLException;import java.util.logging.Level;import java.util.logging.Logger;import javax.print.PrintService;import javax.print.PrintServiceLookup;/** * Applies to: XI Release 2. * Date Created: October 2005. * Description: This sample demonstrates how to print a report directly to a printer (server-side printing). * NOTE: If the report is based on a secured database the database login credentials * will need to be set before calling the export method below. Also, if the report * has parameters, then values will need to be set for the report before export method can * be called or an error will be thrown. See the ViewReportParameters or ViewReportLogon samples * for samples on how to set parameters and login credentials through the JRC SDK. * Author: CW. *///Crystal Java Reporting Component (JRC) imports.public class JRCPrintReport { static final String REPORT_NAME = "JRCPrintReport.rpt"; public static void main(String[] args) { if (args.length == 0) { PrintService[] printers = PrintServiceLookup.lookupPrintServices(null, null); System.out.println("Available printers : "); for (int i = 0; i < printers.length; i++) { System.out.println(printers[i].getName()); } System.out.println("end Available printers "); System.exit(0); } try { //Open report. ReportClientDocument reportClientDoc = new ReportClientDocument(); reportClientDoc.open(REPORT_NAME, 0); //Create and set print options. PrintReportOptions printOptions = new PrintReportOptions(); printOptions.setPrinterName(args[1]); printOptions.setJobTitle("Sample Print Job from JRC."); printOptions.setPaperSource(PaperSource.auto); printOptions.setPaperSize(PaperSize.paperLetter); printOptions.setNumberOfCopies(1); printOptions.setCollated(false); PrintReportOptions.PageRange printPageRange = new PrintReportOptions.PageRange(1, 1); printOptions.addPrinterPageRange(printPageRange); ReportPrinter repPrint; repPrint = new ReportPrinter(); repPrint.setReportSource(reportClientDoc.getReportSource()); repPrint.print(printOptions); reportClientDoc.close(); System.out.println("Successfully sent report to the printer."); } catch (ReportSDKExceptionBase ex) { Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); } }} regardsTimPost Author: tsparg
CA Forum: JAVA
should i be usingimport com.crystaldecisions.sdk.occa.report.application.ReportClientDocument instead of import com.crystaldecisions.reports.sdk.ReportClientDocument?? -
Script to open INDD files, run script, and close
Hello, I'm looking for a script that will open a folder of Indesign files, open each one, run a selected script, then close each file.
RIght now I'm using the Batch convert script, to convert INDD to INDD and run the script in between (then I delete the extra INDD file). But I'm trying to eliminate the conversion element, just need the script part of it.
Anyone have any help? Thanks.Here's my whole code if it helps. I'm wondering if the script is moving too fast. I think that the first files are still PDFing while the others are opening and closing. Could that be it? I'm not sure why else the for loop for the PDFing is only working on the first file.
var myFolder = Folder.selectDialog("Select Input Folder");
var myIndsnFiles = myFolder.getFiles("*.indd");
var exportPath=Folder("/").selectDlg("Select PDF output folder:");
var pdfPreset = "Press Quality";
for(k=0; k<myIndsnFiles.length; k++)
app.open(myIndsnFiles[k]);
var jobNumber = "12345";
for (aPage=0; aPage < app.activeDocument.pages.length; aPage++)
app.pdfExportPreferences.pageRange = app.activeDocument.pages[aPage].name;
app.activeDocument.exportFile (ExportFormat.PDF_TYPE, File(exportPath+"/"+jobNumber+"_"+pad(app.activeDocument.pages[aPage].name)+".pdf"), false, pdfPreset);
function pad (n) {
return ("00000"+n).slice(-3);
app.activeDocument.close();
Maybe you are looking for
-
Greetings, I am working in Final Cut Pro 7. In the timeline some clips show as offline. I tried going to sequence and reconnecting to media but it does not work. I can still see the video in the timeline and work with it. It just has the red box. Tha
-
Equium L20 - memory not shown correctly?
Hi I have just purchased an Equium L20.First time I have had a Laptop.In the specs it says 256mb memory.But when I checked the system it says that I have 192mb.Where is the the other 64mb ?.Or am I just dimmer than I thought. [Edited by: admin on 13-
-
Can't load flash based webcam since 10.6.5 update
since updating today, my webcam is no longer detected on any flash based webcam site (i.e. tinychat, meebo, etc). I have uninstalled and reinstalled latest version of the Adobe Flash plug-in, I have adjusted and checked all the proper settings in the
-
Does anyone know if the iPhone (upon Unlock) can access the Home page instead of last page/app visited? Thanks! Mac OS X (10.4.10)
-
Leopard won't install; says it will erase HD
A friend of mine just bought Leopard and I went over to help her install it (I've already got it on our computers and we had NO installation problems at all) and we went to install it and there was a yellow exclamation mark over her computer's HD ico