Toon posts:

[ASP.NET] Word documenten genereren zonder COM

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste dames / heren,

Momenteel heb ik een oplossing om word documenten te gereren via ASP.NET door middel van COM+. Hierbij wordt gebruik gemaakt van een Office dll die een interop interface gebruikt.

Helaas levert dit momenteel nog problemen op. Met name omdat op de server gebruik gemaakt van de word versie die daarop geinstalleerd is. Wat ik nu wil creeren is dat ik gebruik kan maken van een dll die word min of meer simuleerd. Ik wil dus word documenten generen zonder het programma word te openen op de server. Met name de tijd tussen de VB commandos en de reactie op de server zorgt voor de nodige problemen.

Ik heb al wel wat gevonden op The code project alleen ik vraag me af of jullie nog meer oplossing weten voor het aansturen van word zonder daadwerkelijk gebruik te maken van VBA of COM.

Mvg Herpper

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

RTF

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Tja RTF... Ik weet wel dat er een Microsoft Word Object library is alleen begrijp ik dat er ook gebruikt gemaakt wordt van COM. Iemand meer suggesties. BTW misschien is het makkelijk als er ook wordt uitgelegd waarom en hoe RTF dan moet worden toegepast. Is misschien wat duidelijker.

Toch bedankt alvast..

Verwijderd

Als Word 2003 support voldoende is kun je WordML (XML formaat voor Word 2003) gaan gebruiken, zie ook http://msdn.microsoft.com/msdnmag/issues/03/11/XMLFiles/

HTH :)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Hier kan je precies lezen hoe het RTF formaat in elkaar steekt.

We adore chaos because we like to restore order - M.C. Escher


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op donderdag 01 september 2005 @ 11:06:
[...]


Tja RTF... Ik weet wel dat er een Microsoft Word Object library is alleen begrijp ik dat er ook gebruikt gemaakt wordt van COM. Iemand meer suggesties. BTW misschien is het makkelijk als er ook wordt uitgelegd waarom en hoe RTF dan moet worden toegepast. Is misschien wat duidelijker.

Toch bedankt alvast..
RTF is een eigen formaat, welke ook goed ingelezen kan worden door MS Word. Specificaties zijn wel op Internet te vinden, zie ook LordLarry. Maar voor uitleg: google + rtf zal toch ook wel een en ander verklaren? :)

[ Voor 11% gewijzigd door gorgi_19 op 01-09-2005 11:10 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Verwijderd schreef op donderdag 01 september 2005 @ 11:06:
Als Word 2003 support voldoende is kun je WordML (XML formaat voor Word 2003) gaan gebruiken, zie ook http://msdn.microsoft.com/msdnmag/issues/03/11/XMLFiles/

HTH :)
Het zou kunnen zijn dat een gebruiker gebruik maakt van office 97. Ik ben bang dat deze oplossing dan ook niet toerijkend is. Ik ga eens kijken wat ik met het RTF gebeuren kan doen. Ik ben ooit wel eens bezig geweest met het RTF format om word documenten te creeren maar dat was ook niet echt een van de makkelijkste dingen. Is er niet ziets als een dll waarbij word acties gedaan kunnen worden in een word document zonder dat word moet worden opgestart???

Verwijderd

Verwijderd schreef op donderdag 01 september 2005 @ 11:36:
[...]
Is er niet ziets als een dll waarbij word acties gedaan kunnen worden in een word document zonder dat word moet worden opgestart???
Daar zijn ook wel commerciele componenten voor zoals http://www.aspose.com/Products/Aspose.Word/. Het is echter geen makkelijk klusje, dus weinig mensen/bedrijven zullen zin hebben om dit gratis ter beschikking te stellen na lang programmeerwerk.

Edit: Overigens riekt dit naar een scriptrequest.

[ Voor 6% gewijzigd door Verwijderd op 01-09-2005 11:41 ]


Verwijderd

Topicstarter
Verwijderd schreef op donderdag 01 september 2005 @ 11:40:
[...]

Daar zijn ook wel commerciele componenten voor zoals http://www.aspose.com/Products/Aspose.Word/. Het is echter geen makkelijk klusje, dus weinig mensen/bedrijven zullen zin hebben om dit gratis ter beschikking te stellen na lang programmeerwerk.

Edit: Overigens riekt dit naar een scriptrequest.
Ik heb ook nooit gezegd dat het geen geld mag kosten..
Bedankt ik zal eens een kijkje nemen.

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 01 september 2005 @ 11:40:
[...]
Edit: Overigens riekt dit naar een scriptrequest.
Ik zie niet wat mis met mijn vraag is. Ik vraag niet om directe code. Ik vraag alleen of het mogelijk is en of mensen mogelijke oplossing weten. Kijk als iemand RTF roept zou het ook wel makkelijk zijn dat mensen zeggen wat ik er dan mee kan doen voor mijn probleem. Iedereen roept dat je als vraag steller duidelijk moet zijn, nou dan mag ik dat ook wel verwachten van iemand die antwoord geeft.

Scriptrequest Tja wat is dat dan precies. Ik vraag in ieder geval niet om een voorgekouwde uitwerking van mijn probleem. Ik vraag niet hoe ik die dll's die ik zoek dan moet gebruiken. Alleen of deze bekend zijn en waar ik ze dan kan vinden.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op donderdag 01 september 2005 @ 12:17:
Ik zie niet wat mis met mijn vraag is. Ik vraag niet om directe code. Ik vraag alleen of het mogelijk is en of mensen mogelijke oplossing weten. Kijk als iemand RTF roept zou het ook wel makkelijk zijn dat mensen zeggen wat ik er dan mee kan doen voor mijn probleem. Iedereen roept dat je als vraag steller duidelijk moet zijn, nou dan mag ik dat ook wel verwachten van iemand die antwoord geeft.
Wat is er onduidelijk aan RTF :? De eerste link naar Google gaf je al het complete antwoord met mogelijkheden; meer moeite hoef ik er toch niet in te stoppen, aangezien jij ook geen moeite in anderen stopt? :)

[ Voor 4% gewijzigd door gorgi_19 op 01-09-2005 12:18 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op donderdag 01 september 2005 @ 12:18:
[...]aangezien jij ook geen moeite in anderen stopt? :)
Nou ik ben best bereid moeite in anderen te stoppen alleen is dat niet echt makkelijk voor iemand die net komt kijken in de wereld van het programmeren. Eens moet iemand het toch leren denk ik dan maar. Maar goed mijn excuses als ik iemand heb beledigd. Ik ben alleen maar op zoek naar een geschikte oplossing. Ik heb zelf al eens met RTF gewerkt. Ik weet wat het inhoud om RTF paginas te creeren via RTF tags. Dit is niet echt een snelle oplossing moet ik zeggen. Ik ben wel al op zoek gegaan naar RTF generators. Dit is een mogelijke oplossing alleen die link die je me stuurde bij google heeft daar niet erg veel mee van doen.

Verwijderd

Verwijderd schreef op donderdag 01 september 2005 @ 12:17:
[...]
Scriptrequest Tja wat is dat dan precies. Ik vraag in ieder geval niet om een voorgekouwde uitwerking van mijn probleem. Ik vraag niet hoe ik die dll's die ik zoek dan moet gebruiken. Alleen of deze bekend zijn en waar ik ze dan kan vinden.
Onder een scriptrequest valt ook een vraag om standaard software, want dat hoort in SA. Nu vind ik dit persoonlijk een grensgeval, maar officieel gaat P & W puur om programmeren.

Overigens heb ik hier nog een component gevonden: http://officewriter.softartisans.com/officewriter-312.aspx

Verwijderd

Topicstarter
a.. SoftArtisans WordWriter
b.. TX Text Control
c.. Microsoft Visual Studio Tools for Office (niet geschikt maakt gebruik van interop)
d.. Aspose.Word

Ik heb in ieder geval gevonden dat er een 4 tal mogelijkheden zijn.
Dit zegt althanks een persoon die de laatste mee ontwikkeld heeft.

Bedankt voor de link overigens

[ Voor 7% gewijzigd door Verwijderd op 01-09-2005 14:48 ]


Verwijderd

Topicstarter
Nou ik ben nog eens aan het zoeken geweest maar de aspose toepassing blijkt als enige geen gebruik te maken van COM. Verder is het de bedoeling dat de brief niet wordt geschreven maar alleen wordt samengesteld uit een voorgedefinieerde template met standaard tekst en wat mergedata. Ik heb daarom nog eens gekeken naar het RTF gebeuren. Indien ik een merge wil realiseren zonder COM met RTF dan zal ik zelf een parser moeten schrijven om de RTF tags uit te lezen en deze te veranderen in de gekozen mergedata. Het is geen standaard functie zoals dat bij COM het geval is. De applicatie moet dus die RTF parsen en wijzigen. Weet iemand of een merge buiten COM met RTF bestaat waarbij dit op een andere makkelijkere manier kan?

Indien ik het verkeerd heb begrepen hoor ik het ook graag..

Mvg Perry

[ Voor 3% gewijzigd door Verwijderd op 02-09-2005 09:50 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Waarom wil je geen Com gebruiken? Alle componenten die ook geschikt moeten zijn voor Asp 3.0 zullen waarschijnlijk Com zijn. Dat je geen gebruik wil maken van de Office Com componenten kan ik me voorstellen. Maar dat betekend toch niet meteen dat iets wat Com gebruikt meteen gebruik maakt van de Office Componenten?

Of is dat niet de reden dat je geen Com wilt gebruiken?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Microsoft zelf raad het gebruik van Office via COM in server applicaties af, vooral als er gelijktijdig meerdere word instanties gedraaid worden. De bron heb ik niet meer, maar voor zover ik het me nog kan herinneren was het een msdn artikel.

Zelf heb ik er ook een tijdje mee geëxperimenteerd, maar ben uiteindelijk naar RTF uitgeweken. Je kan dan overigens prima met templates mee werken: je template is gewoon een rtf file met wat unieke placeholders en vervang deze door de text die je erin wilt hebben...

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Verwijderd

Topicstarter
rwb schreef op vrijdag 02 september 2005 @ 09:54:
Waarom wil je geen Com gebruiken?
Infinitive schreef op vrijdag 02 september 2005 @ 10:05:
Microsoft zelf raad het gebruik van Office via COM in server applicaties af, vooral als er gelijktijdig meerdere word instanties gedraaid worden.

Zelf heb ik er ook een tijdje mee geëxperimenteerd, maar ben uiteindelijk naar RTF uitgeweken. Je kan dan overigens prima met templates mee werken: je template is gewoon een rtf file met wat unieke placeholders en vervang deze door de text die je erin wilt hebben...
Dat is nu precies de reden waarom COM hier ook niet geschikt is. Er is een probleem met timing issues. Het komt regelmatig voor dat een Quit aanroep gedaan word voor de msword applicatie die geopend is. Indien het proces van save nog bezig is zal het Quit command niet worden geaccepteer aangezien het save proces nog in volle gang is. Dit zorgt op den duur voor een gigantisch geheugen lek aangezien er dus tig instanties van Word geopend blijven op de server.

Ik ben nu inderdaad ook bezig met een RTF oplossing. Ik denk ook dat dit de meest geschikte manier is. Inderdaad een search en replace doen voor mergedata.

Welk component gebruik jij om je RTF in te lezen en te wijzigen? Ben wel benieuwd..

Bedankt alvast Perry

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Infinitive schreef op vrijdag 02 september 2005 @ 10:05:
Microsoft zelf raad het gebruik van Office via COM in server applicaties af, vooral als er gelijktijdig meerdere word instanties gedraaid worden. De bron heb ik niet meer, maar voor zover ik het me nog kan herinneren was het een msdn artikel.

Zelf heb ik er ook een tijdje mee geëxperimenteerd, maar ben uiteindelijk naar RTF uitgeweken. Je kan dan overigens prima met templates mee werken: je template is gewoon een rtf file met wat unieke placeholders en vervang deze door de text die je erin wilt hebben...
Ja dat snap ik dat je de Office Com componenten niet gaat gebruiken op een server ( Daar wil je eigenlijk zowiezo geen Office op installeren ). Maar je kan best 3rd party Com componenten gebruiken die ook Word/RTF documenten kunnen genereren.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op vrijdag 02 september 2005 @ 12:01:
[...]
Maar je kan best 3rd party Com componenten gebruiken die ook Word/RTF documenten kunnen genereren.
Ja prima maar de 3dr party componenten zoals aspose enz zijn vaak erg duur en ik ga er waarschijnlijk maar een klein onderdeel van gebruiken. Namelijk het mergen van data. De vraag is of deze componenten het aanschaffen waard zijn. Overigens heb ik nog niet erg veel componenten kunnen vinden die het generen van Word pagina's mogelijk maken zonder daarbij een Ms Word instantie op de server te starten.

[ Voor 20% gewijzigd door Verwijderd op 05-09-2005 12:16 ]


Verwijderd

Topicstarter
Het probleem met de COM oplossing is dat er instanties op de server geopend blijven.

Waardoor dit komt is me een raadsel. Als ik het test dan werkt de code prima Word word ook afgesloten. Als ik hem test op de live server dan werkt de Quit functie niet altijd. Er blijven dus instanties van Word geopend op de server.

Iemand hier ervaring mee? Is dit op te lossen?

Private Function MyMailMerge(ByVal hoofdDoc As String, ByVal dataDocPth As String, ByVal mergedDocPth As String) As Boolean
Dim oApp As Object 'must use Object, otherwise oApp.Quit() is not accepted by the compiler
Dim oMainDoc As Object 'use here Object too
Dim lastError As String
Dim rc As Boolean = False
Dim mainDocOpen As Boolean = False

Try
'Start Word
oApp = CreateObject("Word.Application")
oApp.Visible = False

'OpenStart a new mainDoc for the mail merge
oMainDoc = oApp.Documents.Open(hoofdDoc)
mainDocOpen = True
With oMainDoc.MailMerge
.OpenDataSource(dataDocPth, SQLStatement:="Select * from data")
.Destination = Word.WdMailMergeDestination.wdSendToNewDocument
.Execute()
End With
oApp.ActiveDocument.SaveAs(mergedDocPth, , , , , , False)

rc = True
Catch e As Exception
lastError = e.ToString
End Try

If mainDocOpen Then oMainDoc.Close(False)
oMainDoc = Nothing
oApp.Quit()
oApp = Nothing
End Function

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op maandag 05 september 2005 @ 12:21:
Het probleem met de COM oplossing is dat er instanties op de server geopend blijven.

Waardoor dit komt is me een raadsel. Als ik het test dan werkt de code prima Word word ook afgesloten. Als ik hem test op de live server dan werkt de Quit functie niet altijd. Er blijven dus instanties van Word geopend op de server.

Iemand hier ervaring mee? Is dit op te lossen?
Geen MS Word installeren op de server. MS Word is niet bedoeld om in serveromgevingen te draaien en wordt ook expliciet afgeraden door Microsoft.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op maandag 05 september 2005 @ 12:22:
[...]

Geen MS Word installeren op de server. MS Word is niet bedoeld om in serveromgevingen te draaien en wordt ook expliciet afgeraden door Microsoft.
Precies... Inderdaad daarom ook mijn eerdere vraag.
Maar ik wil nu even alle opties open houden...

  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Open source project itextsharp (port van java lib iText) kan ook naar RTF (en PDF, (X)HTML e.a.)

http://itextsharp.sourcef...l/ch08.html#generatingRTF

Is mischien wel bruikbaar.

[ Voor 50% gewijzigd door Nexopheus op 05-09-2005 12:55 ]

Wat niet kan is nog nooit gebeurd


  • hing
  • Registratie: Augustus 2002
  • Laatst online: 19-05-2023
Geen idee of dit een goede of nette methode is maar het lijkt wel te werken.
Als je een HTML document genereert en deze renamet naar .doc, dan worden ze keurig geopend in MsWord

Verwijderd

Topicstarter
Het word toch vrij lastig met RTF, aangezien er in een batch misschien wel duizenden brieven gegenereerd worden met verschillende naw gegevens die dan vervolgens worden opgeslagen in 1 word document. Ik denk dat ik dat ASPOSE component maar ga gebruiken. Ik heb het getest en het werk ontzettend snel en goed.

Verwijderd

Topicstarter
Nog even een updateje

We hebben uiteindelijk toch gekozen voor het SoftArtisans Wordwriter component. Deze is veel betrouwbaarder dan de Aspose variant. Aspose kan niet overweg met evaluation field in je word document. Het evalueren wordt niet door aspose ondersteund en zorgt ervoor dat bij de wat oudere versies van word de velden handmatig moeten worden geupdate. Dit wil je natuurlijk niet. De enige tip die ze bij aspose hebben is dat er geen gebruik gemaakt moet worden van eval field en dat dit moet worden verplaatst naar je code. Dit is onacceptabel voor ons. SoftArtisans wordwriter is ook gebaseerd op officiele microsoft code. Zij zijn de enige die het niet proberen na te maken maar het op een dealtje hebben gegooid met MS. Het is daarom ook wel wat duurder maar zeker betrouwbaarder. Het genereren van de Word bestanden gaat niet in alle gevallen goed bij Aspose en er daarom zal in sommige gevallen alle fields moeten worden vervangen door nieuwe mergefields. Klanten leveren de templates aan bij ons en dat betekent dat we alles moeten controlleren op corrupte mergevelden. Dit willen we ook niet. Softartisans blijkt met een aantal minimale vereiste aanpassingen aan het template in alle gevallen te werken. Ook bij de templates die bij Aspose als Corrupt worden beschouwd.

Hopelijk is dit verhaaltje een beetje duidelijk en ik hoop dat mensen die ook op zoek zijn naar een oplossing voor dit probleem iets aan deze post hebben gehad.

Voor iedereen die de SoftArtisans component willen kopen. Lees eerst dit artikel eens door en verwijs ernaar bij de aanschaf. Het scheelt ongeveer 300 Dollar.

http://aspalliance.com/710#Page7

Succes,

Perry
Pagina: 1