Скрипт для ручного разбиения страницы

  • Автор темы Автор темы _MBK_
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 687
Реакции
10 999
Раз уж Санчес доделал свой макрос для автоматического сужения текста, выложу и я очередной скрипт, на этот раз, для акробата. ;)
Предположим, нужно разрезать страницу на две части по вертикали или горизонтали. Можно это сделать стандартным акробатовским Crop, но чертовски неудобно и не интерактивно. При запуске скрипта достаточно ткнуть в точку разреза и страница разобьется на две вертикальные или горизонтальные части. Скрипт работает начиная с 7 версии акробата (не ридера). В подменю Tools появляются два дополнительных пункта "Divide Page Horizontal" и "Divide Page Vertical".
Код:
// Divide Page script. 
// Copyright (c) MBK 2013 
// mikhail_kondakov@mail.ru http://mbkhome.narod.ru

var aRect;
var IsHoriz;

if (app.viewerVersion < 10) {
	app.addMenuItem({ cName: "DivPage", cUser: "Divide Page Horizontal", cParent: "Tools", cExec: 

"DivPage(true)", 
		cEnable: "event.rc = (event.target != null);"}); 
        app.addMenuItem({ cName: "DivPage", cUser: "Divide Page Vertical", cParent: "Tools", cExec: 

"DivPage(false)", 
		cEnable: "event.rc = (event.target != null);"}); 
} else {
	app.addToolButton({ cName: "DivPage", cLabel: "Divide Page Horizontal", cExec: 

"DivPage(true)",
		cEnable: "event.rc = (event.target != null);"});
	app.addToolButton({ cName: "DivPage", cLabel: "Divide Page Vertical", cExec: "DivPage(false)",
		cEnable: "event.rc = (event.target != null);"});
}

mouseClicFunc = app.trustedFunction(function(isHoriz)
 {

        X=  this.mouseX;
        Y=  this.mouseY;
        app.beginPriv();
        this.insertPages( {
            nPage: 0,
            cPath: this.path,
            nStart: 0
        });


        var halfWidth1 = X;
        var halfWidth2 = (aRect[2]-aRect[0])-X;
        var halfheight1 = Y;
        var halfheight2 = (aRect[1]-aRect[3])-Y;


        var cropLeft = new Array();
        var cropRight = new Array();
        if (!isHoriz)
        {
          cropLeft[0] = aRect[0];
          cropLeft[1] = aRect[1];
          cropLeft[2] = aRect[0] + halfWidth1;
          cropLeft[3] = aRect[3];

        
          cropRight[0] = aRect[2] - halfWidth2;
          cropRight[1] = aRect[1];
          cropRight[2] = aRect[2];
          cropRight[3] = aRect[3];
        } else
        {
          cropLeft[0] = aRect[0];
          cropLeft[1] = aRect[1];
          cropLeft[2] = aRect[2];
          cropLeft[3] = aRect[1]-halfheight2;

        
          cropRight[0] = aRect[0];
          cropRight[1] = aRect[3]+halfheight1;
          cropRight[2] = aRect[2];
          cropRight[3] = aRect[3];
        }

	
                this.setPageBoxes( {
	       cBox: "Trim",
	       nStart: 0,
	       rBox: cropLeft
	       });
        
	   this.setPageBoxes( {
	       cBox: "Trim",
	       nStart: 1,
	       rBox: cropRight
	       });

                 this.setPageBoxes( {
	       cBox: "Crop",
	       nStart: 0,
	       rBox: cropLeft
	       });
        
	   this.setPageBoxes( {
	       cBox: "Crop",
	       nStart: 1,
	       rBox: cropRight
	       }); 


        this.removeField("MyButton");
        app.endPriv();

        return;
}
);

function DivPage(isHoriz) {

        aRect = this.getPageBox("Crop");
        IsHoriz=isHoriz;
        f = this.addField("MyButton", "button", 0 , aRect);
        f.setAction("MouseUp","mouseClicFunc(IsHoriz);");
        return;
}
 
Ответ: Скрипт для ручного разбиения страницы

Во время плотной работы со скриптном наткнулся на очередные сюрпризы от хитросделанной фирмы адоба. Когда они в 7 версии облагодетельствовали всех возможностью считывать относительные мышиные координаты, то забыли указать, относительно чего эти координаты считать. Более того, какой CropBox за задавай для страницы, при попытке следом за этим, получить его координаты - они возвращаются уже нормализованными. То есть положение кропбокса относительно загадочной точки начала координат документа, тоже остается секретом. Пока не придумал ничего умнее, как зарезервировать TrimBox для получения относительного положения CropBox на странице. Еще раз огромный респект великой фирме адоб и ее профессиональным индопрограммистам. 'P:E'
Код:
// Divide Page script. 
// Copyright (c) MBK 2013 
// mikhail_kondakov@mail.ru http://mbkhome.narod.ru

var aRect;
var bRect;
var IsHoriz;
var cp;

if (app.viewerVersion < 10) {
	app.addMenuItem({ cName: "DivPage", cUser: "Divide Page Horizontal", cParent: "Tools", cExec: 

"DivPage(true)", 
		cEnable: "event.rc = (event.target != null);"}); 
        app.addMenuItem({ cName: "DivPage", cUser: "Divide Page Vertical", cParent: "Tools", cExec: 

"DivPage(false)", 
		cEnable: "event.rc = (event.target != null);"}); 
} else {
	app.addToolButton({ cName: "DivPage", cLabel: "Divide Page Horizontal", cExec: 

"DivPage(true)",
		cEnable: "event.rc = (event.target != null);"});
	app.addToolButton({ cName: "DivPage", cLabel: "Divide Page Vertical", cExec: "DivPage(false)",
		cEnable: "event.rc = (event.target != null);"});
}

mouseClicFunc = app.trustedFunction(function(isHoriz)
 {

        X=  this.mouseX-bRect[0];
        Y=  this.mouseY+bRect[3];


        app.beginPriv();
        this.insertPages( {
            nPage: cp,
            cPath: this.path,
            nStart: cp
        });


        var halfWidth1 = X-aRect[0];
        var halfWidth2 = (aRect[2]-aRect[0])-halfWidth1;
        var halfheight1 = Y-aRect[3];
        var halfheight2 = (aRect[1]-aRect[3])-halfheight1;

        var cropLeft = new Array();
        var cropRight = new Array();
        if (!isHoriz)
        {
          cropLeft[0] = aRect[0];
          cropLeft[1] = aRect[1];
          cropLeft[2] = aRect[0] + halfWidth1;
          cropLeft[3] = aRect[3];

        
          cropRight[0] = aRect[2] - halfWidth2;
          cropRight[1] = aRect[1];
          cropRight[2] = aRect[2];
          cropRight[3] = aRect[3];
        } else
        {
          cropLeft[0] = aRect[0];
          cropLeft[1] = aRect[1];
          cropLeft[2] = aRect[2];
          cropLeft[3] = aRect[1]-halfheight2;

        
          cropRight[0] = aRect[0];
          cropRight[1] = aRect[3]+halfheight1;
          cropRight[2] = aRect[2];
          cropRight[3] = aRect[3];
        }


	
  /*             this.setPageBoxes( {
	       cBox: "Trim",
	       nStart: cp,
	       rBox: cropLeft
	       });
        
	   this.setPageBoxes( {
	       cBox: "Trim",
	       nStart: cp+1,
	       rBox: cropRight
	       }); */

                 this.setPageBoxes( {
	       cBox: "Crop",
	       nStart: cp,
	       rBox: cropLeft
	       });
        
	   this.setPageBoxes( {
	       cBox: "Crop",
	       nStart: cp+1,
	       rBox: cropRight
	       }); 


        this.removeField("MyButton");
        app.endPriv();

        return;
}
);

function DivPage(isHoriz) {

        cp=this.pageNum;
        bRect = this.getPageBox("Trim",cp);
        aRect = this.getPageBox("Crop",cp);
        IsHoriz=isHoriz;
        f = this.addField("MyButton", "button", cp, aRect);

        f.setAction("MouseUp","mouseClicFunc(IsHoriz);");

       

        return;
}
 
  • Спасибо
Реакции: catpaw
Статус
Закрыто для дальнейших ответов.