Erilaisten dokumenttien automaattinen generointi on todella yleinen käyttötapaus, johon Flow taipuu erinomaisesti. Flow’sta löytyy valmis toiminto (Populate a Microsoft Word template), jota hyödyntäen voi luoda dynaamisesti Word-tiedostoja omaa mallipohjaa hyödyntäen.
Aiemmassa jutussa kävin läpi, miten sitä hyödyntäen voi luoda laskuliitteitä.
Lisätään tällä kertaa hieman vaikeuskerrointa. Luodaan Flow’lla PDF-muotoinen dokumentti, jonka osana on n kappaletta kuvia. Kyseessä voisi olla esimerkiksi tarkastusraportti kuvineen.

Dokumentille liitettävät kuvat haetaan SharePoint-listan riveiltä.

Ja sitten aloitetaan.
Vaihtoehto 1 – Word mallipohjan hyödyntäminen
Tehtävä kuulostaa todella yksinkertaiselta. Luodaan Wordilla mallipohja, jonka alussa on paikka dynaamisesti täytettävälle tekstisisällölle. Pohjan lopussa on toistuva osio (Repeating Section Content Control), jonka sisällä on kuvaelementti kuvaa varten, sekä sekä tekstielementti kuvan nimeä varten.
Toistuvan osion sisään voimme Flow’lla lisätä 0-n kappaletta kuvia. Helppoa!

Ilo on kuitenkin ennenaikaista.
Huomaamme nopeasti että muutoin niin mainio Populate a Microsoft Word template -toiminto ei tue kuvaelementtien sijoittamista toistuvan osion sisään.
Se siitä sitten. Pitää keksiä muuta.
Vaihtoehto 2 – Html-dokumentin muodostaminen ja sen muuntaminen PDF:ksi
Otetaan seuraavaksi pykälää nörtimpi lähestyminen. Muodostetaan Flow’lla html-muotoinen dokumentti, joka lopuksi muunnetaan PDF:ksi.
Aloitetaan Flow alustamalla muuttuja, johon muodostamme dokumenttimme sisällön html-muodossa. Lisätään siihen muutama kappale tekstiä.

Seuraavaksi haemme kaikki dokumenttiin liitettävät kuvat.
- Haetaan kaikki SharePoint-listan rivit (Get items)
- Kunkin rivin kohdalla haetaan kaikki sen liitetiedostot (Get attachments)
- Lopuksi lisätään html-tiedostoon viittaus kyseiseen kuvaan

Lopuksi täydennetään html-tiedosto ja tallennetaan se OneDriveen. Josta se sitten konvertoidaan PDF:ksi ja lähetetään edelleen sähköpostilla.

Hienoa!
Vai onko?
No eihän ne kuvat tule mukaan PDF:ään. Kuvat on tallennettuna SharePointiin, eikä PDF-konversio pääse niihin käsiksi.

Vaihtoehto 3 – Html-dokumentti johon kuvat upotetetaan
Hätä ei ole kuitenkaan tämännäköinen. Kuvat voi upottaa suoraan html-tiedostoon, jolloin ne saadaan mukaan lopulliseen PDF-tiedostoon.
Muutetaan tekemäämme Flow’ta hieman. Liitetiedostojen hakemisen jälkeen
- Haetaan liitetiedoston sisältö (Get attachment content)
- Upotetaan sisällön content-osa tekstinä html-sivulle
Samalla pakotetaan kuvien leveydeksi 200 pikseliä. Näin ne ovat kaikki saman levyisiä lopullisessa dokumentissa.

Eli
<img src="data:image/png;base64,@{body('Get_attachment_content')?['body']?['$content']}" width="200" />
Ja näin meillä on PDF-dokumentti, jonka lopussa on n kpl kuvia.

Mutta…
HTML-tiedoston muokkaaminen nätiksi, saati noudattamaan organisaation virallista dokumenttipohjaa voi olla haasteellista. Lisäksi OneDriven muunnostoiminto (Convert to) toimii ainoastaan alle 2MB kokoisilla tiedostoilla.
2MB. Se on yksi kännykällä otettu valokuva. Ei tämäkään nyt tunnu kauhean toimivalta.
Mikäli html-lähestyminen tuntuu muuten hyvältä, löytyy helpstusta encodianin toiminnoista.
- Kuvat voi pienentää (Resize image), niin ne eivät vie tilaa
- HTML -> PDF muunnoksen voi tehdä omalla toiminnollaan (Convert HTML to PDF), jossa ei ole tiedoston kokorajaa
Encodianin toiminnot edellyttävät erillistä tilausta.
Vaihtoehto 4 – Luodaan kuvista erilliset dokumentit ja yhdistetään ne
Mikäli kuitenkin haluamme edetä Word-pohjaa hyödyntäen, on meillä vielä yksi kortti jäljellä. Mitä jos loisimme Word-pohjan, jossa on paikka yhdelle kuvalle. Sitten luomme jokaisesta kuvasta oman Word-tiedoston, jotka lopuksi liitämme kaikki yhteen.
Nätimmän lopputuloksen saa, jos yhdessä mallipohjassa on esimerkiksi 3 kuvaa. Mutta nyt ei jaksa enää säätää. Mennään yhdellä.
Eli näin.

Dokumentin ensimmäistä sivua varten luomme toisen mallipohjan.

Flow’ssa aloitamme dokumentin ensimmäisen sivun täyttämisellä, jonka jälkeen lisäämme muodostetun dokumentin array-tyyppiseen muuttujaan (doc array). Muuttujaan kerätään kaikki yhdistettävät dokumentit. JSON-muodossa sisältäen seuraavat kentät.
- fileName (tiedoston nimi, ei merkitystä lopputuloksen kannalta)
- fileContent (Word-tiedoston sisältö)
- wordInputFormatMode (miten lopputulos muotoillaan, käytämme keepSourceFormatting asetusta, eli säilytämme dokumentin omat muotoilut)

Jatko onkin hyvin samanlainen kuin html yrityksessämme. Tällä kertaa jokaisesta liitetiedostosta muodostetaan oma Word-dokumentti, joka lisätään muiden jatkoksi doc array -muuttujaan.

Lopuksi kaikki muodostetut word-dokumentit yhdistetään Encodianin Merge Word Documents -toiminnolla, muunnetaan OneDriven toimintojen avulla PDF:ksi ja lähetetään sähköpostilla.

Ja näin meillä on PDF-dokumentti.

Paitsi että hetkinen…
Word-mallipohjassa kuvat ovat tietyn kokoisia ja kaikki kuvat pakotetaan siihen. Tämä ei siis toimi, mikäli kuvien kuvasuhde ei ole sama.
Vaihtoehto 5 – Luodaan kuvista dokumentit Encodianin toiminnolla ja yhdistetään ne
Viimeiseksi kokeillaan Encodianin Replace Text with Image -toimintoa. Sen avulla voi korvata Word (tai PDF) dokumentista merkkijonon kuvalla. Jolloin (oletettavasti) kuvat voivat olla eri kuvasuhteella.
Luodaan mallipohja yhtä kuvaa varten. Se näyttää tältä.

Nyt Flow’ssa ensin pienennetään kuva 300 pikseliä leveäksi (liian suuret kuvat eivät mahdu dokumenttiin leveyssuunnassa). Tämän jälkeen kuva tallennetaan OneDriveen ja haetaan saman tien sen sisältö sieltä. Tämä on laiskan tapa varmistaa että sisältö (file content) on toiminnoille sopivassa muodossa.
Lopuksi mallidokumentin **image** -teksti korvataan pienennetyllä kuvalla.

Ja nyt on kuvasuhteet oikein!

Yhteenveto
Tämänkertainen harjoituksemme oli erinomainen esimerkki Flow ja Power Apps -tekemisestä. Erilaisia toteutusvaihtoehtoja on yleensä useita. Jokaisessa omat hyvät ja huonot puolensa.
Mikä esitetyistä menetelmistä sitten on paras? Se riippuu
- Onko mahdollista käyttää premium-yhdistintä (Word Online (Business))?
- Onko mahdollista käyttää 3. osapuolen yhdistimiä (Encodian tai esimerkiksi Plumsail)?
- Saavutetaanko html-lähestymisellä dokumentin ulkoasuvaatimukset?
- Ovatko käytetyt kuvat aina samassa kuvasuhteessa?
- jne
Ja voihan esitettyjä tekniikoita yhdistellä luovasti. Esimerkiksi
- Varsinainen dokumentti muodostetaan dynaamisesti Word Online -toiminnolla mallipohjaa käyttäen ja muunnetaan se PDF-muotoon
- Kuvaliitteistä tehdään html-dokumentti joka muunnetaan PDF-muotoon
- Nämä kaksi PDF-dokumenttia yhdistetään yhdeksi
Kiitos hyvistä vinkeistä PDF-dokumenttien luomiseksi. Suhteellisen monimutkaiselta näyttää tuo prosessi, jossa ensin luodaan Html tai Word dokumentti. Ystäväni on myös pohtinut, mikä olisi yksinkertaisin keino luoda PDF:iä useasta kuvasta. PDF-muokkausohjelma taitaa kuitenkin ratkaista ongelman.
TykkääTykkää