Create business-critical documents like invoices, contracts, sales proposals, and work orders automatically.
Create a new document in a collection of your choice. See the docs here
Execute an aggregation pipeline on a MongoDB collection. See the documentation
import fs from "fs";
import axios from "axios";
import {
ServicePrincipalCredentials,
PDFServices,
MimeType,
DocumentMergeParams,
OutputFormat,
DocumentMergeJob,
DocumentMergeResult
} from "@adobe/pdfservices-node-sdk";
export default defineComponent({
props: {
adobe_document_generation_api: {
type: "app",
app: "adobe_document_generation_api",
}
},
async run({steps, $}) {
// Configuration constants
const PDF_SERVICES_CLIENT_ID = this.adobe_document_generation_api.$auth.client_id;
const PDF_SERVICES_CLIENT_SECRET = this.adobe_document_generation_api.$auth.client_secret;
try {
// Initial setup, create credentials instance
const credentials = new ServicePrincipalCredentials({
clientId: PDF_SERVICES_CLIENT_ID,
clientSecret: PDF_SERVICES_CLIENT_SECRET
});
// Creates a PDF Services instance
const pdfServices = new PDFServices({ credentials });
// Creates an asset(s) from source file(s) and upload
const response = await axios.get("https://developer.adobe.com/document-services/docs/receiptTemplate.docx", { responseType: 'stream' });
const readStream = response.data;
const inputAsset = await pdfServices.upload({
readStream,
mimeType: MimeType.DOCX
});
// Setup input data for the document merge process
const jsonDataForMerge = {
"author": "Gary Lee",
"Company": {
"Name": "Projected",
"Address": "19718 Mandrake Way",
"PhoneNumber": "+1-100000098"
},
"Invoice": {
"Date": "January 15, 2021",
"Number": 123,
"Items": [
{
"item": "Gloves",
"description": "Microwave gloves",
"UnitPrice": 5,
"Quantity": 2,
"Total": 10
},
{
"item": "Bowls",
"description": "Microwave bowls",
"UnitPrice": 10,
"Quantity": 2,
"Total": 20
}
]
},
"Customer": {
"Name": "Collins Candy",
"Address": "315 Dunning Way",
"PhoneNumber": "+1-200000046",
"Email": "cc@abcdef.co.dw"
},
"Tax": 5,
"Shipping": 5,
"clause": {
"overseas": "The shipment might take 5-10 more than informed."
},
"paymentMethod": "Cash"
};
// Create parameters for the job
const params = new DocumentMergeParams({
jsonDataForMerge,
outputFormat: OutputFormat.PDF
});
// Creates a new job instance
const job = new DocumentMergeJob({ inputAsset, params });
// Submit the job and get the job result
const pollingURL = await pdfServices.submit({ job });
const pdfServicesResponse = await pdfServices.getJobResult({
pollingURL,
resultType: DocumentMergeResult
});
// Get content from the resulting asset(s)
const resultAsset = pdfServicesResponse.result.asset;
const streamAsset = await pdfServices.getContent({ asset: resultAsset });
// Creates a write stream and copy stream asset's content to it
const outputFilePath = "/tmp/generatePDFOutput.pdf";
console.log(`Saving asset at ${outputFilePath}`);
return new Promise((resolve, reject) => {
const writeStream = fs.createWriteStream(outputFilePath);
streamAsset.readStream.pipe(writeStream);
writeStream.on('finish', () => resolve(outputFilePath));
writeStream.on('error', reject);
});
} catch(err) {
console.error('Error generating PDF:', err);
throw err;
}
},
})
The MongoDB API provides powerful capabilities to interact with a MongoDB database, allowing you to perform CRUD (Create, Read, Update, Delete) operations, manage databases, and execute sophisticated queries. With Pipedream, you can harness these abilities to automate tasks, sync data across various apps, and react to events in real-time. It’s a combo that’s particularly potent for managing data workflows, syncing application states, or triggering actions based on changes to your data.
import mongodb from 'mongodb'
export default defineComponent({
props: {
mongodb: {
type: "app",
app: "mongodb",
},
collection: {
type: "string"
},
filter: {
type: "object"
}
},
async run({steps, $}) {
const MongoClient = mongodb.MongoClient
const {
database,
hostname,
username,
password,
} = this.mongodb.$auth
const url = `mongodb+srv://${username}:${password}@${hostname}/test?retryWrites=true&w=majority`
const client = await MongoClient.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true
})
const db = client.db(database)
const results = await db.collection(this.collection).find(this.filter).toArray();
$.export('results', results);
await client.close()
},
})