Optimize
A complete, runnable csharp program — 72 lines, shipped in your download.
Demonstrates Import & Output APIs
Same example, other languages: activex_cpp c cpp cpp_linux python vbnet
examples/csharp/optimize/optimize.cs
72 lines
// optimize -- C# port of examples\Vb6\optimize\optimize.bas
// Imports a PDF, runs Optimize() over it and writes the result.
using System;
using System.IO;
using LumasPdfSdk;
class Optimize
{
static TErrorProc _err = PDFError;
static int PDFError(IntPtr data, int errCode, string errMessage, int errType)
{
Console.WriteLine(errMessage);
return 0; // return zero to continue
}
static bool DoOptimize(IntPtr pdf, string inFile, string outFile)
{
LumasPdf.pdfCreateNewPDFW(pdf, ""); // output file opened later
LumasPdf.pdfSetDocInfoW(pdf, TDocumentInfo.diProducer, ""); // keep the original producer
// ifImportAsPage avoids converting pages to templates; drop the piece info dictionary.
LumasPdf.pdfSetImportFlags(pdf, (LumasPdfConsts.ifImportAll | LumasPdfConsts.ifImportAsPage) & ~LumasPdfConsts.ifPieceInfo);
// if2UseProxy reduces memory usage; duplicate check + normalize recommended.
LumasPdf.pdfSetImportFlags2(pdf, LumasPdfConsts.if2UseProxy | LumasPdfConsts.if2DuplicateCheck | LumasPdfConsts.if2Normalize | LumasPdfConsts.if2NoResNameCheck);
int retval = LumasPdf.pdfOpenImportFileW(pdf, inFile, (int)LumasPdfConsts.ptOpen, "");
if (retval < 0)
{
LumasPdf.pdfFreePDF(pdf);
return false;
}
LumasPdf.pdfImportPDFFile(pdf, 1, 1.0, 1.0);
LumasPdf.pdfCloseImportFile(pdf);
LumasPdf.pdfOptimize(pdf, LumasPdfConsts.ofInMemory | LumasPdfConsts.ofNewLinkNames | LumasPdfConsts.ofDeleteInvPaths, IntPtr.Zero);
TPDFError e = new TPDFError();
e.StructSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(TPDFError));
int count = LumasPdf.pdfGetErrLogMessageCount(pdf);
for (int i = 0; i < count; i++)
{
LumasPdf.pdfGetErrLogMessage(pdf, (uint)i, ref e);
Console.WriteLine(System.Runtime.InteropServices.Marshal.PtrToStringAnsi(e.Msg));
}
if (LumasPdf.pdfHaveOpenDoc(pdf)) // No fatal error occurred?
{
if (!LumasPdf.pdfOpenOutputFileW(pdf, outFile))
{
LumasPdf.pdfFreePDF(pdf);
return false;
}
return LumasPdf.pdfCloseFile(pdf);
}
return false;
}
static void Main()
{
string dir = AppDomain.CurrentDomain.BaseDirectory;
IntPtr pdf = LumasPdf.pdfNewPDF();
LumasPdf.pdfSetOnErrorProc(pdf, IntPtr.Zero, _err);
LumasPdf.pdfSetCMapDirW(pdf, Path.Combine(dir, "CMap"), LumasPdfConsts.lcmDelayed | LumasPdfConsts.lcmRecursive);
string outFile = Path.Combine(dir, "out.pdf");
string inFile = Path.Combine(dir, "sample_multipage.pdf");
if (DoOptimize(pdf, inFile, outFile))
Console.WriteLine("PDF file \"" + outFile + "\" successfully created!");
LumasPdf.pdfDeletePDF(pdf);
}
}
This file is in the SDK at examples/csharp/optimize/optimize.cs.
The build fails if this page and that file ever differ.