Author: jghali Date: Tue Feb 13 22:45:38 2018 New Revision: 22388 URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22388 Log: #15145: Javascript fails to execute on PDF opening when PDF security is enabled
Modified: branches/Version14x/Scribus/scribus/pdflib_core.cpp branches/Version14x/Scribus/scribus/pdflib_core.h Modified: branches/Version14x/Scribus/scribus/pdflib_core.cpp URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=22388&path=/branches/Version14x/Scribus/scribus/pdflib_core.cpp ============================================================================== --- branches/Version14x/Scribus/scribus/pdflib_core.cpp (original) +++ branches/Version14x/Scribus/scribus/pdflib_core.cpp Tue Feb 13 22:45:38 2018 @@ -805,6 +805,7 @@ QFileInfo fd; QString fext; int a; + int openActionObj = 0; inPattern = 0; Bvie = vi; BookMinUse = false; @@ -863,7 +864,8 @@ PutDoc("/PageMode /UseOC\n"); if (!Options.openAction.isEmpty()) { - PutDoc("/OpenAction << /S /JavaScript /JS (this."+Options.openAction+"\\(\\)) >>\n"); + openActionObj = newObject(); + PutDoc("/OpenAction << /S /JavaScript /JS " + QString::number(openActionObj) + " 0 R >>\n"); } QDate d = QDate::currentDate(); @@ -985,6 +987,10 @@ PutDoc("/O <"+String2Hex(&ok)+">\n"); PutDoc("/U <"+String2Hex(&uk)+">\n"); PutDoc("/P "+QString::number(Options.Permissions)+"\n>>\nendobj\n"); + } + if (openActionObj) + { + WritePDFString("this." + Options.openAction + "()", openActionObj); } QMap<QString, QMap<uint, FPointArray> > ReallyUsed; ReallyUsed.clear(); @@ -6482,6 +6488,19 @@ return result; } +uint PDFLibCore::WritePDFStream(const QString& cc, uint objNum) +{ + QString tmp(cc); + if (Options.Compress) + tmp = CompressStr(&tmp); + StartObj(objNum); + PutDoc("<< /Length "+QString::number(tmp.length())); // moeglicherweise +1 + if (Options.Compress) + PutDoc("\n/Filter /FlateDecode"); + PutDoc(" >>\nstream\n"+EncStream(tmp, objNum)+"\nendstream\nendobj\n"); + return objNum; +} + uint PDFLibCore::WritePDFString(const QString& cc) { QString tmp; @@ -6497,6 +6516,23 @@ tmp += cc[i]; } return WritePDFStream(tmp); +} + +uint PDFLibCore::WritePDFString(const QString& cc, uint objNum) +{ + QString tmp; + for (int i = 0; i < cc.length(); ++i) + { + if (cc[i].unicode() > 255) + { + tmp += "\\u"; + tmp += toHex(cc[i].row()); + tmp += toHex(cc[i].cell()); + } + else + tmp += cc[i]; + } + return WritePDFStream(tmp, objNum); } void PDFLibCore::PDF_xForm(uint objNr, double w, double h, QString im) Modified: branches/Version14x/Scribus/scribus/pdflib_core.h URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=22388&path=/branches/Version14x/Scribus/scribus/pdflib_core.h ============================================================================== --- branches/Version14x/Scribus/scribus/pdflib_core.h (original) +++ branches/Version14x/Scribus/scribus/pdflib_core.h Tue Feb 13 22:45:38 2018 @@ -141,7 +141,9 @@ void StartObj(int nr); uint newObject() { return ObjCounter++; } uint WritePDFStream(const QString& cc); + uint WritePDFStream(const QString& cc, uint objNum); uint WritePDFString(const QString& cc); + uint WritePDFString(const QString& cc, uint objNum); void writeXObject(uint objNr, QString dictionary, QByteArray stream); uint writeObject(QString type, QString dictionary); uint writeGState(QString dictionary) { return writeObject("/ExtGState", dictionary); } _______________________________________________ scribus-commit mailing list scribus-commit@lists.scribus.net http://lists.scribus.net/mailman/listinfo/scribus-commit