how to disable save option in pdf using c# : Remove pdf metadata Library software component asp.net winforms azure mvc Zetadocs_installation_guide8-part1032

Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 81 
<EnableBarcodeDetection>true</EnableBarcodeDetection> 
</Config> 
Accessing the extracted text file from NAV 
Once you have enabled the text extraction in the Zetadocs Server you will need to implement parsing of the 
text file in NAV. This is done using the Zetadocs Capture Customize codeunit. 
In the Zetadocs- Capture Customize codeunit trigger GetAutoLink() the path to the control file for queue 
items is available as the ZdControlFile :Text[250] parameter. Using this you can call a Zetadocs Utilities 
function to return the associated extracted text file path for that item. 
textFilePath := ZdUtilities.GetExtractedTextFilePath(ZdControlFile); 
You can now implement your own functionality to parse the text file for expected text metadata which will 
help you to identify the document and its associated record in much the same manner as is described for 
the barcode recognition feature of Zetadocs for NAV. For more information, please see section 12. 
13.2
Approvals in NAV using Extracted Text 
Now that we have successfully identified and extracted the information we require we can put it to work in 
NAV, in this example we will be setting NAV so that it starts an approval process.  
In this example we will be looking at the following business process: 
Raise and send out a purchase order from NAV using Zetadocs 
Received by the vendor who will raise a sales order and send the goods.  
They will attach a shipment note to the delivery and also send a purchase order. 
These documents will be Captured into the relevant Zetadocs Document Queue either via scanning 
of hardcopies or processing of other documents by the Zetadocs Server. 
When the Purchase Invoice is Captured, Zetadocs extracts the text including the original purchase 
order number.  
When the Purchase Invoice is processed and added to the Zetadocs Archive this set in motion the 
approval process in NAV. 
The existing Document Queues as setup by default do not support the initialization of the approval process. 
As such we need to adjust the Zetadocs-Capture Customize codeunit so that it begins the approval process 
when an invoice is archived. 
Creating the IsValueInFile function 
Select the Zetadocs-Capture Customize codeunit in the object designer, and select Design. 
Select ViewC/AL Globals and choose the functions tab. 
Add the function IsValueInFile, details below. 
Name 
IsValueInFile ( Value, FilePath )  
Description 
Searches if a given Value  is present in the file pointed by FilePath 
Arguments 
Value     text[30]   
The value to search for 
FilePath text[1024] 
The associated text file to look in 
Returned value 
True  if the number is present 
False  if not 
Adding Code into the IsValueInFile function 
Now that we have added the function into the codeunit we need to add the following code, open the C/AL 
editor (F9) and paste in the code below into the IsValueInFile section. We recommend that you review this 
now to gain an understanding of how it operates, comments have been included throughout to explain the 
various sections. 
CODE: 
IsValueInFile(text[30] Value; text[1024] FilePath) 
// Set file to be opened in text mode and for reading only 
file.TEXTMODE(TRUE); 
Remove pdf metadata - add, remove, update PDF metadata in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Allow C# Developers to Read, Add, Edit, Update and Delete PDF Metadata
remove pdf metadata; read pdf metadata online
Remove pdf metadata - VB.NET PDF metadata library: add, remove, update PDF metadata in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Enable VB.NET Users to Read, Write, Edit, Delete and Update PDF Document Metadata
batch update pdf metadata; acrobat pdf additional metadata
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 82 
file.WRITEMODE(FALSE); 
// If we can't open the file, just return false as we cannot match a value 
IF NOT file.OPEN(FilePath) THEN 
BEGIN 
EXIT(FALSE); 
END; 
// Cycle through all lines in the file until we find te value we were    
// looking for or 
// we reach the end of the file 
REPEAT 
// Read each line at a time 
IF file.READ(line) <> 0 THEN 
BEGIN 
// Check if value appears anywhere in the line 
// NOTE: If values wrap over more than one line they will not be matched 
pos := STRPOS(line, Value); 
IF (pos <> 0) THEN 
BEGIN 
// We've found the value we were looking for, close the file and  
// return true 
file.CLOSE; 
EXIT(TRUE); 
END; 
END; 
UNTIL file.POS = file.LEN; // Check if we have reached the end of the file 
// We've reached the end of the file without finding the value we were  
//looking for 
// Close the file and return false 
file.CLOSE; 
EXIT(FALSE); 
Creating the GetMatchingPurchaseOrder function 
Next return to the functions tab, ViewC/AL Globals. 
Add the function GetMatchingPurchaseOrder, details below. 
Name 
GetMatchingPurchaseOrder (Orders, ZdControlFile) 
Description 
Searches through the ZdControlFile to find a matching Purchase Order 
Arguments 
Orders   record    List of opened purchase orders 
ZdControlFile  text[1024] 
The control file of the document queue item 
Returned value 
True  if the Order matches the DQF file 
False  if not 
Adding Code into the GetMatchingPurchaseOrder function 
Now that we have added the function into the codeunit we need to add the following code, open the C/AL 
editor (F9) and paste in the code below into the GetMatchingPurchaseOrder section. We have included 
comments throughout to explain the various sections. 
CODE: 
GetMatchingPurchaseOrder (Record Orders, Text[1024] ZdControlFile) 
// Clear any filters on the Orders record 
Orders.RESET; 
// Set range so we are only looking at orders 
Orders.SETRANGE(Orders."Document Type",Orders."Document Type"::Order); 
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Able to remove a single page from adobe PDF document in VB.NET. Ability to remove consecutive pages from PDF file in VB.NET. Enable
preview edit pdf metadata; change pdf metadata creation date
VB.NET PDF remove image library: remove, delete images from PDF in
Insert Image to PDF. Image: Remove Image from PDF Page. Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete
endnote pdf metadata; edit multiple pdf metadata
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 83 
// Make sure there are records to search through 
IF Orders.FIND('-') THEN 
BEGIN 
//Loop through records until we find a matching one or reach the end 
REPEAT 
// Check if the order number can be found in the file 
// NOTE: For this example we have changed the orders number  
//series so order numbers will look like: 
// "PO-00001" This should be unique in the file so we don't get  
//false matches 
IF IsValueInFile(  Orders."No.",  
ZdUtilities.GetExtractedTextFilePath(  
ZdControlFile)) THEN 
BEGIN 
// We've found the right purchase order so return true 
EXIT(TRUE); 
END; 
UNTIL Orders.NEXT = 0; 
END; 
// Reached the end of the orders without matching one, so return false 
EXIT(FALSE); 
Adjusting the GetAutoLink Function 
Now we have created and added code to our variables we need to adjust the GetAutoLink function. This is 
so it can look through all the Orders and find out if one of them matches up the Purchase Order number that 
is present in the associated file being archived. Scroll to the GetAutoLink section and add the code so that it 
surrounds the existing code as shown below. 
CODE: 
GetAutoLink  (…) 
ZdUtilities.Log(0, 'C9009964 - AutoLink'); 
CASE ZdArchiveContext."Zetadocs Doc. Queue No." OF  
'ZDQ0020','ZDQ0021':  
// Purchase Invoice and Purchase Receipt Document Queues 
BEGIN 
// Use the information in the control file to find a matching purchase order 
IF GetMatchingPurchaseOrder(Orders, ZdControlFile) THEN 
BEGIN 
// use a RecordRef to get the record id for the matching record 
RecRef.GETTABLE(Orders); 
ZdLinkResult."Record ID" := RecRef.RECORDID; 
ZdLinkResult.MODIFY; 
END; 
END 
ELSE 
BEGIN 
... 
<< EXISTING CODE HERE >> 
... 
END 
EXIT; 
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
console application. Able to remove a single page from PDF document. Ability to remove a range of pages from PDF file. Free trial package
clean pdf metadata; adding metadata to pdf
C# PDF Password Library: add, remove, edit PDF file password in C#
String outputFilePath = Program.RootPath + "\\" Remove.pdf"; // Remove password in the input file and output to a new file. int
pdf remove metadata; change pdf metadata
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 84 
Adjusting the PostArchive Function 
Next we need to add some extra code into the PostArchive function to send the Purchase Approval for a 
given item. Again this code needs to be pasted around the existing code. 
PostArchive (…) 
// Check if the archive was successful 
IF NOT ( ZdArchiveResult."Archive Document" AND  
ZdArchiveResult."Archive Succeeded") THEN 
BEGIN 
EXIT; 
END; 
// Check this is the purchase invoice document queue 
IF ZdArchiveContext."Zetadocs Doc. Queue No." = 'ZDQ0020' THEN 
BEGIN 
// Use a RecordRef to get values from the record 
IF NOT RecRef.GET(ZdArchiveResult."Record ID") THEN 
BEGIN 
// Could not get the record from the record id 
EXIT; 
END; 
// Get a fieldref to the document type field 
fRef := RecRef.FIELD(1); 
// Store the value as an integer so that we can compare it 
DocType := fRef.VALUE; 
// Check we have linked to an order 
IF (DocType <> PurchaseOrder."Document Type"::Order) THEN 
BEGIN 
// If it is not an order we cannot start approval, so exit 
EXIT; 
END; 
// Get a fieldref to the No. field 
fRef := RecRef.FIELD(3); 
// Store the order no 
OrderNo := fRef.VALUE; 
// Set range of the purchase order record so only looking at  
// orders 
PurchaseOrder.SETRANGE( "Document Type",   
PurchaseOrder."Document Type"::Order); 
// Set range so only looking at this specific order 
PurchaseOrder.SETRANGE("No.",OrderNo); 
// Check that an order exists in the range 
IF PurchaseOrder.FIND('-') THEN 
BEGIN 
// Call into approvals management codeunit to start the approval process 
IF ApprovalsMgmt.SendPurchaseApprovalRequest(PurchaseOrder) THEN; 
END; 
END; 
C# PDF bookmark Library: add, remove, update PDF bookmarks in C#.
Ability to remove and delete bookmark and outline from PDF document. Merge and split PDF file with bookmark. Save PDF file with bookmark open.
get pdf metadata; metadata in pdf documents
C# PDF remove image library: remove, delete images from PDF in C#.
Insert Image to PDF. Image: Remove Image from PDF Page. Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete
pdf xmp metadata viewer; edit pdf metadata
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 85 
... 
<< EXISTING CODE HERE >> 
... 
This should complete the setup required for the Purchase Invoices to generate an approval process, obviously 
the above example can be modified using different queue id’s to effect different queues and thus document 
types.  
C# TIFF: TIFF Metadata Editor, How to Write & Read TIFF Metadata
You can also update, remove, and add metadata. List<EXIFField> exifMetadata = collection.ExifFields; You can also update, remove, and add metadata.
edit pdf metadata online; remove metadata from pdf online
VB.NET PDF delete text library: delete, remove text from PDF file
projects. Basically, you can use robust APIs to select a PDF page, define the text character position, and remove it from PDF document.
view pdf metadata; batch pdf metadata
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 86 
Delivery Plus 
This following sections setup of the features provided as part of the Zetadocs for NAV 
Delivery Plus module. Users who wish to install and utilise these features will need to 
purchase the appropriate licence from Equisys. 
Chapters 
Zetadocs Delivery Plus  
Send Any Report 
Bespoke Contacts and Company Types 
Zetadocs-Send Customize codeunit 
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 87 
14.
Zetadocs Delivery Plus  
The Zetadocs for NAV Addin can be split into 2 main areas, data and processing. The installation guide dealt 
primarily with setting up the data that would determine our report formatting and send information when 
sent to the Zetadocs Client. We saw how reports could be grouped into Document Sets which share a 
common rule for formatting and archiving and we saw how rules can be stored which alter formatting and 
send information dependant on who we were sending to. It is assumed then that we have a good 
understanding of the information involved in sending a report using Zetadocs for NAV. In this architectural 
overview the process of collating the sending information, which we refer to as the “Send Results”, is 
explained. This includes a breakdown of the main processing areas and their use in integrating with NAV as 
well as an insight into the customization potential and extensibility of Zetadocs for NAV. 
14.1
Understanding the SDK Framework 
Before continuing it is recommended that you read the Zetadocs for NAV SDK Primer section of this 
document. 
The three elements to the Zetadocs for NAV Delivery Plus SDK are: 
1.
Interfaces 
NAV Reports  
o
Reports need to be modified to call the Zetadocs for NAV Core sending codeunits. 
Instructions on this are available in section 4.6 the Zetadocs Report Modification 
Tool.  
2.
Zetadocs Core Codeunits 
Zetadocs Send codeunit 
o
This codeunit provides functions that are called by the Interfaces.  
3.
Integration and Customization Codeunits   
Zetadocs Send Integration codeunit 
o
This codeunit provides functions called by the Zetadocs Core codeunits to 
integrate Zetadocs Delivery functionality into bespoke records or other areas of 
NAV beyond Sales and Purchase Order Processing 
Zetadocs Send Customize 
o
This codeunit has functions called by the Zetadocs Core codeunits to allow the 
developer to implement bespoke business logic and delivery and archive settings.  
14.2
Process Flow 
Now let’s look at the flow of data that occurs when sending a report. The following diagram helps to 
visualize the process and will aid us in discussing the relevant parts of the product. 
As you can see from the diagram it starts with a NAV report that has been modified for Zetadocs for NAV. A 
report is generally based on a set of records that are used to produce some report output, a document for 
each record. The records contain information that relates to a contact and possibly a company, to whom the 
report should be sent (i.e. the recipient). Sometimes that information can be a direct table reference to an 
existing table that represents a contact or company for example, or it may contain some other form of 
references which can be used to find the contact information from another source. This could be a look up 
table of some sort based on some bespoke logic. The Zetadocs Send Results Gen codeunit is the central 
processing controller and builds a runtime list of send results in a temporary table of type “Zetadocs Send 
Result” for each record in the report. 
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 88 
Zetadocs Send 
Integration
Zetadocs Send 
Customization
Codeunit
Zetadocs Send Codeunit
Initialize
Add Record
Process Records
Table
Temporary Table
NAV Report
Records
Zetadocs Settings 
Tables
1.
2.
3.
Data Query
Records 
(Filtered Table)
Integration 
Functions
Override & 
Metadata 
Functions
Notation
Private
Public
External Components
4.
NAV 
Figure 32 - Zetadocs for NAV Delivery Plus Architecture  
Interfacing with the Zetadocs Send Results Gen codeunit (1.) 
A report modified for Zetadocs for NAV will call the three trigger functions on the Zetadocs Send codeunit. 
Firstly, Initialize (1.) is called to set the report that is being printed. The initialization information allows us 
to determine what report settings, if any, have been specified (2.). After initialization we start to process 
individual record specifics. Each record reference is passed to the send results codeunit by calling 
AddRecord (1.). Each record is then processed to extract the contact information (3.). Depending on who the 
company is we may apply specific rules covering how the contact or the template is determined. Once all 
the records have been added Process Records (1.) is called to start finalizing the results. When all rules and 
settings have been applied the “Zetadocs Customize” codeunit is called to offer overriding of the result (4.) 
. Lastly, Zetadocs Send code will run to offer run-time user result override and error resolution dialogs.  
Querying the Zetadocs Settings (2.) 
Based on the ID of the report that is being printed we can determine what template and archiving settings 
to use for the report and potentially how to automatically find the company and contact references from the 
report records. Internally the Zetadocs Send Results Gen codeunit will query the Zetadocs Report Settings 
using the report ID. These settings control the flow of processing from this point on.  
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 89 
Figure 33 - Zetadocs Report Settings 
Resolving the Company and Contact Information (3.) 
This can happen in a number of ways depending on the Zetadocs Report Settings for that report. The report 
settings control whether the Zetadocs Send Results Gen codeunit can copy the company and contact 
references from a field in the record or whether it should call out to the “Zetadocs-Send Integration” 
codeunit for the information. It is in this public codeunit that a VAR will implement their custom integration 
code for their system. This is explained in more detail in a later section of this guide; however, this should 
highlight the main purpose of the Zetadocs-Send Integration codeunit and the Zetadocs Send Result table 
being public. It means that when we need to access data from typed NAV tables this code is exposed to the 
VAR developer to allow them to integrate or customize successfully. The private Zetadocs Send Results Gen 
codeunit only correlates and manages the data, unaware of its meaning (typelessly). 
Overriding in Customize Codeunit (4.) 
There is the ability to alter the Zetadocs Send Results record directly in this codeunit before continuing with 
sending of a report. Each send result is passed to this codeunit by calling OverrideSendResult internally in 
the Zetadocs Send Results Gen codeunit. This gives the VAR a great opportunity to implement customized 
business logic above that offered by Zetadocs for NAV. An example would be altering the recipient (contact) 
depending on the value of an order. The second potential customization is to add additional embedded 
commands for tailoring email messages using dynamic fields in Zetadocs Templates or adding extra 
metadata to be archived with the document.  
14.3
Summary 
Now that we have been introduced to the architectural overview of Zetadocs for NAV it should be easier for 
us to understand the sections which follow and begin to allow us to imagine the potential customizations 
and workflow that could be created with the Zetadocs for NAV Addin. 
Zetadocs for NAV Installation Guide 
This edition 23rd July 2013   © Copyright Equisys Ltd 2013   All trademarks acknowledged   All rights reserved 
Page 90 
15.
Send Any Report 
In the installation guide earlier we saw how to configure Zetadocs for NAV to send reports from the Sales 
Order and Purchasing processes. We edited the NAV reports for Zetadocs for NAV and set the report 
settings to point at the Customer or Vendor reference for that report and the respective Contact reference. 
With this information Zetadocs for NAV was able to extract the references and query the names, email 
addresses and fax addresses of the contact, as well as, cross reference the company (Customer or Vendor) 
reference with the associated Zetadocs Customer or Vendor rules tables to apply per company formatting 
and addressing logic. This however is not the limit of Zetadocs for NAV functionality. This principle of field 
reference and related information resolution can be applied to almost any report. In this section we will see 
how small changes in the report settings can control and alter the information used to address, format, 
send and archive a report using Zetadocs for NAV. 
15.1
Configured Send 
It should be clear by now from the installation guide that by setting the “Company Type Code”, “Company 
No. Field No.” and “Contact No. Field No.” fields in the Zetadocs Report Settings that you can configure 
Zetadocs for NAV to automatically resolve your contact information and apply company specific rules if they 
exist. In this way it is possible to reference any fields which contain the right type of reference (i.e. 
customer/vendor or contact etc). There is some logic to the application of these settings that is important to 
know to help decide what settings to enter but it also gives the opportunity for some variations in 
configuration. 
Zetadocs Report Settings Field No.’s Reference Logic (Pseudo Code) 
IF Company Type Code <> NULL THEN 
IF Company No. Field No. <> NULL THEN 
Get the Company No. from Record using Field No. 
ELSE  
CALL Integration codeunit GetCompanyForReport for VAR to get Company No. 
END 
END 
Send Result.VALIDATE(Company No., Company No. Value) 
IF Contact No. Field No. <> NULL THEN 
Get the Contact No. from Record using Field No. 
ELSE  
CALL Integration codeunit GetContactForReport for VAR to get Contact No. 
END 
Send Result.VALIDATE(Contact No., Contact No. Value) 
From this it is important to notice the order that validation happens in as this coordinates with the Zetadocs 
Send Result table OnValidate trigger code for “Company No.” and “Contact No.”. Since the company 
information is validated first no contact reference will be set yet. We can check for this and default to using 
the company’s communication information, later when the contact reference is validated we can override 
the addressing information (email, fax). This provides the fallback addressing logic of Zetadocs for NAV so 
that if a record has a blank reference for a contact we will still end up with the company correspondence 
information. This means that we can deliberately control what information is used by altering the settings. It 
also means that this behavior can be customized by the VAR by implementing the get trigger functions in 
the Zetadocs-Send Integration codeunit and/or changing the OnValidate triggers in the Zetadocs Send 
Result table. 
Company Type Code 
Company No. Field No. 
Contact No. Field No. 
Resulting Addressing 
Info Used 
SET 
SET  
SET 
Contact Info unless the 
reference in record is 
blank THEN Company 
Documents you may be interested
Documents you may be interested