Sample code for 30+ languages & platforms
Perl

Extract PDF from General Ledger Transactions XML

See more Office365 Examples

Demonstrates how to extract the base64 data representing a PDF file from a General Ledger Transactions XML.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

# The General Ledger Transactions XML contains the following:

# <?xml version="1.0" encoding="utf-8" ?>
# <eExact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="eExact-XML.xsd">
#     <GLTransactions>
#         <GLTransaction entry="100000095">
#             <TransactionType number="20" />
#             <Journal type="20" code="VK">
#                 <Description termid="90003">Verkopen</Description>
#                 <GLAccount type="20" code="400000" />
#                 <Currency code="EUR" />
#             </Journal>
#             <Date>2022-04-05</Date>
#             <Document>
#                 <Subject>100000095</Subject>
#                 <DocumentType number="10" />
#                 <Account code="0001" status="C" />
#                 <Amount>
#                     <Currency code="EUR" />
#                     <Value>1382.91</Value>
#                 </Amount>
#                 <References>
#                     <InvoiceNumber>100000095</InvoiceNumber>
#                 </References>
#                 <Attachments>
#                     <Attachment>
#                         <Name>F_100000095.PDF</Name>
#                         <BinaryData>BASE64_ENCODED_PDF_BYTES_HERE</BinaryData>
#                     </Attachment>
#                 </Attachments>
#             </Document>
#             <GLTransactionLine type="20" status="20" line="0" linetype="0">
#                 <Date>2022-04-05</Date>
#                 <VATType>S</VATType>
#                 <FinYear number="2022" />
#                 <FinPeriod number="4" />
#                 <GLAccount type="20" code="400000" />
#                 <Description>100000095</Description>
#                 <DueDate>2022-05-05</DueDate>
#                 <Account code="0001" status="C">
#                     <Name>90 Degrees &amp; co</Name>
#                 </Account>
#                 <Amount>
#                     <Currency code="EUR" />
#                     <Value>1382.91</Value>
#                 </Amount>
#                 <ForeignAmount>
#                     <Currency code="EUR" />
#                     <Value>1382.91</Value>
#                     <Rate>1</Rate>
#                 </ForeignAmount>
#                 <References>
#                     <InvoiceNumber>100000095</InvoiceNumber>
#                 </References>
#             </GLTransactionLine>
#             <PaymentTerms>
#                 <PaymentTerm entry="100000095" type="20" line="0" paymentMethod="B">
#                     <Description>20</Description>
#                     <GLAccount type="20" code="400000" />
#                     <Amount>
#                         <Currency code="EUR" />
#                         <Debit>1382.91</Debit>
#                         <Credit>0</Credit>
#                     </Amount>
#                     <ForeignAmount>
#                         <Currency code="EUR" />
#                         <Debit>1382.91</Debit>
#                         <Credit>0</Credit>
#                     </ForeignAmount>
#                     <Reference />
#                     <YourRef />
#                     <InvoiceNumber>100000095</InvoiceNumber>
#                     <InvoiceDate>2022-04-05</InvoiceDate>
#                     <DueDate>2022-05-05</DueDate>
#                     <PaymentDate>2022-05-05</PaymentDate>
#                 </PaymentTerm>
#             </PaymentTerms>
#         </GLTransaction>
#     </GLTransactions>
# </eExact>

$xml = chilkat::CkXml->new();

$success = $xml->LoadXmlFile("c:/temp/example.xml");
if ($success == 0) {
    print $xml->lastErrorText() . "\r\n";
    exit;
}

$pdfFilename = $xml->getChildContent("GLTransactions|GLTransaction|Document|Attachments|Attachment|Name");
if ($xml->get_LastMethodSuccess() == 0) {
    print "No XML element at the given path." . "\r\n";
    exit;
}

print "PDF Filename = " . $pdfFilename . "\r\n";

# binaryDataElem is a Xml
$binaryDataElem = $xml->GetChildWithTag("GLTransactions|GLTransaction|Document|Attachments|Attachment|BinaryData");
if ($xml->get_LastMethodSuccess() == 0) {
    print "No XML element at the given path." . "\r\n";
    exit;
}

# Decode the base64 data and save to a file.
$success = $binaryDataElem->SaveBinaryContent($pdfFilename,0,0,"");
if ($success == 0) {
    print $binaryDataElem->lastErrorText() . "\r\n";
}
else {
    print "Success." . "\r\n";
}