} $in1_doc->Save($output_path . "newsletter_page_insert.pdf", 0); echo nl2br("Done. Result saved in newsletter_page_insert.pdf...\n"); //Close the open document to free up document memory sooner than waiting for the //garbage collector $in1_doc->Close(); $in2_doc->Close(); // Sample 5 - Replicate pages within a single document echo nl2br("_______________________________________________\n"); echo nl2br("Sample 5 - Replicate pages within a single document...\n"); echo nl2br("Opening the input pdf...\n"); $doc = new PDFDoc($input_path . "newsletter.pdf"); $doc->InitSecurityHandler(); // Replicate the cover page three times (copy page #1 and place it before the // seventh page in the document page sequence) $cover = $doc->GetPage(1); $p7 = $doc->GetPageIterator(7); $doc->PageInsert($p7, $cover); $doc->PageInsert($p7, $cover); $doc->PageInsert($p7, $cover); // Replicate the cover page two more times by placing it before and after // existing pages. $doc->PagePushFront($cover); $doc->PagePushBack($cover); $doc->Save($output_path . "newsletter_page_clone.pdf", 0); echo nl2br("Done. Result saved in newsletter_page_clone.pdf...\n"); $doc->Close(); // Sample 6 - Use ImportPages() in order to copy multiple pages at once // in order to preserve shared resources between pages (e.g. images, fonts, // colorspaces, etc.) echo nl2br("_______________________________________________\n");
$zoom_rect = new Rect(216.0, 522.0, 330.0, 600.0); $page->SetCropBox($zoom_rect); // Set the page crop box. // Select the crop region to be used for drawing. $draw->SetPageBox(Page::e_crop); $draw->SetDPI(900); // Set the output image resolution to 900 DPI. $draw->Export($page, $output_path . "tiger_zoom_900dpi.png", "PNG"); echo nl2br("Example 5: " . $output_path . "tiger_zoom_900dpi.png. Done.\n"); $draw->SetImageSize(50, 50); // Set the thumbnail to be 50x50 pixel image. $draw->Export($page, $output_path . "tiger_zoom_50x50.png", "PNG"); echo nl2br("Example 5: " . $output_path . "tiger_zoom_50x50.png. Done.\n"); $cmyk_hint = $hint_set->CreateDict(); $cmyk_hint->PutName("ColorSpace", "CMYK"); //-------------------------------------------------------------------------------- // Example 6) Convert the first PDF page to CMYK TIFF at 92 DPI. // A three step tutorial to convert PDF page to an image echo nl2br("Example 6:\n"); // A) Open the PDF document. $doc = new PDFDoc($input_path . "tiger.pdf"); // Initialize the security handler, in case the PDF is encrypted. $doc->InitSecurityHandler(); // B) The output resolution is set to 92 DPI. $draw->SetDPI(92); // C) Rasterize the first page in the document and save the result as TIFF. $pg = $doc->GetPage(1); $draw->Export($pg, $output_path . "out1.tif", "TIFF", $cmyk_hint); echo nl2br("Example 6: Result saved in " . $output_path . "out1.tif\n"); $doc->Close(); echo "Done.";
$doc->Save($output_path . "pdf_layers.pdf", SDFDoc::e_linearized); echo nl2br("Done.\n"); // The following is a code snippet shows how to selectively render // and export PDF layers. $doc = new PDFDoc($output_path . "pdf_layers.pdf"); $doc->InitSecurityHandler(); if (!$doc->HasOC()) { echo nl2br("The document does not contain 'Optional Content'\n"); } else { $init_cfg = $doc->GetOCGConfig(); $ctx = new Context($init_cfg); $pdfdraw = new PDFDraw(); $pdfdraw->SetImageSize(1000, 1000); $pdfdraw->SetOCGContext($ctx); // Render the page using the given OCG context. $page = $doc->GetPage(1); // Get the first page in the document. $pdfdraw->Export($page, $output_path . "pdf_layers_default.png"); // Disable drawing of content that is not optional (i.e. is not part of any layer). $ctx->SetNonOCDrawing(false); // Now render each layer in the input document to a separate image. $ocgs = $doc->GetOCGs(); // Get the array of all OCGs in the document. if ($ocgs != null) { $sz = $ocgs->Size(); for ($i = 0; $i < $sz; ++$i) { $ocg = new Group($ocgs->GetAt($i)); $ctx->ResetStates(false); $ctx->SetState($ocg, true); $fname = $output_path . "pdf_layers_" . $ocg->GetName() . ".png"; echo nl2br($fname . "\n");
$doc->Close(); echo nl2br("-----------------------------------------------------------\n"); } if ($example5_low_level) { $doc = new PDFDoc($input_path); $doc->InitSecurityHandler(); // Example 1. Extract all text content from the document $reader = new ElementReader(); // Read every page for ($itr = $doc->GetPageIterator(); $itr->HasNext(); $itr->Next()) { $reader->Begin($itr->Current()); DumpAllText($reader); $reader->End(); } // Example 2. Extract text content based on the // selection rectangle. echo nl2br("\n----------------------------------------------------"); echo nl2br("\nExtract text based on the selection rectangle."); echo nl2br("\n----------------------------------------------------\n"); $first_page = $doc->GetPage(1); $s1 = ReadTextFromRect($first_page, new Rect(27.0, 392.0, 563.0, 534.0), $reader); echo nl2br("\nField 1: " . $s1); $s1 = ReadTextFromRect($first_page, new Rect(28.0, 551.0, 106.0, 623.0), $reader); echo nl2br("\nField 2: " . $s1); $s1 = ReadTextFromRect($first_page, new Rect(208.0, 550.0, 387.0, 621.0), $reader); echo nl2br("\nField 3: " . $s1); // ... $doc->Close(); echo nl2br("-----------------------------------------------------------\n"); echo nl2br("Done.\n"); }
$s->StampText($doc, "Goodbye\nMoon", $ps); $doc->Save($output_path . $input_filename . ".ex5.pdf", SDFDoc::e_linearized); $doc->Close(); //-------------------------------------------------------------------------------- // Example 6) Add first page as stamp to all even pages $doc = new PDFDoc($input_path . $input_filename); $doc->InitSecurityHandler(); $fish_doc = new PDFDoc($input_path . "fish.pdf"); $fish_doc->InitSecurityHandler(); $s = new Stamper(Stamper::e_relative_scale, 0.3, 0.3); $s->SetOpacity(1); $s->SetRotation(270); $s->SetAsBackground(true); $s->SetPosition(0.5, 0.5, true); $s->SetAlignment(Stamper::e_horizontal_left, Stamper::e_vertical_bottom); $page_one = $fish_doc->GetPage(1); $ps = new PageSet(1, $doc->GetPageCount(), PageSet::e_even); $s->StampPage($doc, $page_one, $ps); $doc->Save($output_path . $input_filename . ".ex6.pdf", SDFDoc::e_linearized); $doc->Close(); //-------------------------------------------------------------------------------- // Example 7) Add image stamp at top right corner in every pages $doc = new PDFDoc($input_path . $input_filename); $doc->InitSecurityHandler(); $s = new Stamper(Stamper::e_relative_scale, 0.1, 0.1); $s->SetOpacity(0.8); $s->SetRotation(135); $s->SetAsBackground(false); $s->ShowsOnPrint(false); $s->SetAlignment(Stamper::e_horizontal_left, Stamper::e_vertical_top); $s->SetPosition(10.0, 10.0);
for ($i = 1; $i <= $num_pages; ++$i) { $itr = $doc->GetPageIterator(2 * $i - 1); $reader->Begin($itr->Current()); $new_page = $doc->PageCreate($itr->Current()->GetMediaBox()); $next_page = $itr; $next_page->Next(); $doc->PageInsert($next_page, $new_page); $writer->Begin($new_page); while (($element = $reader->Next()) != null) { //if ($element->GetType() == Element::e_path) $writer->WriteElement($element); } $writer->End(); $reader->End(); } $doc->Save($output_path . "doc_memory_edit.pdf", SDFDoc::e_remove_unused); // Save the document to a memory buffer. $buffer = $doc->Save(SDFDoc::e_remove_unused); // Write the contents of the buffer to the disk $outfile = fopen($output_path . "doc_memory_edit.txt", "w"); fwrite($outfile, $buffer); fclose($outfile); // Read some data from the file stored in memory $reader->Begin($doc->GetPage(1)); while (($element = $reader->Next()) != null) { if ($element->GetType() == Element::e_path) { echo "Path, "; } } $reader->End(); echo nl2br("\n\nDone. Result saved in doc_memory_edit.pdf and doc_memory_edit.txt ...\n");
function CertifyPDF() { $infile = '../../TestFiles/newsletter.pdf'; $outfile = '../../TestFiles/Output/newsletter_certified.pdf'; $certfile = '../../TestFiles/pdftron.pfx'; $result = true; try { echo nl2br('Certifying PDF document: "' . $infile . '".' . PHP_EOL); // Open an existing PDF $doc = new PDFDoc($infile); // Add an StdSignatureHandler instance to PDFDoc, making sure to keep track of it using the ID returned. $sigHandlerId = $doc->AddStdSignatureHandler($certfile, "password"); // Create a new signature form field in the PDFDoc. $sigField = $doc->FieldCreate('Signature1', Field::e_signature); // Assign the form field as an annotation widget to the PDFDoc so that a signature appearance can be added. $page1 = $doc->GetPage(1); $widgetAnnot = Widget::Create($doc->GetSDFDoc(), new Rect(0.0, 0.0, 0.0, 0.0), $sigField); $page1->AnnotPushBack($widgetAnnot); $widgetAnnot->SetPage($page1); $widgetObj = $widgetAnnot->GetSDFObj(); $widgetObj->PutNumber('F', 132.0); $widgetObj->PutName('Type', 'Annot'); // Tell PDFNetC to use the SignatureHandler created to sign the new signature form field. $sigDict = $sigField->UseSignatureHandler($sigHandlerId); // Add more information to the signature dictionary. $sigDict->PutName('SubFilter', 'adbe.pkcs7.detached'); $sigDict->PutString('Name', 'PDFTron'); $sigDict->PutString('Location', 'Vancouver, BC'); $sigDict->PutString('Reason', 'Document verification.'); // Appearance can be added to the widget annotation. Please see the "SignPDF()" function for details. // Add this sigDict as DocMDP in Perms dictionary from root $root = $doc->GetRoot(); $perms = $root->PutDict('Perms'); // add the sigDict as DocMDP (indirect) in Perms $perms->Put('DocMDP', $sigDict); // add the additional DocMDP transform params $refObj = $sigDict->PutArray("Reference"); $transform = $refObj->PushBackDict(); $transform->PutName("TransformMethod", "DocMDP"); $transform->PutName("Type", "SigRef"); $transformParams = $transform->PutDict("TransformParams"); $transformParams->PutNumber("P", 1); // Set permissions as necessary. $transformParams->PutName("Type", "TransformParams"); $transformParams->PutName("V", "1.2"); // Save the PDFDoc. Once the method below is called, PDFNetC will also sign the document using the information // provided. $doc->Save($outfile, 0); echo nl2br('Finished certifying PDF document' . PHP_EOL); $doc->Close(); } catch (Exception $e) { echo nl2br($e->getMessage() . PHP_EOL); echo nl2br($e->getTraceAsString() . PHP_EOL); $result = false; } return $result; }
// Finish the block of text $writer->WriteElement($builder->CreateTextEnd()); // Draw an image that will be clipped by the above text $writer->WriteElement($builder->CreateImage($img, 10.0, 100.0, 1300.0, 720.0)); $writer->End(); // save changes to the current page $doc->PagePushBack($page); // Start a new page ------------------------------------ // // The example illustrates how to embed the external font in a PDF document. // The example also shows how ElementReader can be used to copy and modify // Elements between pages. $reader = new ElementReader(); // Start reading Elements from the last page. We will copy all Elements to // a new page but will modify the font associated with text. $reader->Begin($doc->GetPage($doc->GetPageCount())); $page = $doc->PageCreate(new Rect(0.0, 0.0, 1300.0, 794.0)); $writer->Begin($page); // begin writing to this page $builder->Reset(); // Reset the GState to default // Embed an external font in the document. $font = Font::CreateTrueTypeFont($doc->GetSDFDoc(), $input_path . "font.ttf"); while (($element = $reader->Next()) != null) { if ($element->GetType() == Element::e_text) { $element->GetGState()->SetFont($font, 12); } $writer->WriteElement($element); } $reader->End(); $writer->End();
} else { echo nl2br("Field search failed\n"); } // Regenerate field appearances. $doc->RefreshFieldAppearances(); $doc->Save($output_path . "forms_test_edit.pdf", 0); echo nl2br("Done.\n"); //---------------------------------------------------------------------------------- // Sample: Form templating // Replicate pages and form data within a document. Then rename field names to make // them unique. //---------------------------------------------------------------------------------- // Sample: Copying the page with forms within the same document $doc = new PDFDoc($output_path . "forms_test1.pdf"); $doc->InitSecurityHandler(); $src_page = $doc->GetPage(1); $doc->PagePushBack($src_page); // Append several copies of the first page $doc->PagePushBack($src_page); // Note that forms are successfully copied $doc->PagePushBack($src_page); $doc->PagePushBack($src_page); // Now we rename fields in order to make every field unique. // You can use this technique for dynamic template filling where you have a 'master' // form page that should be replicated, but with unique field names on every page. RenameAllFields($doc, "employee.name.first"); RenameAllFields($doc, "employee.name.last"); RenameAllFields($doc, "employee.name.check1"); RenameAllFields($doc, "submit"); $doc->Save($output_path . "forms_test1_cloned.pdf", 0); echo nl2br("Done.\n");