Initial implementation of glabels-batch.

Note: must currently use QGuiApplication instead of QCoreApplication to
support QFont.  Unfortunately, this means that glabels-batch must run
within a windowing system.  Ideally, it would not have this requirement.
This commit is contained in:
Jim Evins
2017-10-02 23:15:43 -04:00
parent 347bf35c79
commit a31484700c
13 changed files with 449 additions and 111 deletions
+99
View File
@@ -44,6 +44,10 @@ configure_file (Config.h.in ${CMAKE_CURRENT_BINARY_DIR}/Config.h @ONLY)
#=======================================
# Sources
#=======================================
#
# glabels executable
#
set (glabels_sources
glabels_main.cpp
AboutDialog.cpp
@@ -213,6 +217,101 @@ target_link_libraries (glabels-qt
)
#
# glabels-batch executable
#
set (glabels-batch_sources
glabels-batch_main.cpp
BarcodeBackends.cpp
BarcodeStyle.cpp
Category.cpp
ColorNode.cpp
DataCache.cpp
Db.cpp
Distance.cpp
FileUtil.cpp
Frame.cpp
FrameCd.cpp
FrameEllipse.cpp
FrameRect.cpp
FrameRound.cpp
Handles.cpp
LabelModel.cpp
LabelModelObject.cpp
LabelModelBarcodeObject.cpp
LabelModelBoxObject.cpp
LabelModelEllipseObject.cpp
LabelModelImageObject.cpp
LabelModelLineObject.cpp
LabelModelShapeObject.cpp
LabelModelTextObject.cpp
Layout.cpp
Markup.cpp
Outline.cpp
PageRenderer.cpp
Paper.cpp
Point.cpp
RawText.cpp
Region.cpp
Settings.cpp
Size.cpp
StrUtil.cpp
Template.cpp
TextNode.cpp
Units.cpp
Vendor.cpp
XmlCategoryParser.cpp
XmlLabelCreator.cpp
XmlLabelParser.cpp
XmlPaperParser.cpp
XmlTemplateCreator.cpp
XmlTemplateParser.cpp
XmlUtil.cpp
XmlVendorParser.cpp
)
set (glabels-batch_qobject_headers
BarcodeBackends.h
LabelModel.h
LabelModelObject.h
LabelModelBarcodeObject.h
LabelModelBoxObject.h
LabelModelEllipseObject.h
LabelModelImageObject.h
LabelModelLineObject.h
LabelModelShapeObject.h
LabelModelTextObject.h
PageRenderer.h
Settings.h
)
qt5_wrap_cpp (glabels-batch_moc_sources ${glabels-batch_qobject_headers})
if (WIN32)
# Windows resource file
set (glabels-batch_win_rc glabels-batch.rc)
endif ()
add_executable (glabels-batch-qt WIN32
${glabels-batch_sources}
${glabels-batch_moc_sources}
${glabels-batch_win_rc}
)
target_link_libraries (glabels-batch-qt
Barcode
Merge
glbarcode
${Qt5PrintSupport_LIBRARIES}
${Qt5Xml_LIBRARIES}
${Qt5Svg_LIBRARIES}
${ZLIB_LIBRARIES}
${GNUBARCODE_LIBRARIES}
${LIBQRENCODE_LIBRARIES}
${LIBZINT_LIBRARIES}
)
#=======================================
# Where to find stuff
#=======================================
-1
View File
@@ -430,7 +430,6 @@ namespace glabels
{
if ( !isTemplateKnown( tmplate->brand(), tmplate->part() ) )
{
tmplate->initPreview();
mTemplates << tmplate;
}
else
+33 -2
View File
@@ -44,12 +44,15 @@ namespace glabels
}
PageRenderer::PageRenderer()
PageRenderer::PageRenderer( const LabelModel* model )
: mModel(nullptr), mNCopies(0), mStartLabel(0),
mPrintOutlines(false), mPrintCropMarks(false), mPrintReverse(false),
mIPage(0), mIsMerge(false), mNPages(0)
{
// empty
if ( model )
{
setModel( model );
}
}
@@ -182,6 +185,34 @@ namespace glabels
}
///
/// Print
///
void PageRenderer::print( QPrinter* printer ) const
{
QSizeF pageSize( mModel->tmplate()->pageWidth().pt(), mModel->tmplate()->pageHeight().pt() );
printer->setPageSize( QPageSize(pageSize, QPageSize::Point) );
printer->setFullPage( true );
printer->setPageMargins( 0, 0, 0, 0, QPrinter::Point );
QPainter painter( printer );
QRectF rectPx = printer->paperRect( QPrinter::DevicePixel );
QRectF rectPts = printer->paperRect( QPrinter::Point );
painter.scale( rectPx.width()/rectPts.width(), rectPx.height()/rectPts.height() );
for ( int iPage = 0; iPage < mNPages; iPage++ )
{
if ( iPage )
{
printer->newPage();
}
printPage( &painter, iPage );
}
}
///
/// Print page using persistent page number
///
+3 -1
View File
@@ -28,6 +28,7 @@
#include "Merge/Record.h"
#include <QPainter>
#include <QPrinter>
#include <QRect>
#include <QVector>
@@ -50,7 +51,7 @@ namespace glabels
// Life Cycle
/////////////////////////////////
public:
PageRenderer();
PageRenderer( const LabelModel* model = nullptr );
/////////////////////////////////
@@ -68,6 +69,7 @@ namespace glabels
int nItems() const;
int nPages() const;
QRectF pageRect() const;
void print( QPrinter* printer ) const;
void printPage( QPainter* painter ) const;
void printPage( QPainter* painter, int iPage ) const;
+2 -20
View File
@@ -41,6 +41,7 @@ namespace glabels
preview->setRenderer( &mRenderer );
mPrinter = new QPrinter( QPrinter::HighResolution );
mPrinter->setColorMode( QPrinter::Color );
}
@@ -121,11 +122,6 @@ namespace glabels
///
void PrintView::onPrintButtonClicked()
{
QSizeF pageSize( mModel->tmplate()->pageWidth().pt(), mModel->tmplate()->pageHeight().pt() );
mPrinter->setPageSize( QPageSize(pageSize, QPageSize::Point) );
mPrinter->setFullPage( true );
mPrinter->setPageMargins( 0, 0, 0, 0, QPrinter::Point );
QPrintDialog printDialog( mPrinter, this );
printDialog.setOption( QAbstractPrintDialog::PrintToFile, true );
@@ -137,21 +133,7 @@ namespace glabels
if ( printDialog.exec() == QDialog::Accepted )
{
QPainter painter( mPrinter );
QRectF rectPx = mPrinter->paperRect( QPrinter::DevicePixel );
QRectF rectPts = mPrinter->paperRect( QPrinter::Point );
painter.scale( rectPx.width()/rectPts.width(), rectPx.height()/rectPts.height() );
for ( int iPage = 0; iPage < mRenderer.nPages(); iPage++ )
{
if ( iPage )
{
mPrinter->newPage();
}
mRenderer.printPage( &painter, iPage );
}
mRenderer.print( mPrinter );
}
}
-12
View File
@@ -207,12 +207,6 @@ namespace glabels
}
const MiniPreviewPixmap& Template::preview() const
{
return mPreview;
}
const QList<Frame*>& Template::frames() const
{
return mFrames;
@@ -231,12 +225,6 @@ namespace glabels
}
void Template::initPreview()
{
mPreview = MiniPreviewPixmap( this, TEMPLATE_PREVIEW_SIZE, TEMPLATE_PREVIEW_SIZE );
}
bool Template::operator==( const Template& other ) const
{
return (mBrand == other.mBrand) && (mPart == other.mPart);
-8
View File
@@ -36,9 +36,6 @@
namespace glabels
{
const int TEMPLATE_PREVIEW_SIZE = 80;
class Template
{
Q_DECLARE_TR_FUNCTIONS(Template)
@@ -87,9 +84,6 @@ namespace glabels
void addCategory( const QString& categoryId );
void addFrame( Frame* frame );
void initPreview();
const MiniPreviewPixmap& preview() const;
const QList<Frame*>& frames() const;
bool operator==( const Template& other ) const;
@@ -116,8 +110,6 @@ namespace glabels
QStringList mCategoryIds;
QList<Frame*> mFrames;
MiniPreviewPixmap mPreview;
};
}
+1 -1
View File
@@ -38,7 +38,7 @@ namespace glabels
setSpacing( 24 );
setWordWrap( true );
setUniformItemSizes( true );
setIconSize( QSize(TEMPLATE_PREVIEW_SIZE, TEMPLATE_PREVIEW_SIZE) );
setIconSize( QSize(TemplatePickerItem::SIZE, TemplatePickerItem::SIZE) );
}
+3 -1
View File
@@ -20,6 +20,8 @@
#include "TemplatePickerItem.h"
#include "MiniPreviewPixmap.h"
#include <QHBoxLayout>
#include <QIcon>
#include <QListWidgetItem>
@@ -36,7 +38,7 @@ namespace glabels
{
mTmplate = tmplate;
setIcon( QIcon(tmplate->preview()) );
setIcon( QIcon( MiniPreviewPixmap( tmplate, SIZE, SIZE ) ) );
setText( tmplate->name() );
setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled );
+2
View File
@@ -36,6 +36,8 @@ namespace glabels
///
class TemplatePickerItem : public QListWidgetItem
{
public:
static const int SIZE = 80;
/////////////////////////////////
// Life Cycle
+1 -1
View File
@@ -54,7 +54,7 @@ namespace glabels
if ( !file.open( QFile::ReadOnly ) )
{
qWarning() << "Error: Cannot read file " << qPrintable(fileName)
qWarning() << "Error: Cannot read file" << fileName
<< ":" << file.errorString();
return nullptr;
}
+181
View File
@@ -0,0 +1,181 @@
/* glabels-batch_main.cpp
*
* Copyright (C) 2013-2016 Jim Evins <evins@snaught.com>
*
* This file is part of gLabels-qt.
*
* gLabels-qt 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 3 of the License, or
* (at your option) any later version.
*
* gLabels-qt 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 gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
*/
#include "BarcodeBackends.h"
#include "FileUtil.h"
#include "Db.h"
#include "LabelModel.h"
#include "PageRenderer.h"
#include "Settings.h"
#include "Version.h"
#include "XmlLabelParser.h"
#include "Merge/Factory.h"
#include <QApplication>
#include <QCommandLineParser>
#include <QLibraryInfo>
#include <QLocale>
#include <QPrinter>
#include <QPrinterInfo>
#include <QTranslator>
#include <QtDebug>
int main( int argc, char **argv )
{
QGuiApplication app( argc, argv );
QCoreApplication::setOrganizationName( "glabels.org" );
QCoreApplication::setOrganizationDomain( "glabels.org" );
QCoreApplication::setApplicationName( "glabels-batch-qt" );
QCoreApplication::setApplicationVersion( glabels::Version::STRING );
//
// Setup translators
//
QLocale locale = QLocale::system();
QString qtTranslationsDir = QLibraryInfo::location( QLibraryInfo::TranslationsPath );
QString myTranslationsDir = glabels::FileUtil::translationsDir().canonicalPath();
QTranslator qtTranslator;
if ( qtTranslator.load( locale, "qt", "_", qtTranslationsDir ) )
{
app.installTranslator(&qtTranslator);
}
QTranslator glabelsTranslator;
if ( glabelsTranslator.load( locale, "glabels", "_", myTranslationsDir ) )
{
app.installTranslator(&glabelsTranslator);
}
QTranslator templatesTranslator;
if ( templatesTranslator.load( locale, "templates", "_", myTranslationsDir ) )
{
app.installTranslator(&templatesTranslator);
}
//
// Parse command line
//
const QList<QCommandLineOption> options = {
{{"p","printer"},
QString( QCoreApplication::translate( "main", "Send output to <printer>. (Default=\"%1\")") ).arg( QPrinterInfo::defaultPrinterName() ),
QCoreApplication::translate( "main", "printer" ),
QPrinterInfo::defaultPrinterName() },
{{"o","output"},
QCoreApplication::translate( "main", "Set output filename to <filename>. (Default=\"output.pdf\")" ),
QCoreApplication::translate( "main", "filename" ),
"output.pdf" },
{{"s","sheets"},
QCoreApplication::translate( "main", "Set number of sheets to <n>. (Default=1)" ),
"n", "1" },
{{"c","copies"},
QCoreApplication::translate( "main", "Set number of copies to <n>. (Default=1)" ),
"n", "1" },
{{"f","first"},
QCoreApplication::translate( "main", "Set starting label on 1st page to <n>. (Default=1)" ),
"n", "1" },
{{"l","outlines"},
QCoreApplication::translate( "main", "Print label outlines." ) },
{{"m","crop-marks"},
QCoreApplication::translate( "main", "Print crop marks." ) },
{{"r","reverse"},
QCoreApplication::translate( "main", "Print in reverse (mirror image)." ) }
};
QCommandLineParser parser;
parser.setApplicationDescription( QCoreApplication::translate( "main", "gLabels Label Designer (Batch Front-end)" ) );
parser.addOptions( options );
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument( "file",
QCoreApplication::translate( "main", "gLabels project file to print." ),
"file" );
parser.process( app );
//
// Initialize subsystems
//
glabels::Settings::init();
glabels::Db::init();
glabels::merge::Factory::init();
glabels::BarcodeBackends::init();
if ( parser.positionalArguments().size() == 1 )
{
QString filename = parser.positionalArguments().first();
glabels::LabelModel *label = glabels::XmlLabelParser::readFile( filename );
if ( label )
{
QPrinter printer( QPrinter::HighResolution );
printer.setColorMode( QPrinter::Color );
if ( parser.isSet("printer") )
{
qDebug() << "Batch mode. printer =" << parser.value("printer");
printer.setPrinterName( parser.value("printer") );
}
else if ( parser.isSet("output") )
{
qDebug() << "Batch mode. output =" << parser.value("output");
printer.setOutputFileName( parser.value("output") );
}
else
{
qDebug() << "Batch mode. printer =" << QPrinterInfo::defaultPrinterName();
}
glabels::PageRenderer renderer( label );
renderer.setNCopies( 1 );
renderer.setStartLabel( parser.value( "first" ).toInt() - 1 );
renderer.setPrintOutlines( parser.isSet( "outlines" ) );
renderer.setPrintCropMarks( parser.isSet( "crop-marks" ) );
renderer.setPrintReverse( parser.isSet( "reverse" ) );
renderer.print( &printer );
}
}
else
{
if ( parser.positionalArguments().size() == 0 )
{
qWarning() << "Error: missing glabels project file.";
}
else
{
qWarning() << "Error: batch mode supports only one glabels project file.";
}
return -1;
}
return 0;
}
+122 -62
View File
@@ -825,7 +825,7 @@
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="131"/>
<location filename="../glabels/BarcodeBackends.cpp" line="445"/>
<location filename="../glabels/BarcodeBackends.cpp" line="439"/>
<source>UPC-E</source>
<translation type="unfinished"></translation>
</message>
@@ -841,7 +841,7 @@
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="137"/>
<location filename="../glabels/BarcodeBackends.cpp" line="379"/>
<location filename="../glabels/BarcodeBackends.cpp" line="373"/>
<source>ISBN</source>
<translation type="unfinished"></translation>
</message>
@@ -852,7 +852,7 @@
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="143"/>
<location filename="../glabels/BarcodeBackends.cpp" line="307"/>
<location filename="../glabels/BarcodeBackends.cpp" line="301"/>
<source>Code 128</source>
<translation type="unfinished"></translation>
</message>
@@ -868,13 +868,13 @@
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="149"/>
<location filename="../glabels/BarcodeBackends.cpp" line="376"/>
<location filename="../glabels/BarcodeBackends.cpp" line="370"/>
<source>Interleaved 2 of 5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="151"/>
<location filename="../glabels/BarcodeBackends.cpp" line="268"/>
<location filename="../glabels/BarcodeBackends.cpp" line="265"/>
<source>Codabar</source>
<translation type="unfinished"></translation>
</message>
@@ -890,7 +890,7 @@
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="157"/>
<location filename="../glabels/BarcodeBackends.cpp" line="304"/>
<location filename="../glabels/BarcodeBackends.cpp" line="298"/>
<source>Code 93</source>
<translation type="unfinished"></translation>
</message>
@@ -920,282 +920,282 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="261"/>
<location filename="../glabels/BarcodeBackends.cpp" line="259"/>
<source>Aztec Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="265"/>
<location filename="../glabels/BarcodeBackends.cpp" line="262"/>
<source>Aztec Rune</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="273"/>
<location filename="../glabels/BarcodeBackends.cpp" line="268"/>
<source>Code One</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="277"/>
<location filename="../glabels/BarcodeBackends.cpp" line="271"/>
<source>Code 11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="280"/>
<location filename="../glabels/BarcodeBackends.cpp" line="274"/>
<source>Code 16K</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="283"/>
<location filename="../glabels/BarcodeBackends.cpp" line="277"/>
<source>Code 2 of 5 Matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="286"/>
<location filename="../glabels/BarcodeBackends.cpp" line="280"/>
<source>Code 2 of 5 IATA</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="289"/>
<location filename="../glabels/BarcodeBackends.cpp" line="283"/>
<source>Code 2 of 5 Data Logic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="292"/>
<location filename="../glabels/BarcodeBackends.cpp" line="286"/>
<source>Code 32 (Italian Pharmacode)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="301"/>
<location filename="../glabels/BarcodeBackends.cpp" line="295"/>
<source>Code 49</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="310"/>
<location filename="../glabels/BarcodeBackends.cpp" line="304"/>
<source>Code 128 (Mode C supression)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="313"/>
<location filename="../glabels/BarcodeBackends.cpp" line="307"/>
<source>DAFT Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="316"/>
<location filename="../glabels/BarcodeBackends.cpp" line="310"/>
<source>Data Matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="319"/>
<location filename="../glabels/BarcodeBackends.cpp" line="313"/>
<source>Deutsche Post Leitcode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="322"/>
<location filename="../glabels/BarcodeBackends.cpp" line="316"/>
<source>Deutsche Post Identcode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="325"/>
<location filename="../glabels/BarcodeBackends.cpp" line="319"/>
<source>Dutch Post KIX Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="328"/>
<location filename="../glabels/BarcodeBackends.cpp" line="322"/>
<source>EAN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="331"/>
<location filename="../glabels/BarcodeBackends.cpp" line="325"/>
<source>Grid Matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="334"/>
<location filename="../glabels/BarcodeBackends.cpp" line="328"/>
<source>GS1-128</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="337"/>
<location filename="../glabels/BarcodeBackends.cpp" line="331"/>
<source>GS1 DataBar-14</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="346"/>
<location filename="../glabels/BarcodeBackends.cpp" line="340"/>
<source>GS1 DataBar-14 Stacked</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="349"/>
<location filename="../glabels/BarcodeBackends.cpp" line="343"/>
<source>GS1 DataBar-14 Stacked Omni.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="352"/>
<location filename="../glabels/BarcodeBackends.cpp" line="346"/>
<source>GS1 DataBar Extended Stacked</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="355"/>
<location filename="../glabels/BarcodeBackends.cpp" line="349"/>
<source>HIBC Code 128</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="358"/>
<location filename="../glabels/BarcodeBackends.cpp" line="352"/>
<source>HIBC Code 39</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="361"/>
<location filename="../glabels/BarcodeBackends.cpp" line="355"/>
<source>HIBC Data Matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="364"/>
<location filename="../glabels/BarcodeBackends.cpp" line="358"/>
<source>HIBC QR Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="367"/>
<location filename="../glabels/BarcodeBackends.cpp" line="361"/>
<source>HIBC PDF417</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="370"/>
<location filename="../glabels/BarcodeBackends.cpp" line="364"/>
<source>HIBC Micro PDF417</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="373"/>
<location filename="../glabels/BarcodeBackends.cpp" line="367"/>
<source>HIBC Aztec Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="382"/>
<location filename="../glabels/BarcodeBackends.cpp" line="376"/>
<source>ITF-14</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="385"/>
<location filename="../glabels/BarcodeBackends.cpp" line="379"/>
<source>Japanese Postal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="388"/>
<location filename="../glabels/BarcodeBackends.cpp" line="382"/>
<source>Korean Postal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="391"/>
<location filename="../glabels/BarcodeBackends.cpp" line="385"/>
<source>LOGMARS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="394"/>
<location filename="../glabels/BarcodeBackends.cpp" line="388"/>
<source>Maxicode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="397"/>
<location filename="../glabels/BarcodeBackends.cpp" line="391"/>
<source>Micro PDF417</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="400"/>
<location filename="../glabels/BarcodeBackends.cpp" line="394"/>
<source>Micro QR Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="403"/>
<location filename="../glabels/BarcodeBackends.cpp" line="397"/>
<source>MSI Plessey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="406"/>
<location filename="../glabels/BarcodeBackends.cpp" line="400"/>
<source>NVE-18</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="409"/>
<location filename="../glabels/BarcodeBackends.cpp" line="403"/>
<source>PDF417</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="412"/>
<location filename="../glabels/BarcodeBackends.cpp" line="406"/>
<source>PDF417 Truncated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="415"/>
<location filename="../glabels/BarcodeBackends.cpp" line="409"/>
<source>PLANET</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="418"/>
<location filename="../glabels/BarcodeBackends.cpp" line="412"/>
<source>PostNet</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="421"/>
<location filename="../glabels/BarcodeBackends.cpp" line="415"/>
<source>Pharmacode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="424"/>
<location filename="../glabels/BarcodeBackends.cpp" line="418"/>
<source>Pharmacode 2-track</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="427"/>
<location filename="../glabels/BarcodeBackends.cpp" line="421"/>
<source>Pharmazentral Nummer (PZN)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="430"/>
<location filename="../glabels/BarcodeBackends.cpp" line="424"/>
<source>QR Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="433"/>
<location filename="../glabels/BarcodeBackends.cpp" line="427"/>
<source>Royal Mail 4-State</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="436"/>
<location filename="../glabels/BarcodeBackends.cpp" line="430"/>
<source>Telepen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="439"/>
<location filename="../glabels/BarcodeBackends.cpp" line="433"/>
<source>Telepen Numeric</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="448"/>
<location filename="../glabels/BarcodeBackends.cpp" line="442"/>
<source>USPS One Code</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="451"/>
<location filename="../glabels/BarcodeBackends.cpp" line="445"/>
<source>UK Plessey</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="44"/>
<location filename="../glabels/BarcodeBackends.cpp" line="141"/>
<location filename="../glabels/BarcodeBackends.cpp" line="295"/>
<location filename="../glabels/BarcodeBackends.cpp" line="289"/>
<source>Code 39</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="47"/>
<location filename="../glabels/BarcodeBackends.cpp" line="298"/>
<location filename="../glabels/BarcodeBackends.cpp" line="292"/>
<source>Code 39 Extended</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/BarcodeBackends.cpp" line="50"/>
<location filename="../glabels/BarcodeBackends.cpp" line="125"/>
<location filename="../glabels/BarcodeBackends.cpp" line="442"/>
<location filename="../glabels/BarcodeBackends.cpp" line="436"/>
<source>UPC-A</source>
<translation type="unfinished"></translation>
</message>
@@ -2340,7 +2340,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/PrintView.cpp" line="86"/>
<location filename="../glabels/PrintView.cpp" line="87"/>
<source>(Will print a total of %1 items on %2 pages.)</source>
<translation type="unfinished"></translation>
</message>
@@ -2378,6 +2378,66 @@
<source>gLabels Label Designer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="82"/>
<source>Send output to &lt;printer&gt;. (Default=&quot;%1&quot;)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="83"/>
<source>printer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="87"/>
<source>Set output filename to &lt;filename&gt;. (Default=&quot;output.pdf&quot;)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="88"/>
<source>filename</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="92"/>
<source>Set number of sheets to &lt;n&gt;. (Default=1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="96"/>
<source>Set number of copies to &lt;n&gt;. (Default=1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="100"/>
<source>Set starting label on 1st page to &lt;n&gt;. (Default=1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="104"/>
<source>Print label outlines.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="107"/>
<source>Print crop marks.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="110"/>
<source>Print in reverse (mirror image).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="115"/>
<source>gLabels Label Designer (Batch Front-end)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels-batch_main.cpp" line="120"/>
<source>gLabels project file to print.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../glabels/glabels_main.cpp" line="83"/>
<source>gLabels project files to open, optionally.</source>