Konfigurera exempelprojektet manuellt
Om du väljer att inte hämta ett exempelprojekt från sidan Skapa nya autentiseringsuppgifter kan du också konfigurera projektet manuellt.
Hämta koden (utan dina inloggningsuppgifter inbäddade) från GitHub. Om du använder den här versionen av koden måste du lägga till dina inloggningsuppgifter i filen pdftools-api-credentials.json innan du använder den:
{
"client_credentials": {
"client_id": "<client_id>",
"client_secret": "<client_secret>"
},
"service_account_credentials": {
"organization_id": "<organization_id>",
"account_id": "<technical_account_id>",
"private_key_file": "<private_key_file_path>"
}
}
För ditt eget program måste du kopiera filen med den privata nyckeln och inloggningsuppgifterna till programkällan.
Du måste installera Node.js-paketet för Acrobat Services. Installera paketet med följande kommando:
npm install --save @adobe/documentservices-pdftools-node-sdk
Konfigurera loggning
I exemplen här används Express för applikationsramverket. De använder också log4js för programloggning. Med log4js kan du enkelt dirigera loggning till konsolen eller ut till en fil:
const log4js = require('log4js');
const logger = log4js.getLogger();
log4js.configure( {
appenders: { fileAppender: { type:'file', filename: './logs/applicationlog.txt'}},
categories: { default: {appenders: ['fileAppender'], level:'info'}}
});
logger.level = 'info';
logger.info('Application started')
Ovanstående kod skriver loggdata till en fil i ./logs/applicationlog.txt. Om du vill att den ska skriva till konsolen i stället, kan du kommentera samtalet till log4js.configure.
Konvertera Word-filer till PDF
Avtal och förslag skrivs ofta i ett produktivitetsprogram, som Microsoft Word. Om du vill godkänna dokument i det här formatet och konvertera dokumentet till PDF kan du lägga till funktioner för programmet. Låt oss titta på hur du överför och sparar ett dokument i ett Express-program och sparar det i filsystemet.
Lägg till ett filelement och en knapp för att starta överföringen i programmets HTML:
<input type="file" name="source" id="source" />
<button onclick="upload()" >Upload</button>
Överför filen asynkront med hjälp av funktionen fetch i sidans JavaScript:
function upload()
{
let formData = new FormData();
var selectedFile = document.getElementById('source').files[0];
formData.append("source", selectedFile);
fetch('documentUpload', {method:"POST", body:formData});
}
Välj en mapp för att acceptera dina överförda filer. Programmet behöver en sökväg till den här mappen. Sök efter den absoluta sökvägen med hjälp av en relativ sökväg som har kopplats till __dirname:
const uploadFolder = path.join(__dirname, "../uploads");
Eftersom filen skickas via post måste du svara på ett post-meddelande på serversidan:
router.post('/', (req, res, next) => {
console.log('uploading')
if(!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send('No files were uploaded');
}
const uploadPath = path.join(uploadFolder, req.files.source.name);
var buffer = req.files.source.data;
var result = {"success":true};
fs.writeFile(uploadPath, buffer, 'binary', (err)=> {
if(err) {
result.success = false;
}
res.json(result);
});
});
När den här funktionen har körts sparas filen i programmappen för överföring och är tillgänglig för vidare bearbetning.
Konvertera sedan filen från dess ursprungliga format till PDF. Exempelkoden du hämtade tidigare innehåller ett skript med namnet create-pdf-from-docx.js
för att konvertera ett dokument till PDF. Följande funktion, convertDocumentToPDF
, tar ett uppladdat dokument och konverterar det till en PDF i en annan mapp:
function convertDocumentToPDF(sourcePath, destinationPath)
{
try {
const credentials = PDFToolsSDK.Credentials
.serviceAccountCredentialsBuilder()
.fromFile("pdftools-api-credentials.json")
.build();
const executionContext =
PDFToolsSDK.ExecutionContext.create(credentials),
createPdfOperation = PDFToolsSDK.CreatePDF.Operation.createNew();
const docxReadableStream = fs.createReadStream(sourcePath);
const input = PDFToolsSDK.FileRef.createFromStream(
docxReadableStream,
PDFToolsSDK.CreatePDF.SupportedSourceFormat.docx);
createPdfOperation.setInput(input);
createPdfOperation.execute(executionContext)
.then(result => result.saveAsFile(destinationPath))
.catch(err => {
logger.erorr('Exception encountered while executing operation');
})
}
catch(err) {
logger.error(err);
}
}
Du kan märka ett allmänt mönster med koden:
Koden bygger ett referensobjekt och en körningskontext, initierar en åtgärd och utför sedan åtgärden med körningskontexten. Du kan se det här mönstret genom hela exempelkoden.
Genom att göra några tillägg till uppladdningsfunktionen så att den anropar den här funktionen, konverteras nu Word-dokument som användare laddar upp automatiskt till PDF.
I följande kod skapas målsökvägen för det konverterade PDF och konverteringen initieras:
const documentFolder = path.join(__dirname, "../docs");
var extPosition = req.files.source.name.lastIndexOf('.') - 1;
if(extPosition < 0 ) {
extPosition = req.files.source.name.length
}
const destinationName = path.join(documentFolder,
req.files.source.name.substring(0, extPosition) + '.pdf');
console.log(destinationName);
logger.info('converting to ${destinationName}')
convertDocumentToPDF(uploadPath, destinationName);
Konvertera andra filtyper till PDF
Verktyget för dokument konverterar andra format till PDF, som statiska HTML, en annan vanlig dokumenttyp. Verktyget tar emot HTML-dokument som paketerats som en .zip-fil med alla resurser som dokumentet refererar till (CSS-filer, bilder och andra filer) i samma .zip-fil. Själva HTML-dokumentet måste heta index.html och placeras i roten för .zip-filen.
Om du vill konvertera en .zip-fil som innehåller HTML använder du följande kod:
//Create an HTML to PDF operation and provide the source file to it
htmlToPDFOperation = PDFToolsSdk.CreatePDF.Operation.createNew();
const input = PDFToolsSdk.FileRef.createFromLocalFile(sourceZipFile);
htmlToPDFOperation.setInput(input);
// custom function for setting options
setCustomOptions(htmlToPDFOperation);
// Execute the operation and Save the result to the specified location.
htmlToPDFOperation.execute(executionContext)
.then(result => result.saveAsFile(destinationPdfFile))
.catch(err => {
logger.error('Exception encountered while executing operation');
});
Funktionen setCustomOptions
anger andra PDF-inställningar, t.ex. sidstorlek. Här kan du se funktionen ställer in sidstorleken till 11,5 x 11 tum:
const setCustomOptions = (htmlToPDFOperation) => {
const pageLayout = new PDFToolsSdk.CreatePDF.options.PageLayout();
pageLayout.setPageSize(11.5, 8);
const htmlToPdfOptions =
new PDFToolsSdk.CreatePDF.options.html.CreatePDFFromHtmlOptions.Builder()
.includesHeaderFooter(true)
.withPageLayout(pageLayout)
.build();
htmlToPDFOperation.setOptions(htmlToPdfOptions);
};
När du öppnar ett HTML-dokument som innehåller vissa villkor visas följande i webbläsaren:
Dokumentets ursprung består av en CSS-fil och en HTML-fil:
När du har bearbetat HTML-filen får du samma text i PDF-format:
Lägga till sidor
En annan vanlig åtgärd med PDF-filer är att lägga till sidor i slutet som kan ha standardtext, till exempel en lista med termer. Document Toolkit kan kombinera flera PDF-dokument till ett enda dokument. Om du har en lista med dokumentsökvägar (här i sourceFileList
) kan du lägga till varje fils filreferenser till ett objekt för en kombinationsåtgärd.
När kombinationsåtgärden utförs tillhandahålls en enda fil med av källinnehållet. Du kan använda saveAsFile
på objektet för att behålla filen i lagringen.
const executionContext = PDFToolsSDK.ExecutionContext.create(credentials);
var combineOperation = PDFToolsSDK.CombineFiles.Operation.createNew();
sourceFileList.forEach(f => {
var combinedSource = PDFToolsSDK.FileRef.createFromLocalFile(f);
console.log(f);
combineOperation.addInput(combinedSource);
});
combineOperation.execute(executionContext)
.then(result=>result.saveAsFile(destinationFile))
.catch(err => {
logger.error(err.message);
});
Visa PDF-dokument
Du har utfört flera åtgärder på PDF-filer, men i slutändan måste användaren visa dokumenten. Du kan bädda in dokumentet i en webbsida med hjälp av Adobe PDF Embed API.
Lägg till ett <div />
-element för dokumentet på sidan som visar PDF och ge det ett ID. Du använder detta ID inom kort. Inkludera en <script />
-referens till JavaScript-biblioteket i Adobe på webbsidan:
<script src="https://documentcloud.adobe.com/view-sdk/main.js"></script>
Den sista kodbiten du behöver är en funktion som visar dokumentet när Adobe PDF Embed API JavaScript har lästs in. Skapa ett nytt AdobeDC.View-objekt när du får ett meddelande om att skriptet har lästs in via en händelse av typen adobe_dc_view_sdk.ready. Ditt klient-ID och ID för elementet som skapades tidigare behövs för det här objektet. Hitta ditt klient-ID i Adobe Developer Console. När du visar inställningarna för programmet som du skapade när du skapade autentiseringsuppgifter tidigare visas klient-ID:t där.