EStatusCode AppendPagesTest::Run(const TestConfiguration& inTestConfiguration) { EStatusCode status; do { PDFWriter pdfWriter; status = pdfWriter.StartPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"AppendPagesTest.PDF"),ePDFVersion13,LogConfiguration(true,true,RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"AppendPagesTestLog.txt"))); if(status != PDFHummus::eSuccess) { cout<<"failed to start PDF\n"; break; } EStatusCodeAndObjectIDTypeList result; result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/Original.pdf"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from Original.PDF\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/XObjectContent.PDF"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from XObjectContent.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/BasicTIFFImagesTest.PDF"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from BasicTIFFImagesTest.PDF\n"; status = result.first; break; } status = pdfWriter.EndPDF(); if(status != PDFHummus::eSuccess) { cout<<"failed in end PDF\n"; break; } }while(false); return status; }
EStatusCode AppendPagesTest::Run() { EStatusCode status; do { PDFWriter pdfWriter; status = pdfWriter.StartPDF("C:\\PDFLibTests\\AppendPagesTest.PDF",ePDFVersion13,LogConfiguration(true,true,"c:\\pdflibtests\\AppendPagesTestLog.txt")); if(status != PDFHummus::eSuccess) { cout<<"failed to start PDF\n"; break; } EStatusCodeAndObjectIDTypeList result; result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\Original.pdf",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from Original.PDF\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\XObjectContent.PDF",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from XObjectContent.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\BasicTIFFImagesTest.PDF",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from BasicTIFFImagesTest.PDF\n"; status = result.first; break; } status = pdfWriter.EndPDF(); if(status != PDFHummus::eSuccess) { cout<<"failed in end PDF\n"; break; } }while(false); return status; }
EStatusCode EmbedAsPages() { PDFWriter pdfWriter; EStatusCode status; do { status = pdfWriter.StartPDF(scBasePath + "EmbedAsPages.PDF",ePDFVersion13); if(status != eSuccess) break; // appending all pages of XObjectContent.pdf status = pdfWriter.AppendPDFPagesFromPDF(scBasePath + "XObjectContent.PDF",PDFPageRange()).first; if(status != eSuccess) break; // appending pages 0,1,2,3,5,6,7,8,9,10 of BasicTIFFImagesTest.PDF PDFPageRange selectivePageRange; selectivePageRange.mType = PDFPageRange::eRangeTypeSpecific; selectivePageRange.mSpecificRanges.push_back(ULongAndULong(0,3)); selectivePageRange.mSpecificRanges.push_back(ULongAndULong(5,10)); status = pdfWriter.AppendPDFPagesFromPDF(scBasePath + "BasicTIFFImagesTest.PDF",selectivePageRange).first; if(status != eSuccess) break; status = pdfWriter.EndPDF(); if(status != eSuccess) break; }while(false); if(eSuccess == status) cout<<"Succeeded in creating EmbedAsPages.PDF file\n"; else cout<<"Failed in creating EmbedAsPages.PDF file\n"; return status; }
EStatusCode InputImagesAsStreamsTest::Run() { // A minimal test to see if images as streams work. i'm using regular file streams, just to show the point // obviously this is quite a trivial case. PDFWriter pdfWriter; EStatusCode status; do { status = pdfWriter.StartPDF("C:\\PDFLibTests\\ImagesInStreams.PDF",ePDFVersion13); if(status != PDFHummus::eSuccess) { cout<<"failed to start PDF\n"; break; } PDFPage* page = new PDFPage(); page->SetMediaBox(PDFRectangle(0,0,595,842)); // JPG image InputFile jpgImage; status = jpgImage.OpenFile("C:\\PDFLibTests\\TestMaterials\\images\\otherStage.JPG"); if(status != PDFHummus::eSuccess) { cout<<"failed to open JPG image in"<<"C:\\PDFLibTests\\TestMaterials\\images\\otherStage.JPG"<<"\n"; break; } PDFFormXObject* formXObject = pdfWriter.CreateFormXObjectFromJPGStream(jpgImage.GetInputStream()); if(!formXObject) { cout<<"failed to create form XObject from file\n"; status = PDFHummus::eFailure; break; } jpgImage.CloseFile(); PageContentContext* pageContentContext = pdfWriter.StartPageContentContext(page); if(NULL == pageContentContext) { status = PDFHummus::eFailure; cout<<"failed to create content context for page\n"; } pageContentContext->q(); pageContentContext->cm(1,0,0,1,0,400); pageContentContext->Do(page->GetResourcesDictionary().AddFormXObjectMapping(formXObject->GetObjectID())); pageContentContext->Q(); delete formXObject; status = pdfWriter.EndPageContentContext(pageContentContext); if(status != PDFHummus::eSuccess) { cout<<"failed to end page content context\n"; break; } status = pdfWriter.WritePageAndRelease(page); if(status != PDFHummus::eSuccess) { cout<<"failed to write page\n"; break; } // TIFF image page = new PDFPage(); page->SetMediaBox(PDFRectangle(0,0,595,842)); InputFile tiffFile; status = tiffFile.OpenFile("C:\\PDFLibTests\\TestMaterials\\images\\tiff\\FLAG_T24.TIF"); if(status != PDFHummus::eSuccess) { cout<<"failed to open TIFF image in"<<"C:\\PDFLibTests\\TestMaterials\\images\\tiff\\FLAG_T24.TIF"<<"\n"; break; } formXObject = pdfWriter.CreateFormXObjectFromTIFFStream(tiffFile.GetInputStream()); if(!formXObject) { cout<<"failed to create image form XObject for TIFF\n"; status = PDFHummus::eFailure; break; } tiffFile.CloseFile(); pageContentContext = pdfWriter.StartPageContentContext(page); if(NULL == pageContentContext) { status = PDFHummus::eFailure; cout<<"failed to create content context for page with TIFF image\n"; } // continue page drawing, place the image in 0,0 (playing...could avoid CM at all) pageContentContext->q(); pageContentContext->cm(1,0,0,1,0,0); pageContentContext->Do(page->GetResourcesDictionary().AddFormXObjectMapping(formXObject->GetObjectID())); pageContentContext->Q(); delete formXObject; status = pdfWriter.EndPageContentContext(pageContentContext); if(status != PDFHummus::eSuccess) { cout<<"failed to end page content context for TIFF\n"; break; } status = pdfWriter.WritePageAndRelease(page); if(status != PDFHummus::eSuccess) { cout<<"failed to write page, for TIFF\n"; break; } // PDF InputFile pdfFile; status = pdfFile.OpenFile("C:\\PDFLibTests\\TestMaterials\\Original.pdf"); if(status != PDFHummus::eSuccess) { cout<<"failed to open PDF file in"<<"C:\\PDFLibTests\\TestMaterials\\Original.pdf"<<"\n"; break; } status = pdfWriter.AppendPDFPagesFromPDF(pdfFile.GetInputStream(),PDFPageRange()).first; if(status != PDFHummus::eSuccess) { cout<<"failed to append pages from Original.PDF\n"; break; } pdfFile.CloseFile(); status = pdfWriter.EndPDF(); if(status != PDFHummus::eSuccess) { cout<<"failed in end PDF\n"; break; } } while(false); return status; }
EStatusCode AppendSpecialPagesTest::Run(const TestConfiguration& inTestConfiguration) { EStatusCode status; PDFWriter pdfWriter; do { status = pdfWriter.StartPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"AppendSpecialPagesTest.pdf"),ePDFVersion13,LogConfiguration(true,true, RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"AppendSpecialPagesTestLog.txt"))); if(status != PDFHummus::eSuccess) { cout<<"failed to start PDF\n"; break; } EStatusCodeAndObjectIDTypeList result; result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/Protected.pdf"),PDFPageRange()); if(result.first == PDFHummus::eSuccess) { cout<<"failted to NOT ALLOW embedding of protected documents without providing pasword\n"; status = PDFHummus::eFailure; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/ObjectStreamsModified.pdf"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from ObjectStreamsModified.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/ObjectStreams.pdf"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from ObjectStreams.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/AddedItem.pdf"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from AddedItem.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/AddedPage.pdf"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from AddedPage.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/MultipleChange.pdf"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from MultipleChange.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/RemovedItem.pdf"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from RemovedItem.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF(RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"TestMaterials/Linearized.pdf"),PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from RemovedItem.pdf\n"; status = result.first; break; } status = pdfWriter.EndPDF(); if(status != PDFHummus::eSuccess) { cout<<"failed in end PDF\n"; break; } }while(false); return status; }
EStatusCode AppendSpecialPagesTest::Run() { EStatusCode status; PDFWriter pdfWriter; do { status = pdfWriter.StartPDF("C:\\PDFLibTests\\AppendSpecialPagesTest.PDF",ePDFVersion13,LogConfiguration(true,true,"c:\\pdflibtests\\AppendSpecialPagesTestLog.txt")); if(status != PDFHummus::eSuccess) { cout<<"failed to start PDF\n"; break; } EStatusCodeAndObjectIDTypeList result; result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\Protected.pdf",PDFPageRange()); if(result.first == PDFHummus::eSuccess) { cout<<"failted to NOT ALLOW embedding of protected documents\n"; status = PDFHummus::eFailure; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\ObjectStreamsModified.pdf",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from ObjectStreamsModified.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\ObjectStreams.pdf",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from ObjectStreams.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\AddedItem.pdf",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from AddedItem.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\AddedPage.pdf",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from AddedPage.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\MultipleChange.pdf",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from MultipleChange.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\RemovedItem.pdf",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from RemovedItem.pdf\n"; status = result.first; break; } result = pdfWriter.AppendPDFPagesFromPDF("C:\\PDFLibTests\\TestMaterials\\Linearized.pdf",PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from RemovedItem.pdf\n"; status = result.first; break; } status = pdfWriter.EndPDF(); if(status != PDFHummus::eSuccess) { cout<<"failed in end PDF\n"; break; } }while(false); return status; }
EStatusCode RotatedPagesPDF::Run(const TestConfiguration& inTestConfiguration) { LogConfiguration logConfiguration(true,true,RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"RotatedPagesLog.txt")); EStatusCode status; do { // PDF Page rotation writing PDFWriter pdfWriter; status = pdfWriter.StartPDF( RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"RotatedPages.pdf"), ePDFVersion13,logConfiguration); if(status != PDFHummus::eSuccess) { cout<<"failed to start RotatedPages.pdf\n"; break; } AbstractContentContext::TextOptions textOptions(pdfWriter.GetFontForFile( RelativeURLToLocalPath( inTestConfiguration.mSampleFileBase, "TestMaterials/fonts/arial.ttf")), 14, AbstractContentContext::eGray, 0); for(int i=0;i<6 && PDFHummus::eSuccess == status;++i) { PDFPage page; page.SetMediaBox(PDFRectangle(0,0,595,842)); page.SetRotate(33); if ( page.GetRotate().second != 0 ) { status = PDFHummus::eFailure; cout<<"Failed to reject invalid rotation\n"; break; } page.SetRotate(i*90); std::ostringstream s; s << "Page rotated by " << i*90 << " degrees."; PageContentContext* cxt = pdfWriter.StartPageContentContext(&page); cxt->WriteText(75,805,s.str(),textOptions); status = pdfWriter.EndPageContentContext(cxt); if(status != eSuccess) { status = PDFHummus::eFailure; cout<<"Failed to end content context\n"; break; } status = pdfWriter.WritePage(&page); if(status != PDFHummus::eSuccess) cout<<"failed to write page "<<i<<"\n"; } status = pdfWriter.EndPDF(); if(status != PDFHummus::eSuccess) { cout<<"failed in end RotatedPages.pdf\n"; break; } // PDF page rotation copy status = pdfWriter.StartPDF( RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"RotatedPagesCopy.pdf"), ePDFVersion13); if(status != PDFHummus::eSuccess) { cout<<"failed to start RotatedPagesCopy.pdf\n"; break; } EStatusCodeAndObjectIDTypeList result; // append pages result = pdfWriter.AppendPDFPagesFromPDF( RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"RotatedPages.pdf"), PDFPageRange()); if(result.first != PDFHummus::eSuccess) { cout<<"failed to append pages from RotatedPages.pdf\n"; status = result.first; break; } status = pdfWriter.EndPDF(); if(status != PDFHummus::eSuccess) { cout<<"failed in end RotatedPagesCopy.pdf\n"; break; } // PDF Page rotation parsing InputFile pdfFile; PDFParser pdfParser; status = pdfFile.OpenFile( RelativeURLToLocalPath(inTestConfiguration.mSampleFileBase,"RotatedPagesCopy.pdf")); if(status != PDFHummus::eSuccess) { cout<<"unable to open file RotatedPagesCopy.pdf for reading.\n"; break; } status = pdfParser.StartPDFParsing(pdfFile.GetInputStream()); if(status != PDFHummus::eSuccess) { cout<<"unable to parse input file"; break; } if(pdfParser.GetPagesCount() != 6) { cout<<"expecting 6 pages, got "<<pdfParser.GetPagesCount()<<"\n"; status = PDFHummus::eFailure; break; } for(unsigned long i=0;i<pdfParser.GetPagesCount() && PDFHummus::eSuccess == status;++i) { RefCountPtr<PDFDictionary> page = pdfParser.ParsePage(i); if (!page) { cout << i << ". page parsing failed\n"; status = PDFHummus::eFailure; break; } PDFPageInput input( &pdfParser, page ); if ( input.GetRotate() != i*90 ) { cout<< i << ". page has invalid rotation\n"; status = PDFHummus::eFailure; break; } } }while(false); return status; }