优化 (Optimization)
优化功能可以通过压缩 PDF 文件中的图片、删除冗余数据,以及丢弃无用的用户数据等方式有效地减少 PDF 文件的大小,从而节省磁盘空间以及便于 PDF 文件的传输和存储。从 7.0 版本开始,优化模块提供了压缩 PDF 文件中彩色、灰度和黑白图像的方法,用于减少 PDF 文件的大小。
授权说明
- 要使用对比功能,请确保授权许可文件中包含
Optimization
模块权限。
通过压缩 PDF 文件中的彩色、灰度和黑白图像来减少 PDF 文件的大小
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_pdfdoc.h"
#include "include/pdf/fs_pdfpage.h"
#include "include/addon/optimization/fs_optimization.h"
using namespace std;
using namespace foxit;
using namespace foxit::common;
using namespace pdf;
using namespace foxit::addon;
PDFDoc doc("input_pdf_file");
ErrorCode error_code = doc.Load();
if (error_code != foxit::e_ErrSuccess) {
printf("Error: %d\n", error_code);
return 1;
}
Optimization_Pause pause(0,true);
addon::optimization::OptimizerSettings settings;
common::Progressive progressive = addon::optimization::Optimizer::Optimize(doc,settings,&pause);
cout << "Optimized Start." << endl;
Progressive::State progress_state = Progressive::e_ToBeContinued;
while (Progressive::e_ToBeContinued == progress_state) {
progress_state = progressive.Continue();
int percent = progressive.GetRateOfProgress();
String res_string;
res_string.Format("Optimize progress percent: %d %",percent);
std::cout<<res_string<<std::endl;
}
if(Progressive::e_Finished == progress_state)
{
doc.SaveAs(L"ImageCompression_Optimized.pdf", foxit::pdf::PDFDoc::e_SaveFlagRemoveRedundantObjects);
}
cout << "Optimized Finish." << endl;
C
#include "include/fs_basictypes_c.h"
#include "include/fs_common_c.h"
#include "include/fs_pdfdoc_c.h"
#include "include/fs_pdfpage_c.h"
#include "include/fs_optimization_c.h"
FS_PDFDOC_HANDLE doc;
FSDK_PDFDoc_Create0(input_file, &doc);
FSErrorCode error_code = FSDK_PDFDoc_Load(doc, NULL);
if (error_code != e_FSErrSuccess) {
FSDK_PDFDoc_Release(doc);
printf("Error: %d\n", error_code);
return 1;
}
Optimization_Pause pause(0,true);
FS_OPTIMIZERSETTINGS_HANDLE settings;
FSDK_OptimizerSettings_Create(&settings);
FS_PROGRESSIVE_HANDLE progressive = NULL;
FSDK_Optimizer_Optimize(doc, settings, &pause, &progressive);
printf("Optimized Start.\n”);
FSState progress_state = e_FSToBeContinued;
int percent = 0;
while (e_FSToBeContinued == progress_state) {
FSDK_Progressive_Continue(progressive, &progress_state);
FSDK_Progressive_GetRateOfProgress(progressive, &percent);
char res_string[60];
sprintf_s(res_string, 60, "Optimize progress percent: %d %", percent);
printf(“%s\n”, res_string);
}
if(e_FSFinished == progress_state)
{
wchar_t output_directory_optimized[60];
swprintf_s(output_directory_optimized, 60, L"%lsImageCompression_Optimized.pdf", output_directory);
FS_BOOL return_result = false;
FSDK_PDFDoc_SaveAs(doc, output_directory_optimized, e_FSSaveFlagRemoveRedundantObjects, &return_result);
}
printf("Optimized Finish.\n”,);
java
import com.foxit.sdk.common.Progressive;
import com.foxit.sdk.common.Constants;
import com.foxit.sdk.common.fxcrt.PauseCallback;
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.addon.*;
import com.foxit.sdk.addon.optimization.*;
import com.foxit.sdk.addon.optimization.Optimizer;
import java.io.File;
import static com.foxit.sdk.common.Constants.e_ErrSuccess;
import static com.foxit.sdk.pdf.PDFDoc.e_SaveFlagRemoveRedundantObjects;
PDFDoc doc = new PDFDoc("input_pdf_file");
error_code = doc.load(null);
if (error_code != e_ErrSuccess) {
System.out.println(" Error: " + error_code);
return;
}
PauseUtil pause = new PauseUtil();
OptimizerSettings settings = new OptimizerSettings();
System.out.println("Optimized Start.");
Progressive progressive = Optimizer.optimize(doc, settings, pause);
int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
state = progressive.resume();
int rate = progressive.getRateOfProgress();
System.out.println("Optimize progress percent: " + rate + "%");
}
if(state == Progressive.e_Finished)
{
doc.saveAs("ImageCompression_Optimized.pdf", e_SaveFlagRemoveRedundantObjects);
}
System.out.println("Optimized Finish.");
py
import sys
import site
if sys.version_info.major == 2:
_PYTHON2_ = True
else:
_PYTHON2_ = False
if _PYTHON2_:
# replace with the python2 lib path
site.addsitedir(‘../../../’)
from FoxitPDFSDKPython2 import *
else:
from FoxitPDFSDKPython3 import *
...
doc = PDFDoc(input_file)
error_code = doc.Load("input_pdf_file")
if error_code != e_ErrSuccess:
print("The Doc [{}] Error: {}\n".format(input_file, error_code))
return 1
pause = Optimization_Pause(0, True)
settings = OptimizerSettings()
settings.SetOptimizerOptions(
OptimizerSettings.e_OptimizerCompressImages)
progressive = Optimizer.Optimize(doc, settings, pause)
progress_state = Progressive.e_ToBeContinued
while Progressive.e_ToBeContinued == progress_state:
progress_state = progressive.Continue()
percent = progressive.GetRateOfProgress()
print("Optimize progress percent: {} %".format(percent))
if Progressive.e_Finished == progress_state:
doc.SaveAs(output_directory + "ImageCompression_Optimized.pdf", PDFDoc.e_SaveFlagRemoveRedundantObjects)
print("Optimized Finish.")
objc
#include "FSPDFObjC.h"
...
NSString *input_file = [input_path stringByAppendingString:@"[Optimize]ImageCompression.pdf"];
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:input_file];
errorCode = [doc load:@""];
if (errorCode != FSErrSuccess) {
NSLog(@"The Doc [%@] Error: %ld\n", input_file, errorCode);
return -1;
}
PauseUtil* pause = [[PauseUtil alloc]initWithParam:30];
// Using default settings.
FSOptimizerSettings* settings = [[FSOptimizerSettings alloc]init];
NSLog(@"Optimized Start.");
FSProgressive *progressive = [FSOptimizer optimize:doc settings:settings pause:pause];
while ([progressive resume] == FSProgressiveToBeContinued) {
int rate = [progressive getRateOfProgress];
NSLog(@"Optimize progress percent: %d %%\n", rate);
}
NSString *output_file = [output_directory stringByAppendingPathComponent:@"ImageCompression_Optimized.pdf"];
[doc saveAs:output_file save_flags:FSPDFDocSaveFlagRemoveRedundantObjects];
NSLog(@"Optimized Finish.");
js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
...
let doc = new FSDK.PDFDoc(input_file);
let error_code = doc.Load("");
if (error_code != FSDK.e_ErrSuccess) {
console.log("The Doc [%s] Error: %d\n", input_path, error_code);
return;
}
let pause = new Optimization_Pause(0, true);
let settings = new FSDK.OptimizerSettings();
let pause_callback = new FSDK.PauseCallback(pause);
settings.SetOptimizerOptions(FSDK.OptimizerSettings.e_OptimizerCompressImages);
let progressive = FSDK.Optimizer.Optimize(doc, settings, pause_callback);
let progress_state = FSDK.Progressive.e_ToBeContinued;
while (FSDK.Progressive.e_ToBeContinued == progress_state) {
progress_state = progressive.Continue();
let percent = progressive.GetRateOfProgress();
let res_string = `Optimize progress percent:${percent} %`;
}
if (FSDK.Progressive.e_Finished == progress_state) {
doc.SaveAs(output_directory + "ImageCompression_Optimized.pdf", FSDK.PDFDoc.e_SaveFlagRemoveRedundantObjects);
}
csharp
using System;
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using foxit.addon;
using foxit.addon.optimization;
using (PDFDoc doc = new PDFDoc("input_pdf_file"))
{
error_code = doc.Load(null);
if (error_code != ErrorCode.e_ErrSuccess)
{
Console.WriteLine("Document Load Error: {0}\n", error_code);
return;
}
using (Optimization_Pause pause = new Optimization_Pause(0, true))
using (OptimizerSettings settings = new OptimizerSettings())
{
Console.WriteLine("Optimized Start.\n");
Progressive progressive = Optimizer.Optimize(doc, settings, pause);
Progressive.State progress_state = Progressive.State.e_ToBeContinued;
while (Progressive.State.e_ToBeContinued == progress_state)
{
progress_state = progressive.Continue();
int percent = progressive.GetRateOfProgress();
Console.WriteLine("Optimize progress percent: {0}%\n", percent);
}
if (Progressive.State.e_Finished == progress_state)
{
doc.SaveAs("ImageCompression_Optimized.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagRemoveRedundantObjects);
}
Console.WriteLine("Optimized Finish.\n");
}
}