文件Acrobat Services

處理發票

Last update: Mon May 05 2025 00:00:00 GMT+0000 (Coordinated Universal Time)
  • 主題:

建立對象:

  • 中繼
  • 開發人員

使用案例主打橫幅

當業務蓬勃發展,但是在準備所有發票時,生產效率卻下降,這很好。 手動產生發票非常耗時,而且您還可能會面臨錯誤、可能損失金錢或以錯誤金額憤怒客戶的風險。

例如,Danielle 在一家醫療供應公司的🔗會計部門🔗工作。這是月底,因此她從多個不同的系統中提取資訊,再次檢查資訊的準確性,並設定發票格式。 在完成所有工作之後,她終於準備好將檔轉換為 PDF (如此一來,任何人都可以檢視檔而不購買特定軟體),並將他們的個人化發票傳送給每位客戶。

即使每月開信已完成,Danielle 也無法逸出這些發票。 有些客戶的帳單週期不是月,所以她總是為某人建立發票。 客戶有時會編輯發票並欠款。 Danielle 接著耗費時間疑難解答此發票不相匹配的問題。 在這個速率下,她需要聘雇助理來跟進所有工作!

Danielle 需要一種快速準確地產生發票的方法,無論是在月底批次開啟,或是在其他時間臨時取得。 理想情況下,若她能保護這些發票不受編輯影響,就不必擔心疑難解答不相匹配的金額。

您可以學習哪些內容

在此實作教學課程中,瞭解如何使用 Adobe 產生檔API自動產生發票、以密碼保護 PDF,以及向每位客戶傳送發票。 只需要對 Node.js、JavaScript、Express.js、HTML 和 CSS 略知一下。

GitHub🔗 提供此專案的完整程序代碼。您必須使用範本和 Raw 資料資料資料夾來設定公開目錄。 在生產中,您必須從外部API擷取數據。 您也可以探索這個應用程式的封存版本,其中包含範本資源。

相關 API 和資源

  • PDF 服務API

  • Adobe檔產生API

  • Adobe Sign API

  • 項目代碼

準備數據

本教學課程並未說明數據如何從數據倉儲匯入。 您的客戶訂單可能存在於資料庫、外部API或自定義軟體中。 Adobe產生文件API預期會有包含開票數據的 JSON 文件,例如來自您的 客戶關係管理 (CRM) 或電子商務平台的信息。 本教學課程假設數據已採用 JSON 格式。

如需簡化,請使用下列 JSON 結構開啟:

{
    "customerName": "John Doe",
    "customerEmail": "john-doe@example.com",
    "order": [
        {
            "productId": 26,
            "productTitle": "Bandages",
            "price": 15.82
        },
        {
            "productId": 54,
            "productTitle": "Masks",
            "price": 25
        },
        {
            "productId": 76,
            "productTitle": "Gloves",
            "price": 7.59
        }
    ]
}

JSON 檔包含客戶詳細數據和訂單資訊。 使用此結構化檔以建立發票並顯示 PDF 格式的元素。

建立發票範本

Adobe檔產生API預期會有Microsoft Word 型範本和 JSON 檔建立動態 PDF 或 Word 檔。 為開啟應用程式建立Microsoft Word 範本,並使用 免費的 Document Generation Tagger 載入巨集 來產生範本卷標。 安裝載入巨集,然後在 Microsoft Word 中開啟索引標籤。

檔世代Tagger載入巨集的螢幕擷圖

將 JSON 內容貼到載入巨集後(如上所示),請按下「產生標籤」。 現在,此增效模組會顯示物件的格式。 您的基本範本可以使用客戶名稱和電子郵件,但不會顯示訂單資訊。 此教學課程稍後會討論訂單資訊。

Document Generation Tagger Author 範本螢幕擷圖

在您的 Microsoft Word 檔內,開始撰寫發票範本。 離開您必須插入動態數據的游標,然後從Adobe載入巨集視窗中選取標籤。 按兩下 「插入文字 」,這樣Adobe文件產生Tagger載入巨集就可以產生和插入標籤。 若要進行個人化,讓我們插入客戶名稱和電子郵件。

現在,繼續處理每張新發票所變更的數據。 選取​ ​ ​載入巨集的「進階」索引標籤。若要查看根據客戶訂購的產品產生動態表格的可用選項,請按兩下「 表格和清單」 。

從第一個下拉式清單中選 取「順序 」。 在第二個下拉式清單中,選取此表格的欄。 在此教學課程中,選取物件演算表格的所有三欄。

「檔案世代Tagger進階」索引標籤的螢幕擷圖

文件產生API還可以執行複雜的作,例如將陣列內的元素彙集在一起。 在「進​ 階」標籤中,選​ 取「數字計算」,然後在「匯總​ 」索引標籤中,選取您要套用計算的欄位。

檔世代 Tagger 數字計算的螢幕擷圖

按下「 插入計算」 按鈕,在檔中需要的地方插入此標籤。 以下文字現在會出現在您的 Microsoft Word 檔案中:

Microsoft Word 檔中標籤的螢幕擷圖

此發票範例包含客戶資訊、訂購產品和到期金額總額。

使用 Adobe 產生檔API產生發票

使用 Adobe PDF Services Node.js 軟體開發工具包 (SDK) 來合併Microsoft Word 和 JSON 檔。 建立Node.js應用程式,以使用 Document Generation API 建立發票。

PDF Services API包含「文件產生服務」,因此您可以為兩者使用相同的認證。 享受六個月免費試用,然後每份檔交易只需支付 $0.05 美元。

以下是合併 PDF 的程式代碼:

async function compileDocFile(json, inputFile, outputPdf) {
    try {
        // configurations
        const credentials =  adobe.Credentials
            .serviceAccountCredentialsBuilder()
            .fromFile("./src/pdftools-api-credentials.json")
            .build();

        // Capture the credential from app and show create the context
        const executionContext = adobe.ExecutionContext.create(credentials);

        // create the operation
        const documentMerge = adobe.DocumentMerge,
            documentMergeOptions = documentMerge.options,
            options = new documentMergeOptions.DocumentMergeOptions(json, documentMergeOptions.OutputFormat.PDF);

        const operation = documentMerge.Operation.createNew(options);

        // Pass the content as input (stream)
        const input = adobe.FileRef.createFromLocalFile(inputFile);
        operation.setInput(input);

        // Async create the PDF
        let result = await operation.execute(executionContext);
        await result.saveAsFile(outputPdf);
    } catch (err) {
        console.log('Exception encountered while executing operation', err);
    }
}

此程式代碼會從輸入 JSON 檔和輸入範本檔案中取得資訊。 然後,建立文件合併作業,將檔案合併為單一 PDF 報告。 最後,它會使用您的API認證執行作。 如果您還沒有認證, 請建立認證 (文件產生和 PDF 服務API使用相同的認證)。

在 Express 路由器中使用此代碼來處理檔要求:

// Create one report and send it back
try {
    console.log(\`[INFO] generating the report...\`);
    const fileContent = fs.readFileSync(\`./public/documents/raw/\${vendor}\`,
    'utf-8');
    const parsedObject = JSON.parse(fileContent);

    await pdf.compileDocFile(parsedObject,
    \`./public/documents/template/Adobe-Invoice-Sample.docx\`,
    \`./public/documents/processed/output.pdf\`);

    await pdf.applyPassword("p@55w0rd", './public/documents/processed/output.pdf',
    './public/documents/processed/output-secured.pdf');

    console.log(\`[INFO] sending the report...\`);
    res.status(200).render("preview", { page: 'invoice', filename: 'output.pdf' });
} catch(error) {
    console.log(\`[ERROR] \${JSON.stringify(error)}\`);
    res.status(500).render("crash", { error: error });
}

一旦執行此代碼,它將根據提供的數據提供包含動態產生發票的 PDF 檔。 透過範例 JSON 資料 (如上所述),此程式代碼的輸出為:

動態產生的 PDF 發票螢幕擷圖

此發票內含 JSON 檔的動態數據。

保護密碼的發票

Danielle 擔心客戶改變發票,請套用密碼來限制編輯。 PDF 服務API 可自動為檔套用密碼。 在這裡,您可以使用 Adobe PDF Services SDK 以密碼保護檔。 程式代碼為:

async function applyPassword(password, inputFile, outputFile) {
    try {
        // Initial setup, create credentials instance.
        const credentials = adobe.Credentials
        .serviceAccountCredentialsBuilder()
        .fromFile("./src/pdftools-api-credentials.json")
        .build();

        // Create an ExecutionContext using credentials
        const executionContext = adobe.ExecutionContext.create(credentials);
        // Create new permissions instance and add the required permissions
        const protectPDF = adobe.ProtectPDF,
        protectPDFOptions = protectPDF.options;
        // Build ProtectPDF options by setting an Owner/Permissions Password, Permissions,
        // Encryption Algorithm (used for encrypting the PDF file) and specifying the type of content to encrypt.
        const options = new protectPDFOptions.PasswordProtectOptions.Builder()
        .setOwnerPassword(password)
        .setEncryptionAlgorithm(protectPDFOptions.EncryptionAlgorithm.AES_256)
        .build();

        // Create a new operation instance.
        const protectPDFOperation = protectPDF.Operation.createNew(options);

        // Set operation input from a source file.
        const input = adobe.FileRef.createFromLocalFile(inputFile);
        protectPDFOperation.setInput(input);

        // Execute the operation and Save the result to the specified location.
        let result = await protectPDFOperation.execute(executionContext);

        result.saveAsFile(outputFile);
    } catch (err) {
        console.log('Exception encountered while executing operation', err);
    }
}

當您使用此代碼時,它會以密碼保護您的檔,並將新發票上傳至系統。 如需如何使用或試用此程式代碼的詳細資訊,請參閱 程式碼範例。

一旦使用發票完成後,您可能會想要自動將發票寄給用戶端。 有幾種方法可以自動透過電子郵件寄送客戶電子郵件來完成工作。 最快速的方式是使用第三方電子郵件API以及 sendgrid-nodejs 等 輔助程序資料庫。 或者,如果您已經可以存取 SMTP 伺服器,則可以使用 節點郵件透過 SMTP 傳送電子郵件。

後續步驟

在此實作教學課程中,您建立了一個簡單應用程式,協助 Danielle 進行開信🔗處理。使用 PDF Services API 和 Document Generation SDK,您會用 JSON 檔中的客戶訂單資訊填入Microsoft Word 範本,建立 PDF 發票。 然後,使用 PDF Services 的密碼保護服務 API以密碼保護每份檔。

Danielle 可以自動產生發票,而且不必擔心客戶會編輯發票,她就不需要僱用助理來協助手動工作。 她可利用自己的額外時間,在帳戶中節省應付檔案的費用。

現在您已經看到它有多簡單,您可以使用其他Adobe工具,在您的網站上內嵌發票,展開這個簡單應用程式。 例如,因此客戶可以隨時檢視其發票或結餘。 Adobe PDF內嵌API 可供免費使用。 您甚至可以前往人力資源或銷售部門,協助自動化他們的合約並收集電子簽名。

若要探索所有的可能性,並開始建立您專屬的便利應用程式,請建立免費 Adobe Acrobat Services 帳戶立即開始使用。 享受六個月免費試用,然後 按即付費
業務規模化時,每份檔交易只要 $0.05。

recommendation-more-help
61c3404d-2baf-407c-beb9-87b95f86ccab