When a PDF document is dynamically created from an application, all the pages are kept in memory until the document is saved and destroyed. This can create a performance problem if the document that is created is very large and/or contains a large number of images.
A more efficient way to create large documents is to use the SavePage/ClearPage combination of calls to keep only one page in memory. The steps required to achieve this are the following:
Create a blank document.
Call StartSave (FileName, acFileSaveView) to create the file on the storage device.
Insert objects into the first page, example text, images and graphics.
Once the first page is constructed, call SavePage to save the current page.
Call ClearPage to remove the page contents from memory.
If the document contains bookmarks, call AddPage to add a new page to the document, otherwise construct the next page without adding a new page.
Repeat steps 3 to 6 for all the pages in the document.
Call EndSave to close the file.
Step 6 that consists of adding a new page is optional and is only needed if the bookmarks will be created after the document is finished. This step is needed so that the PDF Creator knows where to point the bookmarks to.
Only the acFileSaveView option of FileSaveOptionConstants in the StartSave method is supported.
Sub Sample() ' Constants for Activation codes Const strLicenseTo As String = "Amyuni PDF Creator Evaluation" Const strActivationCode As String = "07EFCDAB010001004282943F2AF19A88F332D9E781E40460727DF8A42847A1BDE06DB61C71E94E2D90424BF8762385335F9D6884E9FC" ' Initializing PDFCreativeX Object Dim pdf As ACPDFCREACTIVEX.PDFCreactiveX = New ACPDFCREACTIVEX.PDFCreactiveX() ' Set license key pdf.SetLicenseKey(strLicenseTo, strActivationCode) ' Save PDF using StartSave, SavePage and EndSave pdf.StartSave("c:\temp\CreatePDFDocument_resulting.pdf", ACPDFCREACTIVEX.FileSaveOptionConstants.acFileSaveView) ' Create object in each Page For page = 1 To 60 ' Set the current page only if we are adding new pages pdf.CurrentPage = page ' Create a Text in the current Page pdf.CreateObject(ACPDFCREACTIVEX.ObjectTypeConstants.acObjectTypeText, "Text" + page.ToString) Dim oText As ACPDFCREACTIVEX.IacObject = pdf.GetObjectByName("Text" + page.ToString) oText("Left") = 1000 oText("Right") = 5000 oText("Top") = 0 oText("Bottom") = 4000 oText("BorderColor") = &HFF00FF oText("BorderWidth") = ACPDFCREACTIVEX.acBorderWidth.acBorderWidthDouble oText("Text") = "Amyuni Technologies " + page.ToString ' insert a bookmark that points to this page pdf.RootBookmark.InsertChild(page, "Page " + page.ToString, "Text" + page.ToString, Nothing) ' Save page pdf.SavePage(page) ' clear the page contents to save memory pdf.ClearPage(page) ' Add page, because we are adding BookMarks. Otherwise, it is not necessary pdf.AddPage(page) Next pdf.EndSave() ' destroy objects pdf = Nothing End Sub
static void Sample() { // Constants for Activation codes const string strLicenseTo = "Amyuni PDF Creator Evaluation"; const string strActivationCode = "07EFCDAB010001004282943F2AF19A88F332D9E781E40460727DF8A42847A1BDE06DB61C71E94E2D90424BF8762385335F9D6884E9FC"; // Initializing PDFCreativeX Object ACPDFCREACTIVEX.PDFCreactiveX pdf = new ACPDFCREACTIVEX.PDFCreactiveX(); // Set license key pdf.SetLicenseKey(strLicenseTo, strActivationCode); // Save PDF using StartSave, SavePage and EndSave pdf.StartSave(@"c:\temp\CreatePDFDocument_resulting.pdf", ACPDFCREACTIVEX.FileSaveOptionConstants.acFileSaveView); // Create object in each Page for (int page = 1; page < 61; page++) { // Set the current page only if we are adding new pages pdf.CurrentPage = page; // Create a Text in the current Page pdf.CreateObject(ACPDFCREACTIVEX.ObjectTypeConstants.acObjectTypeText, "Text" + page.ToString()); ACPDFCREACTIVEX.IacObject oText = pdf.GetObjectByName("Text" + page.ToString()); oText["Left"] = 1000; oText["Right"] = 5000; oText["Top"] = 0; oText["Bottom"] = 4000; oText["BorderColor"] = 0xFF00FF; oText["BorderWidth"] = ACPDFCREACTIVEX.acBorderWidth.acBorderWidthDouble; oText["Text"] = "Amyuni Technologies " + page.ToString(); // insert a bookmark that points to this page ACPDFCREACTIVEX.acBookmark bookmark; pdf.RootBookmark.InsertChild(page, "Page " + page.ToString(), "Text" + page.ToString(), out bookmark); // Save page pdf.SavePage(page); // clear the page contents to save memory pdf.ClearPage(page); // Add page, because we are adding BookMarks. Otherwise, it is not necessary pdf.AddPage(page); } pdf.EndSave(); // destroy objects pdf = null; }
#import "c:\users\amyuni\pdfcreactivex.dll" no_namespace using namespace std; int main() { // Constants for Activation codes bstr_t strLicenseTo = "Amyuni PDF Creator Evaluation"; bstr_t strActivationCode = "07EFCDAB010001004282943F2AF19A88F332D9E781E40460727DF8A42847A1BDE06DB61C71E94E2D90424BF8762385335F9D6884E9FC"; // Initialize the COM subsystem CoInitialize(0); // IPDFCreactiveXPtr is a smart pointer type defined in pdfcreactivex.tlh, // the type library header file generated by the #import instruction above IPDFCreactiveXPtr pdf; // Create the PDFCreactiveX instance pdf.CreateInstance(__uuidof(PDFCreactiveX)); // set license key pdf->SetLicenseKey(_bstr_t(strLicenseTo), _bstr_t(strActivationCode)); // ' Save PDF using StartSave, SavePage and EndSave pdf->StartSave("c:\\temp\\CreatePDFDocument_resulting.pdf", FileSaveOptionConstants::acFileSaveView); // Create object in each Page for (int page = 1; page < 60; page++) { // Set the current page only if we are adding new pages pdf->CurrentPage = page; // Set-up variables for attributes _variant_t varAttribute; varAttribute.vt = VT_I4; // integers // Create a text in the current Page pdf->CreateObject(acObjectTypeText, "Text" + bstr_t(page)); IacObjectPtr oText = pdf->GetObjectByName("Text" + bstr_t(page)); oText->Attribute["Left"] = 1000; oText->Attribute["Right"] = 5000; oText->Attribute["Top"] = 0; oText->Attribute["Bottom"] = 4000; varAttribute.lVal = 0xFF00FF; oText->Attribute["BorderColor"] = varAttribute; varAttribute.lVal = acBorderWidthDouble; oText->Attribute["BorderWidth"] = varAttribute; oText->Attribute["Text"] = "Amyuni Technologies" + bstr_t(page); // insert a bookmark that points to this page IacBookmarkPtr bookmark; pdf->RootBookmark->InsertChild(page, _bstr_t(page), "Text1", &bookmark); // Save page pdf->SavePage(page); // clear the page contents to save memory pdf->ClearPage(page); // Add page, because we are adding BookMarks. Otherwise, it is not necessary pdf->AddPage(page); } pdf->EndSave(); // destroy objects pdf = NULL; return 0; }
' ObjectTypeConstants Const acObjectTypeArrow = 36 Const acObjectTypeBarcode = 45 Const acObjectTypeCell = 33 Const acObjectTypeCheckBox = 21 Const acObjectTypeEllipse = 4 Const acObjectTypeExcel = 17 Const acObjectTypeField = 6 Const acObjectTypeGraph = 19 Const acObjectTypeHighlight = 23 Const acObjectTypeLine = 1 Const acObjectTypePicture = 7 Const acObjectTypePolygon = 8 Const acObjectTypeRoundFrame = 3 Const acObjectTypeRow = 32 Const acObjectTypeSelection = 24 Const acObjectTypeSignature = 39 Const acObjectTypeStickyNote = 22 Const acObjectTypeTable = 16 Const acObjectTypeText = 5 ' acBorderWidth Const acBorderWidthNone = 0 Const acBorderWidthSimple = 1 Const acBorderWidthDouble = 2 Const acBorderWidthTriple = 3 Const acBorderWidthQuadruple = 4 ' FileSaveOptionConstants Const acFileSaveAll = 0 Const acFileSaveDefault = -1 Const acFileSaveView = 1 Const acFileSaveDesign = 2 Const acFileSavePDFA_7 = 3 Const acFileSavePDFA = 4 Const acFileSavePDF14 = 5 ' Constants for Activation codes Const strLicenseTo = "Amyuni PDF Creator Evaluation" Const strActivationCode = "07EFCDAB010001004282943F2AF19A88F332D9E781E40460727DF8A42847A1BDE06DB61C71E94E2D90424BF8762385335F9D6884E9FC" ' Initializing PDFCreativeX Object Dim pdf Set pdf = CreateObject("PDFCreactiveX.PDFCreactiveX.6.5") ' Set license key pdf.SetLicenseKey strLicenseTo, strActivationCode ' Save PDF using StartSave, SavePage and EndSave pdf.StartSave "c:\temp\CreatePDFDocument_resulting.pdf", acFileSaveView ' Create object in each Page For page = 1 To 60 ' Set the current page pdf.CurrentPage = page ' Create a Text in the current Page pdf.CreateObject acObjectTypeText, "Text" & page Dim oText Set oText = pdf.GetObjectByName("Text" & page) oText("Left") = 1000 oText("Right") = 5000 oText("Top") = 0 oText("Bottom") = 4000 oText("BorderColor") = &HFF00FF oText("BorderWidth") = acBorderWidthDouble oText("Text") = "Amyuni Technologies" & page ' insert a bookmark that points to this page pdf.RootBookmark.InsertChild page, "Page " & page, "Text" & page, Nothing ' Save page pdf.SavePage page ' clear the page contents to save memory pdf.ClearPage page ' Add page, because we are adding BookMarks. Otherwise, it is not necessary pdf.AddPage page Next pdf.EndSave ' destroy Objects Set pdf = Nothing Set oText = Nothing