2.4k Aufrufe
Gefragt in Datenbanken von
Guten Morgen,

ich habe seit ein paar Tagen ein Problem. Und zwar arbeite ich mit zwei unterschiedlichen Datenbanken. Den Inhalt der Quell-Datenbank (Telelogic DOORS) muss ich exportieren und in eine Ziel-Datenbank (MKS) importieren. Dies ist weitestgehend automatisiert und funktioniert ganz gut.

Mein Problem sind nun Bilder und Tabellen aus der Quell-Datenbank. Diese sind als OLE-Objekte abgelegt und werden beim Export in einer RTF-Datei gespeichert. Jedes Objekt wird in einer eigenen Datei gespeichert.

Die Ziel-Datenbank kann aber keine OLE-Objekte einbinden und verlangt ein Bild (z.B: Jpg oder Bmp). Es wird stattdessen nur ein Link auf die RTF-Datei eingebunden, welche ich dann manuell in einem extra Fenster (MS-Word) öffnen muss. Das erleichtert einem die Arbeit nicht wirklich.

Deshalb öffne ich die RTF-Datei, mache einen Screenshot des Bildes und füge dieses überhalb des Links ein.

Dies kann ich aber nicht manuell machen da ich ca. 10.000 solcher Dateien zu bearbeiten hätte. Und wenn ich ein Update der Datenbank bekomme müsste ich diesen Schritt wiederholen. Ich bezweifele, dass ich zwischen zwei Updates fertig werden kann.

Lange Rede kurze Frage:

Gibt es eine Möglichkeit dies per Script zu automatisieren?

Da ich keine einzige Scriptsprache beherrsche (außer die von der Quell-Datenbank DOORS) und mich in alles reinarbeiten muss bin ich ziemlich unvoreingenommen wie dies funktionieren kann.


Schönen Gruß

Sabine

2 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
ich gehe davon aus, dass das notfalls mit windows scripting machbar wäre. Wenn nötig, kann ich da noch genaueres zu sagen.

Erstmal wirst Du wohl am besten etwas forschen müssen...

TIPS:
Ich würde mich zunächst mal über eine Suchmaschine nach "rtf to jpg" oder so umschauen.

Alternativ mal nach "rtf to ps" suchen. IrfanView kann anscheinend (mit dem entsprechenden Plugin) PS Dateien lesen, damit wäre dann auch geholfen.

FRAGEN:
ist es richtig, daß Dir geholfen wäre, wenn Du automatisiert aus einem RTF ein JPG machen könntest ?

Dir reicht eine Vorschau des Bildes, richtig ? Es muss keine großartige Qualität sein?

Hast Du "Acrobat" (ich meine nicht "Acrobat Reader") ?
Hast Du Corel Draw oder ähnliches ?

Gruß, kicia
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Falls Powerpoint verfügbar ist, würde der Code unten funktionieren.
Alle RTF Dateien müssen eine eingebundene Grafik enthalten.
paths.input und paths.output müssen natürlich ggf. angepasst werden.


//------------------------------------------------------------------
//
// convert image in RTF file to JPG using Word and PowerPoint
//
//------------------------------------------------------------------

var paths = { input:"C:/temp", output:"C:/temp" };
var apps = { word: new ActiveXObject("Word.Application"), pp: new ActiveXObject("PowerPoint.Application"), quitAll: function () { this.word.Quit(); this.pp.Quit(); } };

convertFiles();
apps.quitAll();

//---------------------------------
function convertFiles()
{
var i = 0;
var files = getFiles( paths.input, 5 )[1];
for( i = 0; i < files.length; i++ )
{
if( files[i].name.indexOf(".rtf") > -1 )
{
getContentFromWordFile( apps.word, files[i].path );
exportClipBoardInPowerPoint( apps.pp, paths.output + "/" + files[i].name.split(".")[0] + ".jpg" );
}
}
}

//---------------------------------
function exportClipBoardInPowerPoint( app, fileName )
{
var slide = app.Presentations.Add().Slides.Add( 1,12 ); // ppLayoutBlank = 12
slide.Shapes.Paste();
slide.Shapes.Item(1).Export( fileName, 1 );
}

//---------------------------------
function getContentFromWordFile( wordApp, fileName )
{
wordApp.Documents.open( fileName ).InlineShapes.Item(0).Range.CopyAsPicture();
}

//-----------------------------------------------------------------------------------
//-- returns an array: [ array of folder objects, array of file objects ]
//-- n = 0001 (1): no folders
//-- n = 0010 (2): no files
//-- n = 0100 (4): no subfolders
//-----------------------------------------------------------------------------------
function getFiles( startfolder, n )
{
if( !n ) n = 0;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folders = new Array();
var files = new Array();
if( !fso.FolderExists( startfolder ) )
{
msg("Folder " + startfolder + " not found!");
return [ [],[] ];
}
getNext( startfolder );
return [ folders, files ];

function getNext( fld )
{
var folderObj = fso.getFolder( fld );
var filesEn, foldersEn;

if( (n & 2) == 0 )
{
filesEn = new Enumerator( folderObj.Files );
for (; !filesEn.atEnd(); filesEn.moveNext()) files.push( filesEn.item() );
}
if( (n & 1) == 0 )
{
folders.push( folderObj );
}
if( (n & 4) == 0 )
{
foldersEn = new Enumerator( folderObj.SubFolders );
for (; !foldersEn.atEnd(); foldersEn.moveNext()) getNext( foldersEn.item().path );
}
}
}

//---------------------------
function msg(s) { WScript.Echo(s); }

//---------------------------
//-- additional information :
/*
ppShapeFormatGIF = 0
ppShapeFormatJPG = 1
ppShapeFormatPNG = 2
ppShapeFormatBMP = 3
ppShapeFormatWMF = 4
ppShapeFormatEMF = 5

ppRelativeToSlide = 1
ppClipRelativeToSlide = 2
ppScaleToFit = 3
ppScaleXY = 4
*/
...