Files
core/PdfWriter/PdfWriterTest/PdfWriterTest.cpp
Ilya.Kirillov 9763fe9021 Реализована простая отрисовка пата.
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@63167 954022d7-b5bf-4e40-9824-e11837661b57
2016-05-21 00:09:52 +03:00

930 lines
22 KiB
C++

// PdfWriterTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "../PdfRenderer.h"
#include "../Src/Streams.h"
#include "../Src/Utils.h"
#include "../Src/Objects.h"
#include "../Src/Encrypt.h"
#include "../Src/Info.h"
#include "../Src/Document.h"
#include "../Src/Outline.h"
#include "../Src/Destination.h"
#include "../Src/Pages.h"
#include "../Src/Annotation.h"
#include "../Src/Image.h"
#include "../Src/Font.h"
#include "../Src/Font14.h"
#include "../Src/FontCidTT.h"
#include "../Src/Pattern.h"
#include <iostream>
#include "../../DesktopEditor/raster/BgraFrame.h"
#include "../../DesktopEditor/common/File.h"
#include "../../DesktopEditor/cximage/CxImage/ximage.h"
#include "../../DesktopEditor/cximage/CxImage/ximatif.h"
#include "../../DesktopEditor/raster/BgraFrame.h"
#include "../../DesktopEditor/cximage/tiff/tiffio.h"
#include "../../DesktopEditor/fontengine/ApplicationFonts.h"
#include "../../DesktopEditor/raster/Metafile/MetaFile.h"
#include <vector>
#ifdef DrawText
#undef DrawText
#endif
using namespace PdfWriter;
void TestStreams()
{
CFileStream oFS;
oFS.OpenFile(L"D:/Test Files/1.txt", false);
while (!oFS.IsEof())
{
char nChar = oFS.ReadChar();
std::cout << nChar;
}
CMemoryStream oMS;
oMS.WriteStream(&oFS, 0, NULL);
CFileStream oTS;
oTS.OpenFile(L"D:/Test Files/TestStreams.tmp", true);
oTS.WriteStream(&oMS, 0, NULL);
oTS.WriteChar(' ');
oTS.WriteChar('c');
oTS.WriteChar(' ');
oTS.WriteBinary((const BYTE*)"123", 3, NULL);
oTS.WriteChar(' ');
oTS.WriteEscapeName((const char*)"EscapeName");
oTS.WriteChar(' ');
oTS.WriteEscapeText((const BYTE*)"EscapeTest", StrLen("EscapeTest", 12));
oTS.WriteChar(' ');
oTS.WriteHex(251, 2);
oTS.WriteChar(' ');
oTS.WriteHex(251, 4);
oTS.WriteChar(' ');
oTS.WriteInt(63);
oTS.WriteChar(' ');
oTS.WriteReal(0.12);
oTS.WriteChar(' ');
oTS.WriteStr("String");
oTS.WriteChar(' ');
oTS.Close();
CFileStream oTS2;
oTS2.OpenFile(L"D:/Test Files/TestStreamsFilter.tmp", true);
oTS2.WriteStream(&oMS, STREAM_FILTER_FLATE_DECODE, NULL);
oTS2.Close();
}
void TestObjects()
{
CStream* pStream = new CFileStream();
((CFileStream*)pStream)->OpenFile(L"D:/Test Files/TestObjects.tmp", true);
CNullObject oNull;
pStream->Write(&oNull);
pStream->WriteChar('\n');
CBoolObject oBool = true;
pStream->Write(&oBool);
pStream->WriteChar('\n');
CNumberObject oNumber = 75;
pStream->Write(&oNumber);
pStream->WriteChar('\n');
CRealObject oReal = 13.756;
pStream->Write(&oReal);
pStream->WriteChar('\n');
CNameObject oName = "Name";
pStream->Write(&oName);
pStream->WriteChar('\n');
CStringObject oString("String");
pStream->Write(&oString, NULL);
pStream->WriteChar('\n');
CBinaryObject oBinary((BYTE*)"123", 3);
pStream->Write(&oBinary, NULL);
pStream->WriteChar('\n');
CArrayObject* pArray = new CArrayObject();
pArray->Add(12);
pArray->Add(0.13);
pArray->Add(13.1);
pStream->Write(pArray, NULL);
pStream->WriteChar('\n');
CProxyObject oProxy(pArray);
oProxy.SetRef(123, 0);
pStream->Write(&oProxy, NULL);
pStream->WriteChar('\n');
CDictObject oDict;
oDict.Add("Bool", true);
oDict.Add("Real", 0.12);
oDict.Add("Number", 12);
oDict.Add("Name", "SomeName");
oDict.Add("Array", pArray);
pStream->Write(&oDict, NULL);
pStream->WriteChar('\n');
delete pStream;
}
void TestEncrypt()
{
CEncrypt oEncrypt;
oEncrypt.Init();
oEncrypt.InitKey(1231, 0);
CFileStream oFS;
oFS.OpenFile(L"D:/Test Files/TestStreams.tmp", false);
CFileStream oTS;
oTS.OpenFile(L"D:/Test Files/TestEncrypt.tmp", true);
oTS.WriteStream(&oFS, 0, &oEncrypt);
oTS.Close();
oFS.Close();
}
void TestDict()
{
CStream* pStream = new CFileStream();
((CFileStream*)pStream)->OpenFile(L"D:/Test Files/TestDict.tmp", true);
CXref oXref(0);
CDictObject* pDict = new CDictObject(&oXref);
pDict->Add("Bool", true);
pDict->Add("Real", 0.12);
pDict->Add("Number", 12);
pDict->Add("Name", "SomeName");
pDict->Add("Array", new CArrayObject());
CStream* pDictStream = pDict->GetStream();
pDictStream->WriteEscapeText((BYTE*)"TestTest", 8);
pDictStream->WriteBinary((BYTE*)"TestTest", 8, NULL);
CDictObject* pDict2 = new CDictObject(&oXref);
pDict2->Add("Bool", true);
pDict2->Add("Real", 0.12);
pDict2->Add("Number", 12);
pDict2->Add("Name", "SomeName");
pDict2->Add("Array", new CArrayObject());
pDict2->SetFilter(STREAM_FILTER_FLATE_DECODE);
CStream* pDictStream2 = pDict2->GetStream();
pDictStream2->WriteEscapeText((BYTE*)"TestTest", 8);
pDictStream2->WriteBinary((BYTE*)"TestTest", 8, NULL);
TDate oDate;
MemSet(&oDate, 0, sizeof(oDate));
oDate.nDay = 18;
oDate.nMonth = 10;
oDate.nYear = 1986;
oDate.nHour = 12;
oDate.nMinutes = 0;
oDate.nSeconds = 0;
oDate.nInd = '-';
CInfoDict* pInfo = new CInfoDict(&oXref);
pInfo->SetInfo(EInfoType::InfoCreator, "Ilya");
pInfo->SetInfo(EInfoType::InfoCreationDate, oDate);
oXref.WriteToStream(pStream, NULL);
delete pStream;
}
void TestDocument1()
{
// PageLabels and Encryption
CDocument oPdf;
oPdf.CreateNew();
oPdf.AddPage();
oPdf.AddPageLabel(pagenumstyle_Decimal, 1, "Dec-");
oPdf.AddPage();
oPdf.AddPage();
oPdf.AddPageLabel(2, pagenumstyle_UpperRoman, 21, "UppRom-");
oPdf.SetPassword("123", "qwe");
oPdf.SetPermission(ENABLE_READ);
oPdf.SetEncryptionMode(encryptmode_R3);
oPdf.SaveToFile(L"D:/Test Files/Test1.pdf");
oPdf.Close();
}
void TestDocument2()
{
// Outline
CDocument oPdf;
oPdf.CreateNew();
oPdf.AddPage();
oPdf.AddPage();
oPdf.AddPage();
oPdf.AddPage();
COutline* pOutline1 = oPdf.CreateOutline(NULL, "Test1");
COutline* pOutline11 = oPdf.CreateOutline(pOutline1, "Test1.1");
COutline* pOutline111 = oPdf.CreateOutline(pOutline11, "Test1.1.1");
COutline* pOutline12 = oPdf.CreateOutline(pOutline1, "Test1.2");
COutline* pOutline2 = oPdf.CreateOutline(NULL, "Test2");
COutline* pOutline21 = oPdf.CreateOutline(pOutline2, "Test21");
COutline* pOutline22 = oPdf.CreateOutline(pOutline2, "Test22");
COutline* pOutline23 = oPdf.CreateOutline(pOutline2, "Test23");
COutline* pOutline221 = oPdf.CreateOutline(pOutline22, "Test223");
CDestination* pDest = oPdf.CreateDestination(2);
pDest->SetXYZ(0, 792, 0);
pOutline21->SetDestination(pDest);
pDest = oPdf.CreateDestination(3);
pDest->SetFit();
pOutline11->SetDestination(pDest);
oPdf.SaveToFile(L"D:/Test Files/Test2.pdf");
oPdf.Close();
}
void TestDocument3()
{
CDocument oPdf;
oPdf.CreateNew();
CPage* pPage;
pPage = oPdf.AddPage();
pPage->SetHeight(100);
pPage->SetWidth(100);
pPage->MoveTo(10, 10);
pPage->LineTo(20, 20);
pPage->CurveTo(70, 30, 30, 20, 50, 50);
pPage->ClosePath();
pPage->Fill();
pPage = oPdf.AddPage();
pPage->SetHeight(400);
pPage->SetWidth(600);
pPage->Ellipse(200, 200, 50, 100);
pPage->Fill();
pPage->GrSave();
double dAngle = 30 * 3.141592f / 180;
pPage->Concat(cos(dAngle), -sin(dAngle), sin(dAngle), cos(dAngle), -50, 50);
pPage->MoveTo(400, 200);
pPage->EllipseArcTo(400, 200, 50, 100, 0, 145);
pPage->Stroke();
pPage->GrRestore();
double pPattern[] ={ 1, 5, 5, 2 };
pPage->SetDash((const double*)pPattern, 4, 5);
pPage->MoveTo(10, 10);
pPage->LineTo(20, 20);
pPage->CurveTo(70, 30, 30, 20, 50, 50);
pPage->ClosePath();
pPage->Stroke();
pPage = oPdf.AddPage();
pPage->SetHeight(600);
pPage->SetWidth(400);
pPage->MoveTo(10, 10);
pPage->LineTo(350, 10);
pPage->LineTo(350, 350);
pPage->LineTo(10, 350);
pPage->ClosePath();
pPage->Stroke();
pPage->SetLineWidth(4);
pPage->GrSave();
pPage->SetLineCap(linecap_Butt);
pPage->MoveTo(20, 20);
pPage->LineTo(330, 20);
pPage->Stroke();
pPage->SetLineCap(linecap_Round);
pPage->MoveTo(20, 40);
pPage->LineTo(330, 40);
pPage->Stroke();
pPage->SetLineCap(linecap_ProjectingSquare);
pPage->MoveTo(20, 60);
pPage->LineTo(330, 60);
pPage->Stroke();
pPage->GrRestore();
pPage->GrSave();
double pPattern1[] ={ 1, 5, 5, 2 };
pPage->SetDash((const double*)pPattern1, 4, 0);
pPage->MoveTo(20, 80);
pPage->LineTo(330, 80);
pPage->Stroke();
double pPattern2[] ={ 1, 5, 5, 2 };
pPage->SetDash((const double*)pPattern2, 4, 5);
pPage->MoveTo(20, 100);
pPage->LineTo(330, 100);
pPage->Stroke();
pPage->GrRestore();
pPage->GrSave();
pPage->SetStrokeColor(255, 0, 0);
pPage->SetLineJoin(linejoin_Bevel);
pPage->MoveTo(20, 120);
pPage->LineTo(100, 120);
pPage->LineTo(100, 180);
pPage->Stroke();
pPage->SetStrokeColor(0, 255, 0);
pPage->SetLineJoin(linejoin_Miter);
pPage->SetMiterLimit(30);
pPage->MoveTo(120, 120);
pPage->LineTo(210, 120);
pPage->LineTo(210, 180);
pPage->Stroke();
pPage->SetStrokeColor(0, 0, 255);
pPage->SetLineJoin(linejoin_Round);
pPage->MoveTo(220, 120);
pPage->LineTo(330, 120);
pPage->LineTo(330, 180);
pPage->Stroke();
pPage->GrRestore();
pPage->GrSave();
pPage->SetFillColor(120, 15, 15);
pPage->MoveTo(30, 210);
pPage->LineTo(140, 210);
pPage->LineTo(140, 240);
pPage->LineTo(30, 240);
pPage->ClosePath();
pPage->MoveTo(20, 200);
pPage->LineTo(150, 200);
pPage->LineTo(150, 250);
pPage->LineTo(20, 250);
pPage->ClosePath();
pPage->EoFillStroke();
pPage->SetExtGrState(oPdf.GetExtGState(0.8, 0.8));
pPage->SetFillColor(15, 15, 120);
pPage->MoveTo(230, 210);
pPage->LineTo(320, 210);
pPage->LineTo(320, 240);
pPage->LineTo(230, 240);
pPage->ClosePath();
pPage->MoveTo(220, 200);
pPage->LineTo(330, 200);
pPage->LineTo(330, 250);
pPage->LineTo(220, 250);
pPage->ClosePath();
pPage->FillStroke();
pPage->GrRestore();
pPage->MoveTo(230, 310);
pPage->LineTo(320, 310);
pPage->LineTo(280, 340);
pPage->ClosePath();
pPage->Clip();
pPage->EndPath();
pPage->SetExtGrState(oPdf.GetExtGState(0.5, 0.5));
pPage->MoveTo(230, 310);
pPage->LineTo(320, 310);
pPage->LineTo(320, 340);
pPage->LineTo(230, 340);
pPage->ClosePath();
pPage->MoveTo(220, 300);
pPage->LineTo(330, 300);
pPage->LineTo(330, 350);
pPage->LineTo(220, 350);
pPage->ClosePath();
pPage->FillStroke();
oPdf.SaveToFile(L"D:/Test Files/Test3.pdf");
oPdf.Close();
}
void TestDocument4()
{
CDocument oPdf;
oPdf.CreateNew();
CPage* pPage = oPdf.AddPage();
pPage->SetHeight(600);
pPage->SetWidth(600);
pPage = oPdf.AddPage();
pPage->SetHeight(600);
pPage->SetWidth(600);
CDestination* pDest = oPdf.CreateDestination(1);
pDest->SetXYZ(0, 792, 0);
CAnnotation* pAnnot = oPdf.CreateLinkAnnot(0, TRect(0, 100, 100, 0), pDest);
pAnnot = oPdf.CreateUriLinkAnnot(0, TRect(0, 200, 100, 100), "www.rbc.ru");
oPdf.SaveToFile(L"D:/Test Files/Test4.pdf");
oPdf.Close();
}
void TestDocument5()
{
CDocument oPdf;
oPdf.CreateNew();
CPage* pPage = oPdf.AddPage();
pPage->SetHeight(600);
pPage->SetWidth(600);
//CBgraFrame oFrame;
//oFrame.OpenFile(L"D:/Test Files/Test.jb2");
//TIFF* pTiff = TIFFOpenW(L"D:/Test Files/Test.tiff", "w+");
//TIFFSetField(pTiff, TIFFTAG_IMAGEWIDTH, 800);
//TIFFSetField(pTiff, TIFFTAG_IMAGELENGTH, 1000);
//TIFFSetField(pTiff, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
//TIFFSetField(pTiff, TIFFTAG_XRESOLUTION, 200.0);
//TIFFSetField(pTiff, TIFFTAG_YRESOLUTION, 200.0);
//TIFFSetField(pTiff, TIFFTAG_COMPRESSION, COMPRESSION_CCITT_T6);
//for (int nY = 0; nY < 1000; ++nY)
//{
// BYTE pBuffer[800];
// for (int nX = 0; nX < 100; ++nX)
// {
// pBuffer[nX] = (nX > nY ? 0 : 255);
// }
// TIFFWriteScanline(pTiff, pBuffer, nY);
//}
//TIFFClose(pTiff);
//CImageDict* pImage = oPdf.CreateImage();
//pImage->LoadCCITT4(L"D:/Test Files/Test.tiff", 800, 1000);
//pPage->DrawImage(pImage, 100, 100, 200, 200);
BYTE* pBuffer = new BYTE[100 * 800];
for (int nY = 0; nY < 800; ++nY)
{
for (int nX = 0; nX < 100; ++nX)
{
pBuffer[nX + nY * 100] = rand() % 255;// (nX * 8 > nY ? 0 : 255);
}
}
CImageDict* pImage = oPdf.CreateImage();
pImage->LoadBW(pBuffer, 800, 800, 100);
delete pBuffer;
pPage->DrawImage(pImage, 100, 100, 200, 200);
pBuffer = new BYTE[100 * 800];
for (int nY = 0; nY < 800; ++nY)
{
for (int nX = 0; nX < 100; ++nX)
{
pBuffer[nX + nY * 100] = rand() % 255;// (nX * 8 > nY ? 0 : 255);
}
}
pImage = oPdf.CreateImage();
pImage->LoadBW(pBuffer, 800, 800, 100);
delete pBuffer;
pPage->DrawImage(pImage, 300, 300, 200, 200);
//CxImage oImage;
//oImage.Load(L"D:/Test Files/Test.jb2");
//CImageDict* pJb2Image = oPdf.CreateImage();
//pJb2Image->LoadJb2(L"D:/Test Files/Test.jb2", 1728, 2376);
//pPage->DrawImage(pJb2Image, 100, 100, 200, 200);
//CImageDict* pJpegImage = oPdf.CreateImage();
//pJpegImage->LoadJpeg(L"D:/Test Files/Test.jpg", 670, 473);
//pPage->DrawImage(pJpegImage, 100, 100, 200, 200);
//BYTE* pAlpha = new BYTE[4 * 400 * 300];
//for (int nY = 0; nY < 300; nY++)
//{
// for (int nX = 0; nX < 400; nX++)
// {
// int nIndex = 4 * (nY * 400 + nX);
// if (nY > 300 / 2)
// {
// pAlpha[nIndex + 0] = 255;
// pAlpha[nIndex + 1] = 0;
// pAlpha[nIndex + 2] = 0;
// pAlpha[nIndex + 3] = 255;
// }
// else
// {
// pAlpha[nIndex + 0] = 0;
// pAlpha[nIndex + 1] = 0;
// pAlpha[nIndex + 2] = 255;
// pAlpha[nIndex + 3] = 128;
// }
// }
//}
//CImageDict* pJpxImage = oPdf.CreateImage();
//pJpxImage->LoadJpx(L"D:/Test Files/Test.jp2", 400, 300);
//pJpxImage->LoadSMask(pAlpha, 400, 300);
//pPage->DrawImage(pJpxImage, 300, 100, 200, 200);
//delete[] pAlpha;
////CImageDict* pJb2Image = oPdf.CreateImage();
////pJb2Image->LoadJb2(L"D:/Test Files/Test.jbig2", 400, 300);
////pPage->DrawImage(pJb2Image, 300, 300, 200, 200);
//CImageDict* pRawImage = oPdf.CreateImage();
//BYTE* pBgra = new BYTE[4 * 100 * 100];
//for (int nY = 0; nY < 100; nY++)
//{
// for (int nX = 0; nX < 100; nX++)
// {
// int nIndex = 4 * (nY * 100 + nX);
// if (nX > nY)
// {
// pBgra[nIndex + 0] = 255;
// pBgra[nIndex + 1] = 0;
// pBgra[nIndex + 2] = 0;
// pBgra[nIndex + 3] = 255;
// }
// else
// {
// pBgra[nIndex + 0] = 0;
// pBgra[nIndex + 1] = 0;
// pBgra[nIndex + 2] = 255;
// pBgra[nIndex + 3] = 20;
// }
// }
//}
//pRawImage->LoadRaw(pBgra, 100, 100);
//pRawImage->LoadSMask(pBgra, 100, 100);
//pPage->DrawImage(pRawImage, 300, 300, 200, 200);
//delete[] pBgra;
oPdf.SaveToFile(L"D:/Test Files/Test5.pdf");
oPdf.Close();
}
void TestDocument6()
{
CDocument oPdf;
oPdf.CreateNew();
CPage* pPage = oPdf.AddPage();
pPage->SetHeight(600);
pPage->SetWidth(600);
CFontDict* pFont = oPdf.CreateFont14(standard14fonts_CourierOblique);
pPage->BeginText();
pPage->SetFontAndSize(pFont, 15);
pPage->DrawText(10, 100, (const BYTE*)"Ilya", 4);
pPage->SetFontAndSize(pFont, 30);
pPage->DrawText(100, 100, (const BYTE*)"Ilya", 4);
pPage->SetCharSpace(6);
pPage->DrawText(100, 200, (const BYTE*)"Ilya", 4);
pPage->SetCharSpace(0);
pPage->SetHorizontalScalling(200.0);
pPage->DrawText(100, 300, (const BYTE*)"Ilya", 4);
pPage->SetHorizontalScalling(100.0);
double dAngle = 30 * 3.141592f / 180;
pPage->SetTextMatrix(cos(dAngle), -sin(dAngle), sin(dAngle), cos(dAngle), 0, 0);
pPage->DrawText(100, 400, (const BYTE*)"Ilya", 4);
pPage->SetTextMatrix(1, 0, 0, 1, 0, 0);
pPage->DrawText(100, 500, (const BYTE*)"Ilya", 4);
pPage->EndText();
pFont = oPdf.CreateFont14(standard14fonts_TimesBold);
pPage->BeginText();
pPage->SetFontAndSize(pFont, 30);
pPage->SetTextRenderingMode(textrenderingmode_Fill);
pPage->DrawText(300, 100, (const BYTE*)"Ilya", 4);
pPage->SetTextRenderingMode(textrenderingmode_Stroke);
pPage->DrawText(300, 200, (const BYTE*)"Ilya", 4);
pPage->SetCharSpace(0);
pPage->SetFillColor(255, 0, 0);
pPage->SetStrokeColor(0, 0, 255);
pPage->SetTextRenderingMode(textrenderingmode_FillThenStroke);
pPage->DrawText(300, 300, (const BYTE*)"Ilya", 4);
pPage->SetHorizontalScalling(100.0);
pPage->SetTextRenderingMode(textrenderingmode_Invisible);
pPage->DrawText(300, 400, (const BYTE*)"Ilya", 4);
pPage->SetTextRenderingMode(textrenderingmode_StrokeClipping);
pPage->DrawText(300, 500, (const BYTE*)"Ilya", 4);
pPage->EndText();
pPage->MoveTo(300, 505);
pPage->LineTo(400, 505);
pPage->LineTo(400, 515);
pPage->LineTo(300, 515);
pPage->ClosePath();
pPage->Fill();
oPdf.SaveToFile(L"D:/Test Files/Test6.pdf");
oPdf.Close();
}
void TestDocument7()
{
struct TRange
{
unsigned int rangeStart;
unsigned int rangeEnd;
};
int nRangesCount = 10;
const TRange arrRanges[] =
{
{ 0x1D400, 0x1D4FF },
{ 0x1D500, 0x1D5FF },
{ 0x1D600, 0x1D6FF },
{ 0x1D700, 0x1D7FF },
{ 0x10000, 0x1007F },
{ 0x10380, 0x1039F },
{ 0x0020, 0x007F },
{ 0x0400, 0x04FF },
{ 0x3040, 0x309F },
{ 0x30A0, 0x30FF }
};
CDocument oPdf;
oPdf.CreateNew();
CPage* pPage = oPdf.AddPage();
pPage->SetHeight(600);
pPage->SetWidth(1000);
//CFontCidTrueType* pFont = oPdf.CreateTrueTypeFont(L"D:/Test Files/Test.ttf", 0);
CFontCidTrueType* pFont = oPdf.CreateTrueTypeFont(L"D:/Test Files/cambria.ttc", 1);
pPage->BeginText();
int nX = 10;
int nY = 590;
for (int nRangeIndex = 0; nRangeIndex < nRangesCount; nRangeIndex++)
{
unsigned int rangeStart = arrRanges[nRangeIndex].rangeStart;
unsigned int rangeEnd = arrRanges[nRangeIndex].rangeEnd;
unsigned int rangeLen = rangeEnd - rangeStart + 1;
unsigned int* pRange = new unsigned int[rangeLen];
for (unsigned int unIndex = rangeStart; unIndex <= rangeEnd; unIndex++)
{
pRange[unIndex - rangeStart] = unIndex;
}
pPage->SetFontAndSize(pFont, 10);
unsigned char* pString = pFont->EncodeString(pRange, rangeLen);
pPage->DrawText(nX, nY, (const BYTE*)pString, rangeLen * 2);
delete[] pString;
delete[] pRange;
nY -= 10;
}
pPage->EndText();
oPdf.SaveToFile(L"D:/Test Files/Test7.pdf");
oPdf.Close();
}
void TestDocument8()
{
CDocument oPdf;
oPdf.CreateNew();
CPage* pPage;
pPage = oPdf.AddPage();
pPage->SetHeight(600);
pPage->SetWidth(600);
pPage->GrSave();
pPage->Ellipse(200, 200, 50, 100);
pPage->Clip();
pPage->EndPath();
int nCount = 2;
unsigned char pColors[] =
{
255, 0, 0,
0, 0, 255
};
double pPoints[] ={0, 1};
CShading* pShading = oPdf.CreateAxialShading(200, 150, 200, 250, pColors, pPoints, 2);
pPage->DrawShading(pShading);
pPage->GrRestore();
pPage->GrSave();
pPage->Ellipse(400, 200, 50, 100);
pPage->Clip();
pPage->EndPath();
int nCount2 = 4;
unsigned char pColors2[] =
{
255, 0, 0,
0, 255, 0,
255, 255, 255,
0, 0, 255
};
double pPoints2[] ={ 0, 0.3, 0.7, 1 };
CShading* pShading2 = oPdf.CreateAxialShading(400, 150, 400, 250, pColors2, pPoints2, nCount2);
pPage->DrawShading(pShading2);
pPage->GrRestore();
pPage->GrSave();
pPage->Ellipse(200, 400, 100, 100);
pPage->Clip();
pPage->EndPath();
int nCount3 = 3;
unsigned char pColors3[] =
{
255, 0, 0,
255, 255, 0,
0, 0, 255
};
double pPoints3[] ={ 0, 0.5, 1 };
CShading* pShading3 = oPdf.CreateRaidalShading(200, 375, 20, 200, 425, 100, pColors3, pPoints3, nCount3);
pPage->DrawShading(pShading3);
pPage->GrRestore();
oPdf.SaveToFile(L"D:/Test Files/Test8.pdf");
oPdf.Close();
}
void TestDocument9()
{
CDocument oPdf;
oPdf.CreateNew();
CPage* pPage;
pPage = oPdf.AddPage();
pPage->SetHeight(600);
pPage->SetWidth(600);
CImageDict* pJpegImage = oPdf.CreateImage();
pJpegImage->LoadJpeg(L"D:/Test Files/Test.jpg", 600, 400);
CImageTilePattern* pPattern = oPdf.CreateImageTilePattern(70, 70, pJpegImage, imagetilepatterntype_InverseX);
pPage->GrSave();
pPage->SetPatternColorSpace(pPattern);
pPage->Ellipse(300, 300, 200, 150);
pPage->Clip();
pPage->Fill();
pPage->GrRestore();
oPdf.SaveToFile(L"D:/Test Files/Test9.pdf");
oPdf.Close();
}
std::vector<std::wstring> GetAllFilesInFolder(std::wstring wsFolder, std::wstring wsExt)
{
std::vector<std::wstring> vwsNames;
std::wstring wsSearchPath = wsFolder;
wsSearchPath.append(L"*.");
wsSearchPath.append(wsExt);
WIN32_FIND_DATA oFindData;
HANDLE hFind = ::FindFirstFile(wsSearchPath.c_str(), &oFindData);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
if (!(oFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
vwsNames.push_back(oFindData.cFileName);
}
} while (::FindNextFile(hFind, &oFindData));
::FindClose(hFind);
}
return vwsNames;
}
void ConvertFolder(std::wstring wsFolderPath, const int nType)
{
CApplicationFonts oFonts;
oFonts.Initialize();
MetaFile::CMetaFile oMetaFile(&oFonts);
CPdfRenderer oRenderer(&oFonts);
oMetaFile.Close();
std::wstring sExt;
switch (nType)
{
case MetaFile::c_lMetaEmf: sExt = L"emf"; break;
case MetaFile::c_lMetaWmf: sExt = L"wmf"; break;
case MetaFile::c_lMetaSvm: sExt = L"svm"; break;
}
double dPx2Mm = 25.4 / 96;
std::vector<std::wstring> vFiles = GetAllFilesInFolder(wsFolderPath, sExt);
for (int nIndex = 0; nIndex < vFiles.size(); nIndex++)
{
oRenderer.NewPage();
std::wstring wsFilePath = wsFolderPath;
wsFilePath.append(vFiles.at(nIndex));
if (oMetaFile.LoadFromFile(wsFilePath.c_str()))
{
double dW, dH, dX, dY;
oMetaFile.GetBounds(&dX, &dY, &dW, &dH);
dW *= dPx2Mm;
dH *= dPx2Mm;
dX *= dPx2Mm;
dY *= dPx2Mm;
double dAspect = dH / dW;
dW = 1000;
dH = dAspect * dW;
oRenderer.put_Width(dW);
oRenderer.put_Height(dH);
//oMetaFile.DrawOnRenderer(&oRenderer, -dX, -dY, dW, dH);
oMetaFile.DrawOnRenderer(&oRenderer, 0, 0, dW, dH);
oMetaFile.Close();
}
printf("%d of %d %S\n", nIndex, vFiles.size(), vFiles.at(nIndex).c_str());
}
oRenderer.SaveToFile(wsFolderPath + L"Out.pdf");
}
void TestMetafile()
{
//ConvertFolder(L"D://Test Files//Emf//", MetaFile::c_lMetaEmf);
ConvertFolder(L"D://Test Files//Wmf//", MetaFile::c_lMetaWmf);
}
void main()
{
//TestStreams();
//TestObjects();
//TestEncrypt();
//TestDict();
//TestDocument1();
//TestDocument2();
//TestDocument3();
//TestDocument4();
//TestDocument5();
//TestDocument6();
//TestDocument7();
//TestDocument8();
//TestDocument9();
TestMetafile();
}