/* * Copyright (c) 2011 by RibbonSoft, GmbH. All rights reserved. * * This file is part of the QCAD project. * * Licensees holding valid QCAD Professional Edition licenses * may use this file in accordance with the QCAD License * Agreement provided with the Software. * * This file is provided AS IS with NO WARRANTY OF ANY KIND, * INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE. * * See http://www.ribbonsoft.com for further details. */ /** * Command line toool. * Exports a drawing file (DWG, DXF) into a PDF. */ include("/opt/qcad-3.0.0-rc2-prof-linux/scripts/File/Print/Print.js"); include("/opt/qcad-3.0.0-rc2-prof-linux/scripts/Layer/Layer.js"); function MyPrint(guiAction, document, view) { Print.call(this, guiAction, document, view); } MyPrint.prototype.print = function(pdfFile) { var printer = new QPrinter(QPrinter.HighResolution); printer.setOutputFormat(QPrinter.PdfFormat); printer.setOutputFileName(pdfFile); printer.setPaperSize(new QSizeF(297, 210)); printer.setFullPage(true); printer.setOrientation(QPrinter.Landscape); printer.setColorMode(QPrinter.Color); var bgColor = this.view.getBackgroundColor(); this.view.setBackgroundColor(new RColor("white")); this.view.setPrinting(true); var painter = new QPainter(); painter.begin(printer); /*var layers = this.document.queryAllLayers(); for (var l = 0; l < layers.length; ++l) { var layer = this.document.queryLayer(layers[l]); qDebug(layers[l]); //id qDebug(layer); //Layer with id, name, color, lineweight, linetype }*/ var page = 1; this.doPrint(printer, painter, page++, 0.01, new RVector(37900, 34000)); this.document.queryLayer(39).setFrozen(false); //THIS DOES NOT WORK :-( this.view.repaint(); this.doPrint(printer, painter, page++, 0.01, new RVector(37900, 34000)); painter.end(); printer.destroy(); this.view.setBackgroundColor(bgColor); this.view.setPrinting(false); qDebug("my printing OK"); }; MyPrint.prototype.doPrint = function(printer, painter, page, scale, offset) { qDebug("printing page: ", page); // if this is not the first page, add new page: if (page != 1) { printer.newPage(); } var c = Print.getBackgroundColor(this.document); var qclr = new QColor(c.red(),c.green(),c.blue()); if (!qclr.equals(new QColor(Qt.white))) { painter.setWorldTransform(new QTransform()); painter.setBackground(new QBrush(qclr, Qt.SolidPattern)); painter.eraseRect(printer.paperRect()); } // paper size in mm: var unitScale = Print.getUnitScale(this.document); var widthInMM = printer.paperRect(QPrinter.Millimeter).width(); var heightInMM = printer.paperRect(QPrinter.Millimeter).height(); var paperBorder = new QRectF(0, 0, 297, 210); var paperBorderTransformed = Print.getTransformed(this.document, paperBorder); var printerFactor = new RVector( printer.paperRect().width() / widthInMM, printer.paperRect().height() / heightInMM ); // set up transform var transform = new QTransform(); // move zero to bottom left corner, set up X/Y axis: transform.scale(1, -1); // scale to printer units: transform.scale(printerFactor.x, printerFactor.y); transform.translate(-paperBorder.x(), -paperBorder.y()-paperBorder.height()); // apply user defined offset and scale: transform.translate(-offset.x*scale*unitScale, -offset.y*scale*unitScale); transform.scale(scale, scale); // scale drawing unit to mm: transform.scale(unitScale, unitScale); painter.setWorldTransform(transform); this.view.paintEntities(painter, new RBox( new RVector(paperBorderTransformed.x(), paperBorderTransformed.y()), new RVector(paperBorderTransformed.x()+paperBorderTransformed.width(), paperBorderTransformed.y()+paperBorderTransformed.height()) )); qDebug("printing page done: ", page); }; function main() { qApp.organizationName = "RibbonSoft"; qApp.organizationDomain = "ribbonsoft.com"; qApp.applicationVersion = RSettings.getVersionString(); qApp.applicationName = "QCAD"; RSettings.setApplicationName("QCAD3"); RDwgImporter.registerFileImporter(); var dwgFile = "/home/smf/Desktop/Haus/Schwoerer/Architekt/dxfSelf/54_Redo53_V18.dxf"; var pdfFile = "/home/smf/Desktop/Haus/Schwoerer/Architekt/dxfSelf/test.pdf"; var storage = new RMemoryStorage(); var spatialIndex = new RSpatialIndexNavel(); var doc = new RDocument(storage, spatialIndex); var di = new RDocumentInterface(doc); var scene = new RGraphicsSceneQt(di); var view = new RGraphicsViewImage(); view.setScene(scene); if (di.importFile(dwgFile) != RDocumentInterface.IoErrorNoError) { qWarning("Cannot import file:", dwgFile); return; } di.regenerateScenes(); QCoreApplication.processEvents(); var p = new MyPrint(undefined, doc, view); p.print(pdfFile); } if (typeof(including)=='undefined' || including===false) { main(); }