Index: Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp =================================================================== --- Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp (revision 20542) +++ Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp (working copy) @@ -4751,7 +4751,21 @@ } } else - currItem->Pfile = Relative2Path(attrs.valueAsString("PFILE"), baseDir); + { + if (!FileExists(Relative2Path(attrs.valueAsString("PFILE"), baseDir))) + { + // try the PFILEABS, if that is empty, revert to PFILE since legacy + // xml may not have PFILEABS + if (attrs.hasAttribute("PFILEABS") + && !attrs.valueAsString("PFILEABS").isEmpty() + && FileExists(attrs.valueAsString("PFILEABS"))) + currItem->Pfile = attrs.valueAsString("PFILEABS"); + else + currItem->Pfile = Relative2Path(attrs.valueAsString("PFILE"), baseDir); + } + else + currItem->Pfile = Relative2Path(attrs.valueAsString("PFILE"), baseDir); + } #ifdef HAVE_OSG if (currItem->asOSGFrame()) { Index: Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp =================================================================== --- Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp (revision 20542) +++ Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp (working copy) @@ -2594,7 +2594,10 @@ } } else + { docu.writeAttribute("PFILE",Path2Relative(item->Pfile, baseDir)); + docu.writeAttribute("PFILEABS",Relative2Path(item->Pfile, baseDir)); + } } #ifdef HAVE_OSG else if (item->asOSGFrame()) Index: Scribus/scribus/util.cpp =================================================================== --- Scribus/scribus/util.cpp (revision 20539) +++ Scribus/scribus/util.cpp (working copy) @@ -309,6 +309,13 @@ return out; } +bool FileExists(QString Path) +{ + if (Path.isEmpty()) + return false; + return QFileInfo::exists(Path); +} + QString Path2Relative(QString Path, const QString& baseDir) { QDir d(baseDir); Index: Scribus/scribus/util.h =================================================================== --- Scribus/scribus/util.h (revision 20539) +++ Scribus/scribus/util.h (working copy) @@ -51,6 +51,7 @@ void SCRIBUS_API ReOrderText(ScribusDoc *currentDoc, ScribusView *view); void SCRIBUS_API WordAndPara(PageItem *currItem, int *w, int *p, int *c, int *wN, int *pN, int *cN); bool SCRIBUS_API overwrite(QWidget *parent, QString filename); +bool SCRIBUS_API FileExists(QString Path); QString SCRIBUS_API Path2Relative(QString Path, const QString& baseDir = QDir::currentPath()); QString SCRIBUS_API Relative2Path(QString File, const QString& baseDir = QDir::currentPath()); char SCRIBUS_API *toAscii85( quint32 value, bool& allZero );